Amazon Product Reviews Scraper API - ASIN & Ratings avatar

Amazon Product Reviews Scraper API - ASIN & Ratings

Pricing

from $3.00 / 1,000 reviews

Go to Apify Store
Amazon Product Reviews Scraper API - ASIN & Ratings

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

Blackcube Agency AB

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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:

MetricResult
Unique reviews per product, mean22.2
Median20
Best product in the set37
Worst product in the set8
Pages blocked by Amazon0 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:

FieldCoverage
reviewId, rating, title, body100%
reviewedAt (ISO date) + reviewedAtRaw100%
reviewUrl, productUrl, asin, marketplace, countryCode100%
verifiedPurchase98.0%
helpfulVotes53.7%
variant (colour / size / configuration reviewed)47.1%
images (full-resolution, not thumbnails)20.1%
authorName, authorId, authorProfileUrl100% — off by default, see GDPR below
vineVoicepresent 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 ApifyClient
client = 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:

reasonMeaning
not-listed-in-marketplaceAmazon has no listing for this ASIN on that marketplace
no-reviews-publishedThe listing exists but Amazon publishes no reviews on it
blocked-by-amazonAmazon served a wall on every attempt. Not charged
reviews-section-missingThe 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-inputThe value could not be read as an ASIN or Amazon URL
fetch-failedNetwork or server error that survived every retry
skipped-run-limit-reachedThe 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-marketplace rows 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.