# Deals > Source: https://scrape.do/documentation/amazon-scraper-api/deals/ Scrape Amazon's discounted products as a paginated, filterable deals grid The Deals endpoint returns Amazon's discounted products as a paginated, filterable result grid. Every product carries its current price alongside the struck-through price it was reduced from, so you can compute the discount yourself. Scope the grid to a category with a node id, bound it by price, sort it, and page through it. --- ## Endpoint ``` GET https://api.scrape.do/plugin/amazon/deals ``` --- ## Input Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `token` | string | * | Your Scrape.do API authentication token | | `geocode` | string | * | Amazon marketplace country code. Deals are currently available for `us`; other marketplaces return an error listing what is supported. `amazon_domain` (e.g., `amazon.com`) is accepted as an alternative. | | `node` | string | | Category node id to scope the deals grid to a category (e.g., `172282` for Electronics). Without it, the grid spans the whole marketplace. | | `low_price` | number | | Lower price bound. Digits with at most two decimals (e.g., `20` or `19.99`). | | `high_price` | number | | Upper price bound. Digits with at most two decimals (e.g., `100`). | | `rh` | string | | Additional Amazon refinement filter, merged with the deal and category refinements. | | `i` | string | | Amazon department alias. | | `sort_by` | string | | Sort order. One of `relevance`, `featured`, `price_low_to_high`, `price_high_to_low`, `average_review`, `most_recent`, `newest_arrivals`, `bestsellers`, `bestseller_rankings` (default: Amazon's own default) | | `s` | string | | Raw Amazon sort key, for sorts `sort_by` does not name. Ignored when `sort_by` is set. | | `page` | integer | | Page number between 1 and 20 (default: `1`) | | `zipcode` | string | | Postal code formatted according to country requirements to localize prices. Use either `zipcode` or `countryName`, not both. | | `countryName` | string | | Country-level location for marketplaces without ZIP-level delivery. | | `super` | boolean | | Enable residential/mobile proxies for higher success rates. Costs 10x credits (default: `false`) | | `language` | string | | Language code in ISO 639-1 format (e.g., `EN`, `DE`) | | `include_html` | boolean | | When `true`, the response includes the full raw HTML of the page after the structured JSON output (default: `false`) | | `device` | string | | Device profile for the request. Use `desktop` or `mobile` (default: `desktop`) | > [!WARNING] > Price bounds are validated: anything other than digits with at most two decimals returns `400`, because Amazon silently drops a bound it cannot read and would return an unfiltered grid. An unknown `sort_by` value returns `400 invalid_sort_by` with the accepted list. --- ## Response Parameters | Field | Type | Description | |-------|------|-------------| | `node` | string | Echo of the `node` parameter, when supplied | | `page` | number | Echo of the requested page | | `products` | array | Discounted products in Amazon's order, serialized as `[]` when nothing matched. Same product shape as the [Search](/documentation/amazon-scraper-api/search) endpoint. | | `filters` | array | Left-rail filter groups; each option carries an `rh` you can pass back to narrow further | | `pagination` | object | `{current_page, has_next}` for the page you asked for | | `html` | string | Full raw HTML of the Amazon page (only present when `include_html=true`) | ### Product Object Fields | Field | Type | Description | |-------|------|-------------| | `asin` | string | Product ASIN number | | `title` | string | Product title | | `url` | string | Product detail page URL | | `imageUrl` | string | Product thumbnail image URL | | `price` | object | Current discounted price with `currencyCode` and `amount` | | `price_before_deal` | object | The struck-through reference price Amazon shows above the current one, with `currencyCode` and `amount`. Labelled "Typical price" or "List price" depending on the marketplace. Absent when no struck-through price is shown. | | `rating` | object | Rating with `value`, `count`, and `stars` | | `reviewCount` | string | Number of reviews as displayed | | `isSponsored` | boolean | Whether this is a sponsored/ad placement | | `position` | number | Position on the deals page | | `sales_volume` | string | Localized "X bought in past month" text, when Amazon shows it | --- ## Example Usage ### Step 1: Define Your Deal Scope Decide what you want to track. This can be: - **Everything discounted**: no `node`, no price bounds - **A single category**: pass a `node` id - **A price window**: combine `node` with `low_price` / `high_price` ### Step 2: Send the API Request **cURL (API mode)** ```bash curl --location --request GET 'https://api.scrape.do/plugin/amazon/deals?token=&geocode=US' ``` **Python (API mode)** ```python import requests import json token = "" geocode = "US" url = f"https://api.scrape.do/plugin/amazon/deals?token={token}&geocode={geocode}" response = requests.request("GET", url) print(json.dumps(response.json(), indent=2)) ``` **Node.js (API mode)** ```javascript const axios = require('axios'); const token = ""; const geocode = "US"; const url = `https://api.scrape.do/plugin/amazon/deals?token=${token}&geocode=${geocode}`; axios.get(url) .then(response => { console.log(JSON.stringify(response.data, null, 2)); }) .catch(error => { console.error(error); }); ``` *(Go, Ruby, Java, C#, PHP examples are also available on the HTML version.)* ### Step 3: Receive Structured Deal Results The API returns the discounted products with both prices: ```json { "node": "172282", "page": 1, "products": [ { "asin": "B0B5V2YZPZ", "title": "Waykar Energy Star Dehumidifier...", "url": "https://www.amazon.com/dp/B0B5V2YZPZ", "price": { "currencyCode": "USD", "amount": 15.99 }, "price_before_deal": { "currencyCode": "USD", "amount": 19.99 }, "rating": { "value": 4.5, "count": 1284, "stars": 5 }, "reviewCount": "(1.2K)", "isSponsored": false, "position": 1 } ], "pagination": { "current_page": 1, "has_next": true } } ``` ### Pagination Loop on `pagination.has_next` — when it is `true`, request `page+1`: ``` /plugin/amazon/deals?token=...&geocode=us&page=2 ``` > [!NOTE] > The highest servable page is 20. `has_next` is also `false` on page 20 because `page=21` is refused. > [!NOTE] > Deal membership turns over quickly; two requests minutes apart can legitimately differ. An empty `products` array is a valid, successful answer when your filters match nothing. > [!NOTE] > Amazon does not render a savings percentage on these grids, so none is returned — the percentages that appear on a card belong to coupons or unrelated copy. You get both prices; the percentage is `(1 - price / price_before_deal) × 100`. > [!WARNING] > Failed requests (`deals_not_supported_for_marketplace`, upstream failures, unreadable pages) are not charged.