Amazon Scraper API

Docs

ChatGPT Claude

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

ParamTypeRequiredDefaultDescription
querystring✅ yes-Search keywords
domainenum-comAmazon marketplace TLD
sort_byenum-best_matchbest_match · price_asc · price_desc · avg_customer_review · newest
start_pageint-1Page to start from (1-10)
pagesint-1Number 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

FieldNotes
price_strikethroughThe 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_priceSame 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_countPrecise 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_volumeVerbatim 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_position1-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.