Amazon Product Search Scraper

Reads the public search results that Amazon shows for a keyword, without logging in, and returns the products as JSON: ASIN, title, price shown, rating, number of ratings and product address.

You pay per product returned, and you set a cost cap per run. This Actor is independent and not affiliated with, endorsed by or sponsored by Amazon.

Input

Input fields of the Actor
queryKeywords as typed in the Amazon search box, required
maxItemsMaximum products returned. Default 20, up to 100
maxCostUsdCost cap per run in USD, start event included. Default 0.55, enough for 100 products
proxyConfigurationOptional Apify proxy settings. Unset by default

Example input

{
  "query": "standing desk",
  "maxItems": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}

Output

Fields of each item
asinAlways returned
titleAlways returned
priceThe price as displayed on the result card, currency symbol included, or null when the card shows none
priceAmountThe number in the price shown, or null
ratingStars out of 5, or null
reviewsCountNumber of ratings shown, or null
urlAddress of the product page

A product whose card shows no price is still returned, with price and priceAmount set to null, and still charged: the price is one field among several. How often a card shows no price depends on the address the Actor reads from. Measured: when the Actor reads from an exit outside the United States, the page shows "See options" in place of the price on part of the products (25 of 56 cards in one measured run), and those products come back with price null; from the United States, every card measured showed a price. Set apifyProxyCountry to US in proxyConfiguration to read from the United States. The run summary counts the cards without a price and says why.

Example output

Output, from a run of this Actor with that input: two of the three items. The prices, ratings and counts are those Amazon displayed at the time of the run and change from one run to the next.

[
  {
    "asin": "B0F8MHPVPH",
    "title": "FEZIBO Standing Desk 48 × 24 Inch Electric Height Adjustable, Maple",
    "price": "$99.99",
    "priceAmount": 99.99,
    "rating": 4.5,
    "reviewsCount": 4921,
    "url": "https://www.amazon.com/dp/B0F8MHPVPH"
  },
  {
    "asin": "B0HKSPH28T",
    "title": "ModernMate 63\" L Shaped Executive Standing Desk, Privacy Panel & Bookshelf",
    "price": "$699.99",
    "priceAmount": 699.99,
    "rating": 4.8,
    "reviewsCount": 223,
    "url": "https://www.amazon.com/dp/B0HKSPH28T"
  }
]

Cost of a run

Cost of one run, start event included
20 products (the default)20 × $0.004 + $0.00005 = $0.08005
100 products (the maximum)100 × $0.004 + $0.00005 = $0.40005

maxCostUsd stops the run when the cost of the products returned, start event included, reaches it. Products already returned are kept, and the run status says it stopped at the cost cap.

What it does not return

Anything about a seller: no seller name, no storefront, no offer by third parties. Anything about the people who review: no reviewer name, no review text. Any field that is not listed above.

It reads search results only. It does not open a product page, so it does not return a description, a list of images or the full list of reviews.

How the Actor reads Amazon

One request every 5 seconds, with a declared User-Agent that names this Actor. A result page lists between about 40 and 57 products; the Actor reads the next page when the first is used up. No login, no cookie, no account, no challenge solving, no disguise. If the site refuses two requests in a row (for example status 429, 503 or 403, a robot-check page or a sign-in page), the run stops there and keeps what it already returned: it does not retry around the refusal.

Other Actors by Tollprobe

LinkedIn Jobs Scraper: public job offers from LinkedIn as JSON, billed per offer.