# Search Results & Categories > Source: https://scrape.do/documentation/amazon-scraper-api/search/ Search Amazon and scrape category pages with structured results The Search endpoint performs keyword searches on Amazon and returns structured product listings. This works for both search queries and category pages; since Amazon category pages use the same underlying structure as search results, this single endpoint handles both use cases. Get product titles, prices, ratings, Prime status, sponsored flags, and position rankings all in clean JSON format. --- ## Endpoint ``` GET https://api.scrape.do/plugin/amazon/search ``` --- ## Input Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `token` | string | * | Your Scrape.do API authentication token | | `keyword` | string | | Search query (must be URL-encoded). Optional when `seller` is supplied. | | `geocode` | string | * | Amazon marketplace country code (e.g., `us`, `gb`, `de`, `jp`) | | `zipcode` | string | | Postal code formatted according to country requirements for ZIP-level marketplaces. Use either `zipcode` or `countryName`, not both. | | `countryName` | string | | Country-level location for marketplaces without ZIP-level delivery. Passing the marketplace's own country name (for example, `countryName=Turkey` with `geocode=tr`) is unnecessary and ignored. | | `page` | integer | | Page number for pagination (default: `1`) | | `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`) | | `seller` | string | | Restrict results to one seller's catalog (e.g., `A2L77EE7U53NWQ`). Can be used on its own — when you pass `seller`, `keyword` becomes optional and you get that seller's listings. Combine both to search within a seller. | | `s` | string | | Amazon sort key (e.g., `price-asc-rank`, `review-rank`), passed through to Amazon | | `rh` | string | | Amazon refinement filter string. Send it plain (`n:172282,p_72:1248915011`) or percent-encoded — both forms apply the same refinement. Characters outside Amazon's refinement alphabet return `400 invalid_rh`. | | `node` | string | | Amazon category node id | | `low_price` / `high_price` | number | | Price range filter | | `i` | string | | Amazon department alias | | `field-keywords` | string | | Alternative keyword field | --- ## Response Parameters | Field | Type | Description | |-------|------|-------------| | `keyword` | string | The search query that was executed | | `page` | number | Current page number | | `totalResults` | string | Total results count as displayed by Amazon | | `total_results_extracted` | number | Largest integer parsed from `totalResults`, locale-independent | | `products` | array | List of product results | | `filters` | array | Left-rail filter groups (Brand, Price, Customer Reviews, etc.). Each option carries an `rh` string you can pass back in a follow-up search to apply the filter. | | `related_searches` | array | Query suggestions Amazon shows beneath the result list | | `categories` | array | Department picker entries with category `node` ids | | `status` | string | Request status (`success` or `error`) | | `errorMessage` | string | Error message if request failed | | `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 | Price with `currencyCode` and `amount`. `currencyCode` is a proper ISO 4217 code (e.g., `USD`, `MXN`, `SEK`). | | `rating` | object | Rating with `value`, `count`, and `stars`. `value` is on the 0-5 scale and `count` is the review tally as a number, with the marketplace's own magnitude word resolved (e.g., `(23,1 tn)` on `se` becomes `23100`). | | `reviewCount` | string | Number of reviews as displayed | | `isSponsored` | boolean | Whether this is a sponsored/ad placement | | `isPrime` | boolean | Whether Prime shipping is available | | `position` | number | Position on the search results page | | `badge` | string | Special badge if present (e.g., "Best Seller", "Overall Pick") | | `sales_volume` | string | Localized "X bought in past month" text | | `delivery` | object | Delivery info parsed from the result card: `price`, `isFree`, `date`, `fastestDate`, and `rawText` | | `price_before_deal` | object | Struck-through reference price with `currencyCode` and `amount`, when the card shows one | --- ## Example Usage ### Step 1: Define Your Search Query Decide what you want to search for on Amazon. This can be: - **Product keywords**: `laptop stands`, `wireless headphones`, `coffee maker` - **Brand + product**: `sony headphones`, `anker charger` - **Category browsing**: Use category-specific keywords For this example, we'll search for "laptop stands": ![Amazon Search Results](/uploads/amazon-search-results-scraper.png) The API will return structured data for each product in the search results, including ASINs, prices, ratings, and badges like "Best Seller" or "Overall Pick". ### Step 2: Send the API Request **cURL (API mode)** ```bash curl --location --request GET 'https://api.scrape.do/plugin/amazon/search?token=&keyword=laptop%20stands&geocode=US&page=1' ``` **Python (API mode)** ```python import requests import json token = "" keyword = "laptop stands" geocode = "US" page = 1 url = f"https://api.scrape.do/plugin/amazon/search?token={token}&keyword={keyword}&geocode={geocode}&page={page}" response = requests.request("GET", url) print(json.dumps(response.json(), indent=2)) ``` **Node.js (API mode)** ```javascript const axios = require('axios'); const token = ""; const keyword = encodeURIComponent("laptop stands"); const geocode = "US"; const page = 1; const url = `https://api.scrape.do/plugin/amazon/search?token=${token}&keyword=${keyword}&geocode=${geocode}&page=${page}`; 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.)* > [!NOTE] > You can also scrape a seller's entire catalog without a keyword: pass `seller=&geocode=...` on its own and the response is that seller's listings. Combine `seller` with `keyword` to search within a single seller. ### Step 3: Receive Structured Search Results The API returns a paginated list of products with all relevant details: ```json { "keyword": "laptop stands", "page": 1, "totalResults": "1-16 of over 10,000 results", "products": [ { "asin": "B0C1HGKNG7", "title": "Adjustable Laptop Stand for Desk, Ergonomic Computer Riser...", "url": "https://www.amazon.com/dp/B0C1HGKNG7", "imageUrl": "https://m.media-amazon.com/images/I/71abc123.jpg", "price": { "currencyCode": "USD", "amount": 29.95 }, "rating": { "value": 4.6, "count": 9100, "stars": 5 }, "reviewCount": "(9.1K)", "isSponsored": false, "isPrime": true, "position": 1, "badge": "Overall Pick" }, { "asin": "B0CBL1TQMP", "title": "Portable Laptop Stand, Foldable Aluminum Computer Holder...", "url": "https://www.amazon.com/dp/B0CBL1TQMP", "imageUrl": "https://m.media-amazon.com/images/I/61xyz789.jpg", "price": { "currencyCode": "USD", "amount": 18.99 }, "rating": { "value": 4.4, "count": 2340, "stars": 4 }, "reviewCount": "(2.3K)", "isSponsored": true, "isPrime": true, "position": 2, "badge": null }, { "asin": "B0D7EXAMPLE", "title": "Heavy Duty Laptop Stand with Cooling Fan...", "url": "https://www.amazon.com/dp/B0D7EXAMPLE", "imageUrl": "https://m.media-amazon.com/images/I/51def456.jpg", "price": { "currencyCode": "USD", "amount": 45.99 }, "rating": { "value": 4.8, "count": 567, "stars": 5 }, "reviewCount": "(567)", "isSponsored": false, "isPrime": false, "position": 3, "badge": "Best Seller" } ], "status": "success", "errorMessage": null } ``` ### Pagination To get additional pages of results, increment the `page` parameter: ``` /plugin/amazon/search?token=...&keyword=laptop%20stands&geocode=us&zipcode=14217&page=2 ``` > [!NOTE] > The `isSponsored` field helps you distinguish between organic results and paid placements. The `position` field shows the exact ranking on the page. > [!WARNING] > Search keywords must be URL-encoded. Response is limited to a maximum of 4MB. > [!NOTE] > Add `include_html=true` to your request to receive the full raw HTML of the Amazon search results page alongside the structured JSON output. The HTML will be included in an `html` field at the end of the response.