Search endpoint
Run Amazon keyword searches and get ranked product listings with organic/sponsored positions, prices, ratings, and images.
GET /v1/amazon/search
Returns Amazon search-results listings for a keyword query.
Request
GET /api/v1/amazon/search?query=wireless+headphones&domain=com&sort_by=best_match&api_key=asa_live_YOUR_KEY
Query parameters
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | ✅ yes | - | Search keywords |
domain | enum | - | com | Amazon marketplace TLD |
sort_by | enum | - | best_match | best_match · price_asc · price_desc · avg_customer_review · newest |
start_page | int | - | 1 | Page to start from (1-10) |
pages | int | - | 1 | Number of consecutive pages to fetch (1-10) - each counts as a request |
Response (200)
{
"page": 1,
"products": [
{
"asin": "B000P22TIY",
"title": "Acqua Di Gio By Giorgio Armani For Men. Eau De Toilette Spray 3.4 Fl Oz",
"url": "https://www.amazon.com/dp/B000P22TIY",
"price": 19.57,
"price_strikethrough": null,
"highest_price": null,
"currency": "USD",
"rating": 4.5,
"reviews_count": 150532,
"sales_volume": "20K+ bought in past month",
"image": "https://m.media-amazon.com/images/I/71…",
"is_prime": true,
"is_amazons_choice": false,
"is_sponsored": false,
"best_seller": true,
"organic_position": 1,
"sponsored_position": null,
"shipping_information": null,
"pricing_count": null,
"manufacturer": null,
"is_video": false
}
],
"html": ""
}
Field notes
| Field | Notes |
|---|---|
price_strikethrough | The list price (“was”) when the product is on sale. null when the product is at its normal price. We explicitly filter out per-unit prices ($0.23/fluid ounce, $11.15/milliliter, etc.) so this only ever holds a real discount anchor. |
highest_price | Same value as price_strikethrough on the search card. Search cards never expose a multi-tier price range (only PDPs do), so the strikethrough is the implicit upper bound. |
reviews_count | Precise integer count parsed from the rating wrapper’s aria-label (e.g. "5,054 ratings"). Not the rounded (5K) display value. null when Amazon hides reviews (typical for brand-new SKUs). |
sales_volume | Verbatim Amazon string, e.g. "5K+ bought in past month", "200+ bought in past week". null when Amazon doesn’t surface a badge for that card (categories with low velocity often omit it). |
organic_position | 1-indexed rank among non-sponsored cards. Sponsored cards have organic_position: null and a positive sponsored_position instead. The first organic card after any run of sponsored cards still gets organic_position: 1. |
Empty-result response (200)
When Amazon legitimately returns zero matches for a query (rare on the public web, since Amazon’s fuzzy matcher usually surfaces something), the response stays HTTP 200 with an empty products array and a no_results: true flag, so you can tell “Amazon returned nothing” from “we failed to scrape”:
{
"page": 1,
"products": [],
"no_results": true,
"total_results": 0,
"html": null
}
Common errors
Same as the product endpoint. 502 target_unreachable on international marketplaces is more common than on .com - see our country routing guide.