Amazon Reviews Scraper API avatar

Amazon Reviews Scraper API

Pricing

from $10.00 / 1,000 products

Go to Apify Store
Amazon Reviews Scraper API

Amazon Reviews Scraper API

Scrape Amazon product reviews with correct ratings, publish dates and verified-purchase status, plus Amazon's own aspect sentiment. Priced per product, not per review.

Pricing

from $10.00 / 1,000 products

Rating

0.0

(0)

Developer

Shakamize

Shakamize

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Categories

Share

Extracts Amazon customer reviews with the fields other scrapers get wrong: the rating the reviewer actually gave, the day the review was published, whether it was a verified purchase, which product variant it was written against, and how many people found it helpful.

Alongside the reviews it returns Amazon's own analysis of all of a product's reviews, which no other Amazon reviews scraper returns: the star histogram, the "Customers say" summary, and a per-aspect sentiment breakdown with mention counts, a positive and negative split, and quoted evidence.

Priced per product, not per review, so a run's cost is arithmetic you can do before you start it.

How many Amazon reviews you can actually scrape, and why it is not 500

Read this before you compare us to anything else on the store.

Since late 2025, Amazon has required a signed-in account to see a product's full review list. Every route that used to serve filtered, sorted or paginated reviews now answers a signed-out client with a sign-in page:

RouteWhat a signed-out client gets
/product-reviews/<ASIN>sign-in page
/portal/customer-reviews/<ASIN>sign-in page
/gp/aw/cr/<ASIN>sign-in page
/hz/reviews-render/ajax/reviews/get/HTTP 403
?filterByStar=, ?sortBy=, ?pageNumber= on a product pageignored

Measured on 2026-08-28 from a plain browser and through residential proxies in several countries, including amazon.co.jp.

What is left is the review block on the product page itself. Measured across products in unrelated categories, that block is 8 to 20 full reviews for a product with meaningful review volume, and fewer for a product with only a handful of ratings. It is deterministic - the same reviews on every request - and shared across a product's variants, so fetching a variant does not add any. There is no page two.

So: no scraper without an Amazon login can return 500 reviews for a product, and one that promises to cannot deliver it. The incumbents' own issue trackers record when this landed on them, in their users' words:

  • 2025-11-20: "now it can only crawl 8 reviews for any product"
  • 2026-03-03: "Amazon reviews scraper is now only returning 8 reviews, previously it returned 100"
  • 2026-03-07: "Actor returns only 8 reviews despite maxReviews=500"

We chose to say this on the listing rather than let you discover it after paying, and to make the most of what is reachable instead.

Scraping more Amazon reviews than the product page shows

Amazon's review-insights widget quotes reviews as evidence for each aspect, and links each quote to its review. Those reviews are mostly not in the rendered block, so the excerpts are the only text from them a signed-out client can reach. Measured over six products in unrelated categories:

Per productReviews reached
Full reviews on the page13
Aspect-linked excerpts beyond it~31
Distinct reviews reached~44

Excerpts are returned as excerpts, on the aspect they belong to, never mixed in with full reviews.

Amazon review data you get back: ratings, dates and verified purchase

Two kinds of record.

One record per Amazon review

{
"reviewId": "R1RLJMX8S5STRH",
"url": "https://www.amazon.com/portal/customer-reviews/srp/-/R1RLJMX8S5STRH",
"asin": "B088NMR44C",
"productAsin": "B088NRLMPV",
"productTitle": "Anker USB C to USB C Cable, 60W Fast Charging Cable (2-Pack, 6 ft, Black)",
"ratingScore": 5,
"title": "Reliable cable with fast charging and excellent durability",
"text": "I've bought several Anker cables over the years, and this one lives up to the brand's reputation...",
"date": "2026-07-29",
"dateText": "Reviewed in the United States on July 29, 2026",
"country": "US",
"isVerifiedPurchase": true,
"isVineVoice": false,
"helpfulVotes": 6,
"variantAttributes": [
{ "key": "Size", "value": "3.3FT*2" },
{ "key": "Color", "value": "Black" },
{ "key": "Number of Items", "value": "2" }
],
"imageUrls": [],
"reviewer": null,
"language": "en-US",
"countryCode": "US"
}

Star histogram, "Customers say" and Amazon aspect sentiment

One summary record per product, carrying what Amazon computed over every review the product has:

{
"type": "productSummary",
"asin": "B088NRLMPV",
"productTitle": "Anker USB C to USB C Cable, 60W Fast Charging Cable (2-Pack, 6 ft, Black)",
"brand": "Anker",
"ratingScore": 4.7,
"ratingsCount": 87397,
"reviewsReturned": 13,
"starsBreakdown": { "5star": 0.87, "4star": 0.08, "3star": 0.02, "2star": 0.01, "1star": 0.02 },
"customersSay": "Customers find the USB C cable to be well-made and functional, with good length and flexibility...",
"aspects": [
{
"aspect": "Quality",
"sentiment": "positive",
"mentions": 5692,
"positive": 5126,
"negative": 566,
"summary": "Customers find the cable to be of good quality and well-made.",
"quotes": [
{
"reviewId": "R193O3CSMLKQLB",
"text": "Good quality. I use these for charging my phone at home, off a computer, in the car."
}
]
}
]
}

Tell them apart by the type field: review records do not have one.

Correctness: review ratings, publish dates and variant attribution

Each of these is a defect reported against an actor currently on the store.

ratingScore is the rating the reviewer gave. It is read from the rating's own text, not from the CSS class, which is rounded to whole stars.

Every review is dated. date is an ISO day and dateText keeps Amazon's own wording beside it. Dates are parsed from the marketplace language, so Bewertet in Deutschland am 24. Juni 2026 becomes 2026-06-24. Amazon publishes day resolution and never a time, so neither do we.

A review is attributed to the variant it was written for. On a parent listing, two thirds of reviews are written against a specific variant, and asin says which while productAsin says which page it came from. Reporting the page's ASIN for all of them is how the same review ends up filed under several products.

Reviews from other Amazon storefronts are labelled. Amazon mixes them into the same list without a heading; on amazon.com about a third of the block is from elsewhere. country says where each one was written.

Helpful votes are never silently lost. Amazon writes the singular without a digit, "One person found this helpful", which a number parser reads as nothing. That is one vote, not no evidence.

The review body is the review. Amazon wraps it in screen-reader text ("Brief content visible, double tap to read full content") that a naive read glues onto every review.

The star histogram is null rather than five zeros when Amazon has too few ratings to break one down, because five zeros claims a measurement nobody made.

How to filter Amazon reviews by star rating, date and verified purchase

InputWhat it does
productUrlsProduct URLs or bare ASINs. Several per run, and every one is scraped.
maxReviewsPerProductCap reviews kept per product. Empty means everything Amazon publishes.
filterByRatingsKeep only these star ratings.
verifiedPurchaseOnlyKeep only badged verified purchases.
reviewsCutoffDate2026-01-15, or 30 days / 6 months / 1 year.
sortAmazon's own top-reviews order, most recent, or by rating.
includeAspectSentimentAmazon's aspect breakdown. On by default.
includeReviewerProfileReviewer name and profile id. Off by default; see Legal.
countryCodeWhich of 23 Amazon storefronts to read.
languageAsk Amazon for the page in a given language.
proxyConfigurationResidential is effectively required.

Filtering and sorting run over the reviews Amazon publishes. They do not fetch more, because there is no more to fetch. A star filter here narrows a block of about a dozen; it does not reach Amazon's own one-star page, which is behind the sign-in described above. Actors that imply otherwise carry issues titled "Filter by stars doesnt work" and "Start date and end date not working".

A review whose date could not be parsed is kept by a date filter rather than dropped, so a parsing failure never quietly narrows your results.

Pricing: pay per product, not per Amazon review

One event: $0.012 per product. Everything that product yields is included - its reviews, the rating breakdown, the aspect sentiment and the quoted evidence.

A run costs products x $0.012, and you can work that out before starting it. Charging per review, as the rest of this niche does, quotes a price against a count nobody can predict; at $3.00 per 1,000 reviews and roughly a dozen reviews per product, the same product costs about $0.03 elsewhere, plus a minimum permitted charge of $0.50 per run.

A product with no reviews still costs $0.012, because the page was still fetched, and you get an honest no_reviews_found record rather than silence.

A product Amazon serves without its review block is different, and is not charged. A listing reporting thousands of ratings always renders reviews, so a page that arrives with none is an incomplete page rather than an answer: it is retried on fresh sessions, and if it keeps coming back that way you get an error record saying so and pay nothing for it.

Supported Amazon marketplaces, 23 storefronts

amazon.com, .ca, .com.mx, .com.br, .co.uk, .ie, .de, .fr, .it, .es, .nl, .com.be, .se, .pl, .com.tr, .ae, .sa, .eg, .in, .co.jp, .sg, .com.au, .co.za.

Review dates, helpful-vote counts and aspect mention counts are parsed in the marketplace's own language and number format, so a German run reads 1.234 Personen as 1,234 rather than as 1.234.

Proxies for scraping Amazon reviews without being blocked

Amazon serves an anti-bot interstitial to unproxied clients, so Apify Proxy with the RESIDENTIAL group is the default and is effectively required. The exit country defaults to the marketplace's own country.

Errors: products with no reviews, 404s and blocked pages

Failures are pushed to the dataset rather than swallowed, so a partial run can be reconciled against what you asked for. Error records carry an error field; normal records never do.

{
"error": "no_reviews_found",
"errorDescription": "Amazon renders no reviews on this product page.",
"input": "https://www.amazon.com/dp/B0XXXXXXXX",
"url": "https://www.amazon.com/dp/B0XXXXXXXX"
}
errorMeaning
product_not_foundThe product URL returns a 404 page.
no_reviews_foundThe product exists and Amazon publishes no reviews for it, or none matched your filters. Also used when Amazon served the page without its review block despite the product having ratings, in which case the run is not charged for it.
request_failedThe page could not be fetched after retries.
blockedAmazon served an anti-bot page.
invalid_urlA start URL was not an Amazon URL or ASIN.

Product ratings, review text and helpful-vote counts are publicly available data. A reviewer's name and profile id are personal data, protected by GDPR in the EU and by comparable rules elsewhere. They are off by default; enable includeReviewerProfile only if you have a legitimate reason to hold them.

Amazon's terms prohibit automated access. Use this where you are entitled to.

Telemetry

The actor reports run health to its maintainer: error codes, the build number, the marketplace domain, and per-field counts of how often a value was found.

When requests fail, it also sends a small, capped sample of the failures themselves, so that a broken run can be diagnosed and fixed: the Amazon URL that was requested, the HTTP status code that came back, and the error with its stack trace. That URL is the page you asked for, query string included. It is not personal data, but it is your input, and this section says so rather than leave you to find out.

Your other input settings, your proxy configuration, and the scraped content itself are never sent. Nothing at all is sent when a run is healthy.