Amazon Reviews & Ratings Scraper: Histogram, Top Reviews avatar

Amazon Reviews & Ratings Scraper: Histogram, Top Reviews

Pricing

from $20.00 / 1,000 product & reviews snapshots

Go to Apify Store
Amazon Reviews & Ratings Scraper: Histogram, Top Reviews

Amazon Reviews & Ratings Scraper: Histogram, Top Reviews

No-login Amazon snapshot: product face, rating aggregates with the 5-star histogram and the top reviews with full text (up to 8 US plus up to 5 other-country). $0.02 per snapshot, $0.008 ratings-only. Failed lookups are free, and so is any product with no rating data at all.

Pricing

from $20.00 / 1,000 product & reviews snapshots

Rating

0.0

(0)

Developer

Kyle Wang

Kyle Wang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Amazon Reviews Snapshot — Ratings, Histogram & Top Reviews

One ASIN in, one snapshot out. No login, no cookies, no account of yours at risk — every request is an ordinary anonymous product-page fetch.

For each product you get:

  • the full product face: title, brand, price (and list price), availability, feature bullets, hi-res main image
  • the rating aggregates: average stars, total rating count and the full 5-star histogram
  • the top reviews with complete text: author, stars, headline, date, reviewer country, Verified Purchase badge, the variation bought and the helpful count

Please read this before you buy

This Actor returns Amazon's top-review block and never paginates. In our cloud measurements that block is up to 8 reviews from the US marketplace plus, on many products, up to 5 more that Amazon labels top reviews from other countries — measured up to 13 rows, 8 on many products, and fewer when a product simply has fewer reviews (a 50-ASIN batch measured 13 on 14 products, 8 on 13, 9 on one and 1 on one). Every review carries a country field, so you can tell the two blocks apart.

Those top reviews are all an anonymous session is ever served. Full review export does not exist without logging in, and this Actor will never ask you for your account, your cookies or your credentials. If you need thousands of reviews per product, this is not the tool.

What it is instead: the zero-friction way to get a product's rating picture and its most influential reviews in one call, with nothing to configure and nothing to rotate.

Example output

Real output for B09B8V1LZ3, copied from cloud run ZChVn0u530yL9mpU4 (2 of 6 feature bullets and 1 of 8 review objects shown here; the Actor returns them all, with every review body in full):

{
"asin": "B09B8V1LZ3",
"url": "https://www.amazon.com/dp/B09B8V1LZ3",
"fetchedAt": "2026-10-24T02:43:08.901Z",
"mode": "snapshot",
"fetchStatus": "ok",
"blockReason": null,
"title": "Amazon Echo Dot (newest model) - Vibrant sounding speaker, Designed for Alexa+, Great for bedrooms, dining rooms and offices, Charcoal",
"brand": "Amazon",
"priceAmount": 79.99,
"priceCurrency": "USD",
"priceIsRange": false,
"listPriceAmount": null,
"availability": "In Stock",
"bulletPoints": [
"Your favorite music and content – Play music, audiobooks, and podcasts from Amazon Music, Apple Music, Spotify and others or via Bluetooth throughout your home.",
"Alexa is happy to help – Ask Alexa for weather updates and to set hands-free timers, get answers to your questions and even hear jokes. Need a few extra minutes in the morning? Just tap your Echo Dot to snooze your alarm."
],
"mainImage": "https://m.media-amazon.com/images/I/61J2sQtBYDL._AC_SL1500_.jpg",
"ratingAverage": 4.7,
"ratingCount": 201344,
"histogram5": 82,
"histogram4": 11,
"histogram3": 3,
"histogram2": 1,
"histogram1": 3,
"reviews": [
{
"position": 1,
"reviewId": "R2R4AN7J0D9RVL",
"author": "VO",
"profileUrl": "/gp/profile/amzn1.account.AHCLNOUDY6KCOP54E3TS3JGWILBQ",
"rating": 5,
"title": "Great Little Speaker!",
"date": "2026-10-16",
"dateRaw": "Reviewed in the United States on October 16, 2026",
"country": "United States",
"verified": true,
"variation": "Color: Charcoal | Size: Pack of 1 | Configuration: Device only",
"body": "I absolutely love my Echo Dot! It has great sound quality, is super easy to set up, and makes everyday life so much easier. I love being able to ask A …",
"helpfulCount": 1
}
],
"reviewsCount": 8,
"reviewsCoverage": "top",
"variantHit": true,
"variantRetries": 0,
"attempts": 1,
"bytesFetched": 2135257,
"proxyMode": "DATACENTER",
"billedEvent": "snapshot"
}

Pricing

Pay per event. No startup fee, and failed lookups are free.

EventPriceYou get
snapshot$0.02 per productProduct face + rating aggregates + histogram + the top reviews with full text
ratings$0.008 per productProduct face + rating aggregates + histogram, no review text
(nothing)$0.00Blocked, not-found and error rows, and any product that came back with no rating data at all — delivered so you can see what happened, never charged

Three things worth knowing:

  • A product whose page variant never showed reviews is delivered and billed as ratings, not snapshot. You pay for what you received. The row says so explicitly: reviewsCoverage: "none", variantHit: false, and reviews: [].
  • A product that came back with no rating average, no rating count and no histogram is delivered free, with billedEvent: null and freeReason: "no_rating_data". Old, new and not-yet-rated products are common in bulk lists; the product face is still yours, the ratings tier is not charged because there was nothing in it. RUN_SUMMARY.delivered.okUncharged counts them.
  • Retrying the review draw never raises your bill. Every row is charged once, at most.

billedEvent on each row and RUN_SUMMARY.billing (intended vs. actually charged, per event) make the bill fully auditable.

Input

FieldTypeDefaultNotes
asinsstring listB09B8V1LZ3ASINs or amazon.com /dp/ URLs, one per line. Duplicates collapse.
includeReviewsbooleantruefalse = the ratings-only tier: same product face and aggregates, no review text, one request per product.
maxItemsinteger100Cap per run; the rest land in skippedBy.unattempted. Also sets the zero-delivery fuse: max(2, 10% of the batch) consecutive walled products.
maxVariantRetriesinteger3Extra review draws per product. See the measured numbers below.
proxyCountryselectUSOnly US in this version — amazon.com prices and availability are US.
maxTotalChargeUsdnumber20Hard budget cap; the run stops gracefully when it is reached. The platform minimum, $0.04, buys 5 ratings-only rows or 2 full snapshots.

Only amazon.com is supported. .de / .co.uk / .co.jp URLs are rejected before any request is made and are not charged.

How the review draw works

Amazon renders the top reviews into the product page's HTML only in some of its anonymous server-side variants. The same product can come back with reviews on one request and without them on the next, so the Actor simply asks again through a fresh proxy session until the block appears.

Measured, not modelled — and it moves. Pooled across 23 snapshot-mode cloud runs at the default maxVariantRetries: 3: 101 products, 163 draws (node cloud-tests/cost-report.mjs recomputes this from the archived evidence whenever you want the current figure).

  • First draw: 37 of 101 products (37%) came back with reviews.
  • By the fourth draw: 60 of 101 (59%), at 1.61 draws per product. The 41 misses were still delivered with their product face and rating aggregates, and billed at the cheaper ratings price.
  • These numbers have moved before, in both directions. The same pool read 57% first draw / 89% by the fourth draw on 2026-10-24 (n=54), and the single largest batch ever run measured 62.5% / 90.6% (run WrgFps9vWRKPLhw0b). On 2026-10-26 Amazon was walling much harder — 28 of 50 products in a 50-ASIN batch came back blocked — and the products that did get through carried the review block far less often. Read any single figure as a snapshot of Amazon's current mood, not as a specification.
maxVariantRetriesDrawsWhat it buys (measured, n=101, pooled 2026-10-26)
0137% of products came back with reviews on the first draw.
3 (default)459% came back with reviews, at 1.61 draws per product.
67The ceiling. Each extra draw costs a few seconds and 2–4 MB of transfer, and of the 7 products that ever reached a fourth draw only 2 got reviews from it — so draws five to seven buy very little.

RUN_SUMMARY.variantStats.hitRateByDraw reports the real per-draw hit rate of your run. That is the only figure that describes the batch you actually paid for, and it is the one to tune against.

Output

Dataset — one row per requested ASIN. See the example above for the full shape; the fields you will use most:

FieldMeaning
fetchStatusok, blocked, notFound or error. Only ok rows are billed.
blockReasonWhy a non-ok row happened: robot_wall, guard, soft_wall, signin_wall, arbitration, region_redirect, no_product_face, not_found, network, parse.
ratingCountRatings behind ratingAverage, scoped to this product only (never a neighbouring carousel's count).
histogram5…histogram1Star shares in whole percent; they sum to 100 ±1 from rounding.
reviews[].countryWhich marketplace the reviewer wrote from. Amazon's own split: the first block is US, the rest are labelled from other countries.
reviewsCountHow many review rows came back: up to 8 from amazon.com plus up to 5 from Amazon's other-country block — measured up to 13, 8 on many products — and 0 when no variant carried the block or in ratings-only mode. A product with fewer reviews than that yields fewer rows.
reviewsCoveragetop = reviews parsed, none = no variant carried them, null = ratings-only mode.
priceIsRangetrue when Amazon showed a variation "from" price rather than one offer's price.
attempts, bytesFetched, proxyModeCost telemetry for that product.

Key-value store

  • RUN_SUMMARY — the full report: requested/delivered counts, skippedBy, variantStats, field coverage, request and byte usage, the billing ledger and a completeness identity check proving every requested ASIN ended in exactly one terminal state.
  • OUTPUT — the one-glance version (processed, delivered, withReviews, variantHitRate, chargedUsd, trigger).

Limits, honestly

  • The top-review block only: no pagination, no filtering, no sorting. This is Amazon's anonymous ceiling, not a throttled tier: up to 8 US reviews plus up to 5 that Amazon labels as from other countries, and fewer than that only when the product has fewer reviews.
  • amazon.com only. Other storefronts are rejected up front.
  • US catalogue only. Prices, availability and reviews are amazon.com's.
  • No account support, ever. There is no input for cookies, sessions or credentials, and one will not be added.
  • Every wall is retried, and retries are free. Only a 404 ends a product on the first request; anything Amazon serves instead of a product page is tried again on a fresh proxy session, up to four attempts. A product that is still walled after that is delivered as a free blocked row.
  • Requests leave through Apify's datacenter proxy by default. Datacenter transfer is not metered on our plan, so it measured roughly 3× cheaper per delivered product than a residential exit ($0.0010 vs $0.0033 on the same 50-ASIN batch). In that paired test the residential arm also hit Amazon's automated-access wall on 2 of its first 4 products and tripped the zero-delivery fuse, while the datacenter arm delivered 32 of 37. One paired run is not a verdict on wall rates — but it gave us no reason to pay 8× per GB for the other exit. Either way: expect a minority of products to come back blocked on any given run. Those rows are free, and re-running just them usually works.
  • The run window, not memory, is the ceiling. The Actor caps its own working budget inside the platform timeout; products it cannot reach in time are listed in skippedBy.deadline with partial: true, and nothing undelivered is billed. Each product costs one fetch plus up to maxVariantRetries extra draws, so review mode with a high retry setting is what eats the window. Split very large jobs across runs. Entries that cannot be read as an ASIN, product URL or image URL are listed in RUN_SUMMARY.invalidInputs with a reason each and are not charged — and they do not set partial, because re-submitting them gets the same verdict. partial means the Actor stopped short (budget, deadline, fuse or maxItems), not that the input list had a typo in it.
  • A walled exit stops the run early, and the threshold scales with your batch. After max(2, 10% of the batch) consecutive products come back walled or unreachable the run stops rather than spending your budget on requests Amazon will not answer: 2 for batches up to 20, 5 for 50, 10 at the 100 default. Everything it never got to is listed in skippedBy.fuse, uncharged, and humanReadableReason says how many. Walls are an exit-IP state, not a verdict on those ASINs — re-run the tail in a smaller batch, or later.
  • Runs need 1024 MB. A 37-product batch peaked at 862 MB, so 512 MB is offered nowhere: the default is 2048 MB and the floor is 1024 MB. Compute is deducted from our payout, not added to your bill.
  • A killed run still leaves an account. Once anything has been charged, RUN_SUMMARY is refreshed every 10 seconds from the loop and again on SIGTERM/SIGINT, so an abort, a hard timeout or an out-of-memory kill leaves a readable ledger behind rather than only the platform's charge counter. Such a copy carries partial: true and a persistReason naming which path wrote it, and its numbers are a lower bound — the platform's own counter is authoritative for what you were charged.
  • A tight budget downgrades a product instead of dropping it. When the room left in maxTotalChargeUsd will not cover a snapshot, that product is fetched as ratings-only: the row says mode: "ratings", is billed at the ratings price, and RUN_SUMMARY.notes counts how many products were downgraded. Note that Apify's own maxTotalChargeUsd floor is $0.04, which buys five ratings rows or two snapshots — below that the run delivers nothing at all.
  • Amazon changes its front end. When it does, the affected field comes back null and the field name is listed in RUN_SUMMARY.notes as PARSE_ERRORS — the rest of the row still delivers. Report it and the anchor gets fixed.

Troubleshooting

SymptomWhat it means
reviewsCoverage: "none" on many productsRaise maxVariantRetries, or accept the ratings-only price — you were billed $0.008, not $0.02.
fetchStatus: "blocked", any blockReason except not_foundAmazon walled all four attempts at that product, each through a fresh proxy session. These walls are transient — the same ASIN typically delivers minutes later — so re-run just those ASINs. Not charged.
blockReason: "not_found"HTTP 404: the ASIN is dead or withdrawn. Retrying will not help. Not charged.
zeroDeliveryFuse: trueRUN_SUMMARY.fuseLimit consecutive products came back walled or unreachable (2 on a small batch, 10% of a large one), so the run stopped instead of burning your budget. Nothing after the fuse was attempted or charged; the count is in skippedBy.fuse. A notFound does not count toward this: a 404 is Amazon answering normally about a dead ASIN, so a list that starts with dead products still runs through to the live ones behind them.
trigger: "budget"maxTotalChargeUsd was reached. Raise it or lower maxItems. At the $0.04 platform minimum the Actor delivers ratings-only rows rather than nothing.
freeReason: "no_rating_data"The product page had a title and a product face but no rating average, no rating count and no histogram — usually a brand-new, withdrawn or never-rated ASIN. The row is delivered and not charged.
Empty run, errorCode: "VALIDATION_ERROR"No input could be read as an ASIN — see RUN_SUMMARY.invalidInputs. Zero charges.

Support

Issues and questions through the Actor's page. If a field comes back null on a product where Amazon clearly shows it, open an issue with the ASIN — that is a markup change and it gets fixed.