Use Amazon Customer Review & Rating Summary Scraper with Python
Get Amazon customer reviews and a product-level rating summary by product URL, keyword, or category, with star-rating and sort filters, across 23 Amazon domains.
1. Choose the data you need
Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.
2. Prepare a source-based input
This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.
{
"categoryUrls": [],
"country": "amazon.com",
"extendedHistory": true,
"filterKeywords": [],
"includeAggregates": true,
"includeGdprSensitive": false,
"includeImages": true,
"keywords": [],
"maxProductsToDiscover": 5,
"maxReviews": 15,
"mediaReviewsOnly": false,
"mergeMarketplaces": [],
"productUrls": [
"https://www.amazon.com/dp/B09X7MPX8L"
],
"reviewsNewerThan": "",
"sortBy": "helpful",
"verifiedPurchasesOnly": false
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
productUrls | array | optional | Amazon product URLs (/dp/, /gp/product/, /gp/aw/d/, /product/) or bare 10-character ASINs, on any supported Amazon domain. Leave empty to discover products from `keywords`/`categoryUrls` instead. |
keywords | array | optional | Search terms used to discover products when `productUrls` is empty (e.g. "wireless earbuds"). Each keyword contributes up to `maxProductsToDiscover` products. |
categoryUrls | array | optional | Advanced discovery: Amazon `/s?...` search URLs or `/b?node=...` category URLs. Used only when `productUrls` is empty. |
maxProductsToDiscover | integer | optional | Maximum products discovered from each keyword or category URL (1-50). Ignored when `productUrls` is supplied. |
country | string | optional | Amazon storefront to use for bare ASINs, discovery, and products whose URL does not carry a domain. Product URLs keep their own domain. |
maxReviews | integer | optional | Hard cap per product after merging and deduplication (1-2000). The product-page sample alone yields about 8-13 rows; the optional extended feed can add 100-800+ for popular US products. In optional cookie mode this is the paginated cap. |
extendedHistory | boolean | optional | Merge Amazon's public extended review feed for each ASIN (no login): up to 100 rows per star/sort bucket, typically 100-800+ unique reviews for popular US products, deduplicated against the product-page sample. Coverage varies by ASIN and the feed carries Amazon.com reviews only. |
mergeMarketplaces | array | optional | Fetch the same product on these additional Amazon marketplaces and merge their deduplicated product-page reviews. Empty = the product's own marketplace only. |
sortBy | string | optional | Order of the returned reviews: most helpful first, or most recent first. |
filterByStar | string | optional | Keep only reviews with this rating. `positive` keeps 4-5 stars and `critical` keeps 1-2 stars. Applied after merging, so narrow filters can legitimately return few or no rows. |
verifiedPurchasesOnly | boolean | optional | Keep only reviews carrying Amazon's Verified Purchase badge. Applied server-side in the extended feed (and cookie mode) and client-side for product-page rows. |
filterKeywords | array | optional | Keep only reviews whose title or text contains at least one of these keywords (case-insensitive). Empty = no keyword filter. |
reviewsNewerThan | string | optional | Keep only reviews dated on or after this date (YYYY-MM-DD or any ISO date). Reviews whose localized date cannot be parsed are kept. Empty = no date filter. |
mediaReviewsOnly | boolean | optional | Keep only reviews that include at least one reviewer-uploaded image or video. |
includeImages | boolean | optional | Extract full-resolution image and video URLs uploaded by reviewers. |
includeAggregates | boolean | optional | Emit one `amazon_review_aggregate` record per product with product title, average rating, global ratings count, star histogram, derived per-star counts, and Amazon's "Customers say" summary with aspects. The histogram is filled from the rating-summary popover when the page omits it. |
includeGdprSensitive | boolean | optional | Include reviewer display name, profile link, and avatar. Leave off for GDPR-sensitive workloads. |
cookieString | string | optional | Optional. Paste your own logged-in Amazon session cookie (the literal Cookie header value) to use paginated /product-reviews/ and unlock deeper history. Never required; the actor returns real public data without it. Never paste a password. |
3. Start an Actor run
Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.
Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.
import json
import os
import urllib.request
# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
actor_input = json.load(stream)
token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
"https://api.apify.com/v2/acts/1u5Fn40qo93nWNJ8t/runs?timeout=120&maxTotalChargeUsd=0.50",
data=json.dumps(actor_input).encode("utf-8"),
headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.
4. Inspect the actual results
Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.
One record per Amazon customer review (rating, text, verified/Vine flags, helpful votes, variant, media, dates, source metadata) plus one type=amazon_review_aggregate record per product with the rating summary and star histogram. Empty fields are omitted, never pushed as null.
Questions before you run
Which inputs are required?
No top-level fields are marked required in the published schema. Conditional requirements can still apply; check the README.
What does this guide verify?
The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.
What if the run request times out?
Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.
Generated from source build Uz8bhFkvsoBLw91SC and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.