Amazon Product Reviews Scraper API - ASIN & Ratings
Pricing
from $3.00 / 1,000 reviews
Amazon Product Reviews Scraper API - ASIN & Ratings
Scrape Amazon product reviews by ASIN or URL as JSON or CSV: rating, title, text, date, verified purchase, helpful votes and images. Free star histogram per product. Checks 24 Amazon marketplaces, which each publish different reviews, and deduplicates. No start fee, failures are free.
Pricing
from $3.00 / 1,000 reviews
Rating
0.0
(0)
Developer
Blackcube Agency AB
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Amazon Product Reviews Scraper API — reviews and ratings by ASIN
You are charged per review returned. There is no start fee, and a run that returns no reviews costs you nothing.
Give it an ASIN or an Amazon URL and get back every review Amazon publishes for that product — rating, title, full text, date, verified-purchase badge, helpful votes, product variant and review images — as JSON, CSV or Excel. Every product also gets a free summary row with its average rating, total rating count and the complete 1–5 star histogram.
Unofficial tool. Not affiliated with, endorsed by, or connected to Amazon.com, Inc.
Read this first: how many reviews you actually get
Most tools in this category quietly promise hundreds of reviews per product and return a handful. Here is the honest number.
Amazon publishes only a limited set of reviews on a product's public page — typically 8 to 13. That is the ceiling for every public tool, including this one, and any listing claiming to return "all 2,000 reviews" for an ASIN is describing something that no longer exists.
What this Actor does about it: Amazon publishes a different set of reviews on each of its marketplaces, so it checks the marketplaces you select and merges the results, removing duplicates by review ID.
Measured on a 12-product, 8-marketplace benchmark run on 2026-08-17:
| Metric | Result |
|---|---|
| Unique reviews per product, mean | 22.2 |
| Median | 20 |
| Best product in the set | 37 |
| Worst product in the set | 8 |
| Pages blocked by Amazon | 0 of 96 |
The marketplaces really are additive, not repeats. Across every pair of marketplaces in that run — 44 pairs over 11 products — the overlap was zero shared reviews. Adding a marketplace that lists your product has never once returned a review another marketplace already gave us.
You control this directly. Leave Marketplaces on its default and you get one page per product. Add marketplaces and you add genuinely new reviews.
What you get for every review
Measured field coverage on the same 244-review benchmark:
| Field | Coverage |
|---|---|
reviewId, rating, title, body | 100% |
reviewedAt (ISO date) + reviewedAtRaw | 100% |
reviewUrl, productUrl, asin, marketplace, countryCode | 100% |
verifiedPurchase | 98.0% |
helpfulVotes | 53.7% |
variant (colour / size / configuration reviewed) | 47.1% |
images (full-resolution, not thumbnails) | 20.1% |
authorName, authorId, authorProfileUrl | 100% — off by default, see GDPR below |
vineVoice | present on every row, but 0 of 244 benchmark reviews were Vine — treat as unproven, not as "no Vine reviews exist" |
reviewedAt is a real ISO date on every marketplace, including the ones Amazon writes in German, Italian, Spanish, French and Portuguese. When a date genuinely cannot be read it is returned as null and the original text is kept in reviewedAtRaw — a guessed date would silently corrupt your date filter, so this Actor never guesses one.
The star histogram — sentiment over every rating, not a sample of 8
Every product returns a free product row:
{"rowType": "product","asin": "B07PXGQC1Q","marketplace": "amazon.com","countryCode": "US","averageRating": 4.7,"totalRatings": 635244,"ratingHistogram": { "fiveStar": 87, "fourStar": 8, "threeStar": 3, "twoStar": 0, "oneStar": 2 },"estimatedRatingCounts": { "fiveStar": 552662, "fourStar": 50820, "threeStar": 19057, "twoStar": 0, "oneStar": 12705 },"positiveSharePct": 95,"negativeSharePct": 2,"histogramAverage": 4.78,"reviewsReturned": 8,"duplicatesSuppressed": 0}
Amazon publishes the percentages and the grand total but never the count at each star level, so
estimatedRatingCounts works it out — percentage × total, normalised against the real percentage
sum, because Amazon's five buckets round and rarely add to exactly 100. They are labelled
estimated because they are: close, not exact. Every derived field is null rather than zero
when the underlying data is missing.
That histogram is the distribution across all 635,244 ratings, not across the 8 reviews you can read. For sentiment work it is strictly better input than a truncated sample of review text, and it is present on 89% of product rows with the average and total on 96%. No other Actor in this category returns it.
It is also per marketplace, so you can compare how the same product is received in the US, Germany and Japan — with the rating counts to weight it.
How to scrape Amazon reviews by ASIN
Paste ASINs, one per line:
{"products": ["B07PXGQC1Q", "B09B8V1LZ3", "B0CWXNS552"]}
A bare ASIN defaults to amazon.com. That is the whole setup — no login, no cookies, no API key.
How to scrape Amazon reviews from a product URL
Paste the URL straight from your browser. Any Amazon product URL works, including the long ones with a slug and tracking parameters:
{"products": ["https://www.amazon.co.uk/dp/B08H93ZRK9","https://www.amazon.com/Sceptre-E248W-19203R-Monitor-Speakers/dp/B0773ZY26F/ref=sr_1_3"]}
If your URL is a marketplace URL, that marketplace is used. A link you paste from amazon.co.uk is never silently scraped on amazon.com.
How to get more reviews per product across Amazon marketplaces
Select the marketplaces you want. All 24 Amazon retail marketplaces are supported: amazon.com, .co.uk, .de, .fr, .it, .es, .ca, .co.jp, .in, .com.au, .com.br, .com.mx, .nl, .se, .pl, .sa, .ae, .sg, .com.tr, .eg, .com.be, .ie, .cl, .co.za.
{"products": ["B07PXGQC1Q"],"marketplaces": ["amazon.com", "amazon.ca", "amazon.co.uk", "amazon.de", "amazon.com.au"]}
Duplicates are removed automatically and you are never charged twice for the same review, no matter how many marketplaces return it. A product that is not sold in a marketplace gets a free not-listed-in-marketplace row instead of silently vanishing from your results.
How to filter Amazon reviews by star rating, date or verified purchase
{"products": ["B07PXGQC1Q"],"filterByStars": ["1", "2"],"onlyVerifiedPurchases": true,"reviewsNewerThan": "90 days"}
reviewsNewerThan takes a date (2026-01-15) or a period (30 days, 6 months, 1 year).
Every filter is free. Reviews removed by a filter are never charged, so pulling only the 1-star reviews costs you only the 1-star reviews. If a filter removes everything for a product you get a row saying exactly that, rather than an empty result you have to guess about.
How to monitor new Amazon reviews on a schedule
Turn on Charge once per review, ever and run the Actor on an Apify schedule:
{"products": ["B07PXGQC1Q", "B09B8V1LZ3"],"onlyChargeNewReviews": true}
Every run returns the full current review set so your data stays complete, but reviews you already paid for come back free and flagged alreadyPaidForInPreviousRun: true. Poll daily if you like — you pay once per review, ever, not once per run.
This is the setting that makes review monitoring affordable, and it is off by default so your first run behaves exactly as you expect.
How to export Amazon reviews to CSV, JSON or Excel
Every run's dataset exports from the Apify UI or the API in JSON, CSV, Excel, XML or HTML. Two prepared views are included: Reviews, and Product ratings and histograms.
How to call the Amazon Reviews Scraper API from Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("vonsensey/amazon-reviews-scraper-api").call(run_input={"products": ["B07PXGQC1Q"],"marketplaces": ["amazon.com", "amazon.ca"],})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row["rowType"] == "review":print(row["rating"], row["reviewedAt"], row["title"])
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('vonsensey/amazon-reviews-scraper-api').call({products: ['B07PXGQC1Q'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();
What it costs
You are charged per review row returned. Nothing else is billable.
- No actor start fee. Three of the actors in this category charge one; this one does not.
- Failures are free. A blocked page, a product that is not listed, a product with no reviews, an input that is not a valid ASIN — all return an explanatory row and cost nothing.
- Product summary rows are free. The histogram, average and rating totals never cost anything.
- Filtered-out reviews are free. You pay for what you keep.
- Duplicates are free. The same review found on five marketplaces is charged once.
- With repeat-run billing on, previously-paid reviews are free forever.
Set Maximum reviews for a hard cap on a run's bill. It is exact.
Every input either returns reviews or tells you why not
There are no silent gaps. Any input that produces no reviews produces a notice row with a stable, machine-readable reason you can filter on:
reason | Meaning |
|---|---|
not-listed-in-marketplace | Amazon has no listing for this ASIN on that marketplace |
no-reviews-published | The listing exists but Amazon publishes no reviews on it |
blocked-by-amazon | Amazon served a wall on every attempt. Not charged |
reviews-section-missing | The page loaded but its reviews section never rendered, so nothing can be concluded about this product's reviews. Retried first, then reported rather than guessed. Not charged |
invalid-input | The value could not be read as an ASIN or Amazon URL |
fetch-failed | Network or server error that survived every retry |
skipped-run-limit-reached | The run hit your maxReviews cap before reaching this product |
Each run also writes a RUN_REPORT record with the counts — how many pages were fetched, how many had reviews, how many were blocked, how many reviews were charged.
Personal data and GDPR
Reviewer name, profile ID and profile URL are personal data. They are off by default and are only returned if you explicitly enable Include reviewer names and profile links. Everything else — rating, text, dates, badges, votes, images — is returned either way. Only enable it if you have a lawful basis for processing it.
This Actor collects only data Amazon publishes publicly to anyone with a browser. It does not log in, does not use anyone's account, and does not touch anything behind a sign-in wall.
Proxy
A proxy is required and enabled by default — Amazon serves a CAPTCHA to unproxied cloud IP addresses. The default configuration works; you do not need to buy a residential proxy add-on.
Limitations, stated plainly
- 8–13 reviews per product per marketplace is Amazon's public ceiling. This Actor cannot exceed it and neither can anything else that scrapes public pages.
- An ASIN is not global. The same product usually has a different ASIN in each marketplace, so requesting many marketplaces for one ASIN will produce
not-listed-in-marketplacerows for the ones where that exact ASIN is not sold. Those are free. - Review sort order is Amazon's, and Amazon no longer honours sort or star parameters on the public product page. Star, date and verified filters are therefore applied after fetching — which is also why they are free.
- Reviewer names are returned only with personal data enabled.
- Amazon changes its pages. If something breaks, open an issue — issues are answered.
Support
Open an issue on the Actor's Issues tab. Bugs that produce wrong or missing data are treated as the priority.
Unofficial tool. Not affiliated with, endorsed by, or connected to Amazon.com, Inc. "Amazon" is a trademark of Amazon.com, Inc., used here only to describe what this tool reads. This Actor collects publicly available data only.