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
| query | Keywords as typed in the Amazon search box, required |
|---|---|
| maxItems | Maximum products returned. Default 20, up to 100 |
| maxCostUsd | Cost cap per run in USD, start event included. Default 0.55, enough for 100 products |
| proxyConfiguration | Optional Apify proxy settings. Unset by default |
Example input
{ "query": "standing desk", "maxItems": 3, "proxyConfiguration": { "useApifyProxy": true, "apifyProxyCountry": "US" } }
Output
| asin | Always returned |
|---|---|
| title | Always returned |
| price | The price as displayed on the result card, currency symbol included, or null when the card shows none |
| priceAmount | The number in the price shown, or null |
| rating | Stars out of 5, or null |
| reviewsCount | Number of ratings shown, or null |
| url | Address 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
| 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.