kestrel actors docs

kestrel actors › Ecommerce

Amazon Reviews Scraper — Customer Reviews & Ratings

An amazon reviews scraper that returns amazon customer reviews and amazon product reviews for any product, in any marketplace, as structured rows: star rating, review body, reviewer, the country the review came from, date, Verified Purchase flag, helpful votes and the variation bought — plus a product row carrying amazon ratings and the total rating count.

Run Amazon Reviews Scraper on Apify →

Amazon reviews scraper pricing: what one row costs

EventWhat it isPriceCharged for
reviewReview row$0.005One customer review: star rating, body, reviewer, country, date, verified-purchase flag and helpful votes. Products with no visible reviews are free.
productProduct row$0.003One product's rating summary: title, brand, overall rating, total rating count, availability, image and feature bullets.

Pay per event: one per delivered review row and one per product row. Free: status rows, every review removed by a filter, products with no visible reviews, and failed products. An ASIN and its URL are one product, fetched and billed once per run.

Verified runs behind this listing cost $0.0002–$0.0024 each in platform compute. Exact per-row pricing is on this page's pricing tab.

Amazon reviews scraper input reference

Every field of Amazon Reviews, straight from the actor's input schema.

FieldTypeDefaultWhat it does
asinsarray[]Amazon ASINs (B0BSHF7WHW) or product URLs from any marketplace (https://www.amazon.co.uk/dp/B09G9FPHY6). A URL's marketplace is used automatically; bare ASINs use the marketplace below.
domainstring"com"Amazon marketplace for bare ASINs: com, co.uk, de, fr, it, es, ca, com.au, co.jp, in, com.mx, com.br, nl, se, pl, sa, ae, sg, com.tr, com.be.
minRatinginteger00 = keep every review. 1-5 = keep only reviews at or below that star rating, so a complaints feed costs nothing for the happy ones. Filtered reviews are never charged. Range 0-5.
verifiedOnlybooleanfalseKeep only reviews Amazon marks as a Verified Purchase.
requireTextbooleanfalseDrop rating-only reviews that have no written body.
maxReviewsPerProductinteger00 = every review visible on the product page. Amazon publishes at most 13 per product without a signed-in session (fewer outside amazon.com), so that is the ceiling here. N = the first N. Range 0-13.
includeProductRowbooleantrueEmit one row per product with its title, brand, overall rating, total rating count, availability, image and feature bullets.
sessionsinteger4How many proxy sessions (egress IPs) run in parallel. More is faster; each is paced separately. Range 1-16.
perIpnumber0.5Pace for each session. Amazon tolerates about 0.5/s per IP; faster causes captchas, not speed. Range 0.1-2.
proxyConfigurationobject{"useApifyProxy": true}Apify Proxy is required: Amazon captchas datacentre traffic that is not rotated. RESIDENTIAL works best.

Example input

{ "asins": ["B0BSHF7WHW", "B09B8V1LZ3"], "minRating": 2, "requireText": true, "verifiedOnly": true }
{ "asins": ["B0BSHF7WHW", "https://www.amazon.co.uk/dp/B09G9FPHY6"], "maxReviewsPerProduct": 0 }

Amazon reviews scraper output fields

Three row types share one dataset: review (one customer review, charged), product (the product's rating summary, charged) and status (per product, free).

Dataset views in the Apify Console: Overview, Reviews, Products, Run status.

FieldTypeWhat it holds
typestringRow type: review, product or status.
asinstringAmazon's product id.
domainstringMarketplace domain suffix, e.g. com, co.uk, de.
marketplacestringMarketplace country name.
urlstringProduct URL on product rows; the review's permalink on review rows.
titlestringProduct title on product rows; the review headline on review rows.
product_titlestringReview rows: the product the review belongs to.
brandstringProduct rows: brand or 'Visit the … Store' byline.
pricenumberProduct rows: price when Amazon serves one. Often null — Amazon withholds price markup from unauthenticated clients.
price_displaystringProduct rows: the price exactly as printed, when present.
currencystringCurrency of the marketplace.
ratingnumberOverall star rating on product rows; the reviewer's stars on review rows (1-5).
ratings_countintegerProduct rows: how many ratings the product has in total.
reviews_visibleintegerProduct rows: how many reviews were visible on the page.
availabilitystringProduct rows: stock message.
imagestringProduct rows: main image URL.
featuresarrayProduct rows: the bullet feature list.
review_idstringAmazon's id for the review.
textstringThe review body as written.
authorstringReviewer's display name.
countrystringCountry the review was written in — Amazon mixes international reviews in.
date_textstringReview date as Amazon prints it.
verifiedbooleanWhether Amazon marks it a Verified Purchase.
helpful_votesintegerHow many people found the review helpful.
variantstringThe product variation the reviewer bought, when shown.
statusstringStatus rows: ok, no_reviews or error.
targetstringStatus rows: the ASIN or URL this job was given.
reviewsintegerStatus rows: review rows delivered.
filteredintegerStatus rows: reviews dropped by the filters, never charged.
duplicatesintegerStatus rows: 1 when another input already covered this product.
errorstringStatus rows: why the product failed, null when it did not.
fetched_atstringUTC timestamp when the row was fetched.

Example row from a real run

Taken from the actor's README — this is the shape your dataset holds.

{
  "type": "review", "asin": "B0BSHF7WHW", "domain": "com", "marketplace": "US",
  "product_title": "Apple 2023 MacBook Pro Laptop", "review_id": "RCA7TI5EBH5VK",
  "rating": 5.0, "title": null,
  "text": "I upgraded from the i9 Intel MacBook Pro from 2019, and this laptop seriously blows that away.",
  "author": "Michael M", "country": "the United States", "date_text": "July 22, 2023",
  "verified": true, "helpful_votes": 65, "variant": null,
  "url": "https://www.amazon.com/gp/customer-reviews/RCA7TI5EBH5VK"
}
{
  "type": "product", "asin": "B0BSHF7WHW", "domain": "com", "marketplace": "US",
  "title": "Apple 2023 MacBook Pro Laptop", "brand": null,
  "rating": 4.7, "ratings_count": 387, "reviews_visible": 13,
  "price": null, "price_display": null, "currency": "USD",
  "availability": null, "image": "https://m.media-amazon.com/images/I/example.jpg",
  "features": ["Apple M2 Pro chip"], "url": "https://www.amazon.com/dp/B0BSHF7WHW?th=1&psc=1"
}

Amazon reviews scraper in Python, JavaScript and curl

Python

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kestrel/amazon-reviews-scraper").call(run_input={
    "asins": ["B0BSHF7WHW"], "minRating": 2, "verifiedOnly": True, "requireText": True,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["type"] == "review":
        print(row["rating"], row["country"], row["text"][:80])

JavaScript (Node)

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('kestrel/amazon-reviews-scraper').call({
    asins: ['B0BSHF7WHW', 'https://www.amazon.co.uk/dp/B09G9FPHY6'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.type === 'product').map((p) => [p.marketplace, p.rating, p.ratings_count]));

curl

curl -X POST "https://api.apify.com/v2/acts/kestrel~amazon-reviews-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H 'Content-Type: application/json' \
  -d '{"asins":["B0BSHF7WHW"],"minRating":2}'

The same three calls are runnable files in the examples repository: examples/amazon-reviews-scraper.py|.js|.sh.

Limits and honest notes

Scope — read this before you buy

This reads the reviews Amazon publishes on the public product page, which is roughly 8–13 reviews per product, ordered by Amazon's own mix of recent and most-helpful. Amazon requires a signed-in session for its full review archive, and this actor deliberately does not attempt that — no account sharing, no cookie injection, no session resale. If you need every review a product has ever had, this is not the tool, and no honest listing should tell you otherwise.

What you do get for every ASIN is the complete rating summary (rating, ratings_count) plus that visible sample, which is enough for rating trends, complaint detection and competitor tracking across a large catalogue.

Likewise, price is best-effort. Amazon frequently withholds price markup from unauthenticated clients — on a 1.8 MB product page in testing there was no price element at all. When Amazon serves one, you get it; treat the field as a bonus, not a price-tracking feature. If you want prices and rank, use the companion Amazon Search & Best Sellers actor, which reads them from result pages where Amazon does render them.

  • 8–13 reviews per product, as covered in Scope. reviews_visible on the product row tells you exactly how many were on the page.
  • title is often null. The compact review blocks Amazon renders on product pages frequently omit a headline; the body is always there.
  • Amazon serves a captcha to repeat callers. The run detects it and rotates to a fresh IP rather than parsing the captcha page as an empty product.
  • Cheap proxies first, residential only when Amazon pushes back. A run starts on the proxies you chose — datacentre is the cheapest — and rotates to a fresh IP on a captcha or a 503. When the same page is refused twice in a row that is the IP range being blocked, not the page, so the run stops trusting that pool: its sessions re-open on a residential proxy and stay there for the rest of the run. Nothing to configure, no run has to fail to teach it, and a run that is never refused never leaves the cheap pool — so a run costs the least that still succeeds. The run's SUMMARY reports it as http.escalated.
  • country is where the review was written, not where the reviewer lives — Amazon phrases it "Reviewed in …".
  • Rating is a float 1–5. Amazon renders "5.0 out of 5 stars"; the row carries 5.0.
  • brand and availability are frequently null on pages where Amazon does not render them.

FAQ

Does it need an Amazon API key or login?

No. There is no public amazon review api for product reviews, and Amazon's Product Advertising API requires an affiliate account with sales requirements and does not return review text. This uses neither — it reads the public product page.

Can I download Amazon reviews as CSV or Excel?

Yes. Every run writes an Apify dataset, exportable to CSV, Excel, JSON or XML from the Console or over the API with ?format=csv. That is the quick path to download amazon reviews for an ASIN list.

How do I get only Amazon negative reviews?

Set minRating to your ceiling (2 for one- and two-star) and add requireText: true so you only pay for reviews with actual words. verifiedOnly: true strips unverified noise. Everything above the ceiling is dropped before billing.

How many reviews will I get per product?

Roughly 8–13 — the set Amazon shows publicly. This is a real limit, not a setting, and it is the honest answer that some listings in this category avoid giving. reviews_visible on each product row reports the exact number.

Can I scrape Amazon reviews by ASIN in bulk?

Yes. Put as many ASINs in asins as you like; each is fetched once and billed once. Bulk amazon reviews are billed per delivered row, so cost scales with data rather than time, and the filters cut it directly.

Which marketplaces are supported?

Twenty, listed in the input section. A product URL selects its own marketplace automatically; bare ASINs use domain. The same ASIN in two marketplaces is treated as two products because the reviews and ratings genuinely differ.

Does it return prices?

Best-effort only — see Scope. Amazon commonly withholds price markup from unauthenticated clients. For prices and keyword rank, use the companion Amazon Search & Best Sellers actor.

Can I get the star-rating breakdown?

The product row carries rating and ratings_count for every ASIN. The 5/4/3/2/1 percentage split is included when Amazon renders it on the page, which is not always.

Can I scrape Amazon reviews without an API?

That is what this is — amazon reviews without api access, no key to apply for and no affiliate account. You call an Apify actor and read rows back.

Is there a free tier?

Products with no visible reviews, filtered reviews, status rows and failed products are always free, so a run that finds nothing costs nothing beyond a fraction of a cent of platform compute. Apify's free plan includes monthly credit you can spend here.

How to use Amazon Reviews Scraper

Ready-made runs you can open and start

Each one is a saved input on the Apify Store — open it, press Start, and it runs with the fields already filled in. All 163 across the suite.

Ready-made runWhat it does
Amazon Negative Reviews by ASIN (1-3 Stars)Keep only reviews at three stars or below, with a written body: the complaint file for two ASINs, with the happy ones filtered before billing.
Verified Purchase Reviews Only (Amazon)Drop everything Amazon has not marked as a Verified Purchase, so the sample is people who actually bought the product on that marketplace.
Amazon Reviews by Marketplace: UK, DE, FRThe same product on three marketplaces in one run: paste full product URLs and each one is scraped on its own domain, in its own language.
Voice of Customer Across 25 Amazon ASINsTwenty-five ASINs across electronics, kitchen and beauty in a single run: a voice-of-customer corpus wide enough to compare categories.
Amazon Product Reviews at One Star OnlyminRating 1 keeps nothing but one-star reviews - the defect and returns signal, separated from the general grumbling at two and three stars.
Amazon Customer Reviews on amazon.deGerman ASINs scraped on amazon.de: reviews in German with the German verified-purchase label and the German ratings count on the product row.
Amazon Ratings and Reviews on amazon.co.jpJapanese ASINs on amazon.co.jp: reviews in Japanese with the local rating and ratings count, which differ from the same product on .com.
Review Monitoring for Your Own ASINsFive newest reviews for each of six ASINs, cheap enough to run every morning: a seller-side alert feed rather than a research pull.
Amazon Reviews Without API ApprovalAmazon's Product Advertising API needs an affiliate account and returns no review text. This is the one-ASIN replacement: paste it and run.
Amazon Product Rating Data by ASINThe products view is a rating table: ASIN, brand, star rating, total ratings count, reviews visible and availability, one row per product.
Scrape Amazon Reviews on amazon.co.ukEight UK best-seller ASINs on amazon.co.uk: British reviewers, British spelling and a ratings count that is not the American one.

Run Amazon Reviews Scraper

The actor lives on the Apify Store, where the pricing tab carries the live per-row price and the input form has every field above: apify.com/kestrel/amazon-reviews-scraper