# Amazon Reviews Scraper (`automation-lab/amazon-reviews-scraper`) Actor

Scrape Amazon product reviews for review monitoring — ratings, review text, verified purchase status, helpful votes, and review dates. Pair with Amazon price monitoring.

- **URL**: https://apify.com/automation-lab/amazon-reviews-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 971 total users, 94 monthly users, 95.2% runs succeeded, 3 bookmarks
- **User rating**: 2.15 out of 5 stars

## Pricing

from $1.30 / 1,000 review scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Amazon Reviews Scraper

Extract Amazon customer reviews at scale — ratings, review text, verified purchase status, and helpful votes. Supports 11 marketplaces, custom sort orders, and star-filter targeting. Export to JSON, CSV, or Excel. No coding required.

***

### 🛍️ What does it do?

Amazon Reviews Scraper fetches customer reviews for any Amazon product by ASIN or product URL. For each review it captures:

- ⭐ Star rating (1–5)
- 📝 Full review title and body text
- 📅 Review date
- 👤 Reviewer name and profile link
- ✅ Verified Purchase badge
- 👍 Helpful vote count
- 🔗 Direct review URL

You can collect reviews sorted by most recent or most helpful, filter by star rating (1-star only, 5-star only, positive, critical, etc.), and optionally emit only reviews newer than a monitoring checkpoint. Results are saved to a structured dataset you can export to JSON, CSV, or Excel.

***

### Pair price monitoring with review monitoring

Use [Amazon Scraper](https://apify.com/automation-lab/amazon-scraper) to track Amazon prices, sellers, Prime status, availability, and ranking signals, then run Amazon Reviews Scraper on the same ASINs to explain what shoppers are saying. Price changes tell you what moved; review fields such as `rating`, `body`, `isVerifiedPurchase`, `helpfulVotes`, and `date` help explain whether conversion or quality changes are driven by complaints, praise, or recent verified-purchase feedback.

Amazon Reviews Scraper is the sentiment layer of your e-commerce monitoring bundle — it does not scrape product prices itself.

***

### 👥 Who is it for?

**E-commerce sellers and brand managers** — monitor your own products and competitors for common complaints, feature requests, and sentiment trends. Identify what customers love and what drives negative reviews.

**Market researchers and analysts** — gather large review datasets for NLP analysis, sentiment scoring, or competitive benchmarking across categories and marketplaces.

**Product teams** — mine unstructured feedback at scale without manual copy-paste. Use 1-star reviews as a product backlog of real user pain points.

**Review monitoring services** — build alerting pipelines that watch for new negative reviews on client products.

**Data scientists** — train recommendation models, sentiment classifiers, or LLMs on Amazon review corpora across 10 markets.

***

### 💡 Why use this actor?

- **11 Amazon marketplaces** — US, UK, DE, FR, IT, ES, CA, JP, IN, AU, SG. Proxy country auto-matches.
- **Star filter** — target exactly the reviews you need: 1-star complaints only, 5-star praise only, or all critical/positive.
- **Incremental monitoring** — set `newerThan` to your last `YYYY-MM-DD` checkpoint and emit only later reviews.
- **Sort options** — most recent (for monitoring) or most helpful (for insights).
- **Residential proxy** — rotates real residential IPs to avoid blocks. Works where datacenter proxies fail.
- **Batch input** — paste a list of ASINs or product URLs. Mix and match.
- **Clean output** — flat dataset with consistent types. No nested objects that break CSV export.
- **PPE pricing** — pay only for reviews you actually collect. No monthly fees.

***

### 📋 What data does it extract?

The actor writes to two named datasets:

#### `reviews` dataset (one record per review)

| Field | Type | Description |
|-------|------|-------------|
| `asin` | string | Amazon product identifier |
| `reviewId` | string | Unique Amazon review ID |
| `title` | string | Review headline |
| `body` | string | Full review text |
| `rating` | integer | Star rating 1–5 |
| `date` | string | Review date as shown on Amazon |
| `author` | string | Reviewer display name |
| `authorUrl` | string | Link to reviewer's Amazon profile |
| `isVerifiedPurchase` | boolean | Whether Amazon verified the purchase |
| `helpfulVotes` | integer | Number of helpful votes |
| `reviewUrl` | string | Direct link to this review |
| `marketplace` | string | Marketplace code (US, UK, DE, etc.) |
| `scrapedAt` | string | ISO 8601 scrape timestamp |

#### `product_metadata` dataset (one record per ASIN)

| Field | Type | Description |
|-------|------|-------------|
| `asin` | string | Amazon product identifier |
| `productName` | string | Full product title |
| `productUrl` | string | Link to the product page |
| `overallRating` | number | Overall star rating shown on the product page |
| `totalReviewCount` | integer | Total number of global ratings |
| `marketplace` | string | Marketplace code (US, UK, DE, etc.) |
| `scrapedAt` | string | ISO 8601 scrape timestamp |

***

### 💰 How much does it cost to scrape Amazon reviews?

**Pricing uses Pay-Per-Event (PPE):**

| Event | Cost |
|-------|------|
| Run start (one-time) | $0.01 |
| Per review scraped | $0.002 |

**Cost examples:**

| Task | Reviews | Estimated cost |
|------|---------|---------------|
| Single product, ~10 reviews | 10 | ~$0.03 |
| 10 products × ~10 reviews | 100 | ~$0.21 |
| 50 products × ~10 reviews | 500 | ~$1.01 |

**Free plan:** Apify's free tier includes $5/month of compute — enough for roughly 2,400 reviews. No credit card required to start.

Costs are dominated by review count, not runtime. The residential proxy (needed for anti-bot) is included in the cost calculation.

***

### 🚀 How to scrape Amazon reviews (step by step)

1. **Open the actor** on [Apify Store](https://apify.com/automation-lab/amazon-reviews-scraper).
2. **Add ASINs or URLs** — paste product ASINs (e.g. `B09G9FPHY6`) or full Amazon product URLs. You can mix both formats.
3. **Choose marketplace** — select the Amazon marketplace matching the product region.
4. **Set review limit** — enter `maxReviewsPerProduct` (default: 20). Amazon product pages typically contain 8–14 reviews.
5. **Set sort and filters** — pick "most recent" for monitoring or "most helpful" for quality insights. Use star filters to target sentiment and optionally set `newerThan` to your last monitoring checkpoint.
6. **Click Run** — the actor fetches reviews from each product page and attempts pagination for additional reviews.
7. **Download results** — export to JSON, CSV, or Excel from the Dataset tab.

***

### ⚙️ Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `asins` | array | required | List of ASINs or Amazon product URLs (max 50 unique ASINs per run) |
| `marketplace` | string | `US` | Amazon marketplace (US, UK, DE, FR, IT, ES, CA, JP, IN, AU, SG) |
| `maxReviewsPerProduct` | integer | `20` | Max reviews to collect per ASIN. Typically 8–14 available per product page; use smaller batches for multi-product exports. |
| `sort` | string | `recent` | Sort by `recent` (newest) or `helpful` (most helpful) |
| `filterByStars` | string | `all` | Filter: `all`, `five_star`, `four_star`, `three_star`, `two_star`, `one_star`, `positive`, `critical` |
| `newerThan` | string | none | Optional ISO date (`YYYY-MM-DD`). Emit and charge only reviews strictly newer than this date; conservatively retain localized dates that cannot be parsed. |
| `maxRequestRetries` | integer | `2` | Retry count for blocked/failed requests |

**Example input (JSON):**

```json
{
    "asins": [
        "B09G9FPHY6",
        "https://www.amazon.com/dp/B08N5WRWNW"
    ],
    "marketplace": "US",
    "maxReviewsPerProduct": 20,
    "sort": "recent",
    "filterByStars": "all",
    "newerThan": "2026-09-01"
}
```

***

### 📦 Output example

The actor writes results to two named datasets. Access them from the **Storage** tab of your run, or via the API using the dataset aliases `reviews` and `product_metadata`.

**`reviews` dataset** — one record per review:

```json
{
    "asin": "B09G9FPHY6",
    "reviewId": "R1A2B3C4D5E6F7",
    "title": "Best earbuds I've ever owned",
    "body": "Sound quality is incredible and the noise cancellation is next level. Battery life is great too. Worth every penny.",
    "rating": 5,
    "date": "Reviewed in the United States on February 15, 2024",
    "author": "TechEnthusiast123",
    "authorUrl": "https://www.amazon.com/gp/profile/amzn1.account.ABCDEFG",
    "isVerifiedPurchase": true,
    "helpfulVotes": 47,
    "reviewUrl": "https://www.amazon.com/review/R1A2B3C4D5E6F7/ref=cm_cr_dp_d_rvw_ttl",
    "marketplace": "US",
    "scrapedAt": "2024-03-01T12:00:00.000Z"
}
```

**`product_metadata` dataset** — one record per ASIN:

```json
{
    "asin": "B09G9FPHY6",
    "productName": "Apple AirPods Pro (2nd Generation) Wireless Earbuds",
    "productUrl": "https://www.amazon.com/dp/B09G9FPHY6",
    "overallRating": 4.4,
    "totalReviewCount": 89432,
    "marketplace": "US",
    "scrapedAt": "2024-03-01T12:00:00.000Z"
}
```

***

### 💡 Tips for best results

**Finding ASINs:** Every Amazon product URL contains the ASIN after `/dp/`. For example in `https://www.amazon.com/dp/B09G9FPHY6`, the ASIN is `B09G9FPHY6`. You can also find it on the product page under "Product information" > "ASIN".

**Competitive analysis:** Run the actor on your top 10 competitors with `filterByStars: "one_star"` and `sort: "helpful"`. The most helpful negative reviews reveal the biggest pain points that customers actually care about.

**Monitoring new reviews:** Schedule the actor to run daily with `sort: "recent"`, `maxReviewsPerProduct: 20`, and `newerThan` set to your last completed checkpoint date. Only reviews strictly after that date are emitted and charged. The original Amazon `date` text remains in output; if a localized date cannot be parsed safely, the review is retained and the run log reports it so monitoring does not silently lose data. Use Apify's webhook or dataset notifications to alert you when new reviews arrive.

**International research:** Set `marketplace` to match where the product is sold. Reviews are marketplace-specific — a US product may have very different reviews on amazon.co.uk.

**Batch processing:** The `asins` field accepts multiple items and processes up to 50 unique ASINs per run. For large batches, keep `maxReviewsPerProduct` at the default and split exports into smaller runs — logs show the current ASIN, page, proxy fallback/backoff state, and collected counts.

**Handle review gaps:** If a product has fewer reviews than your limit, the actor stops early automatically — no wasted runs.

***

### 🔗 Integrations

**Google Sheets:** Connect the dataset to Google Sheets via Apify's native integration. Reviews update automatically when you schedule the actor. Use Sheets formulas to filter by rating or keyword.

**Zapier / Make:** Trigger workflows when new reviews are scraped. Send 1-star reviews to Slack, create Notion tickets from complaints, or add reviewers to a CRM.

**Python / Pandas:** Pull the dataset via API into a Pandas DataFrame for NLP analysis, sentiment scoring, or topic modeling with tools like spaCy or HuggingFace.

**BigQuery / Snowflake:** Export large review datasets to a data warehouse for long-term trend analysis across products and marketplaces.

**Power BI / Tableau:** Connect directly to the Apify dataset API to build live dashboards tracking average rating, review velocity, and sentiment over time.

***

### 🤖 API usage

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('automation-lab/amazon-reviews-scraper').call({
    asins: ['B09G9FPHY6', 'B08N5WRWNW'],
    marketplace: 'US',
    maxReviewsPerProduct: 20,
    sort: 'recent',
    filterByStars: 'all',
    newerThan: '2026-09-01',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} reviews`);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("automation-lab/amazon-reviews-scraper").call(run_input={
    "asins": ["B09G9FPHY6", "B08N5WRWNW"],
    "marketplace": "US",
    "maxReviewsPerProduct": 100,
    "sort": "recent",
    "filterByStars": "all",
    "newerThan": "2026-09-01",
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Scraped {len(items)} reviews")
```

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~amazon-reviews-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "asins": ["B09G9FPHY6"],
    "marketplace": "US",
    "maxReviewsPerProduct": 20,
    "sort": "recent"
  }'
```

***

### Use with Claude AI (MCP)

This actor is available as a tool in Claude AI through the Model Context Protocol (MCP). Add it to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.

#### Setup for Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/amazon-reviews-scraper"
```

#### Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com/?tools=automation-lab/amazon-reviews-scraper"
        }
    }
}
```

#### Example prompts

- "Scrape the top 200 reviews for ASIN B09G9FPHY6 on Amazon US and summarize the most common complaints."
- "Get all 1-star reviews for these 5 competitor products on amazon.de and tell me what customers hate most."
- "Fetch the 50 most recent reviews for this Amazon product URL and give me the overall sentiment score."

Learn more in the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

***

### ⚖️ Legality

Amazon reviews are publicly visible to anyone who visits the product page — no login required. Scraping public web data for research, analysis, and business intelligence is generally considered lawful in most jurisdictions.

However, Amazon's Terms of Service prohibit automated access. Using this tool for personal research, competitive analysis, or building data products is a common industry practice, but you should consult your legal team for compliance-sensitive use cases.

This actor uses residential proxies that mimic real browser requests. It does not bypass any authentication, DRM, or paywalls. Do not use scraped data to impersonate Amazon or misrepresent the source of reviews.

***

### ❓ FAQ

**Q: What is an ASIN?**
A: ASIN (Amazon Standard Identification Number) is the unique 10-character ID Amazon assigns to every product. You can find it in the product URL after `/dp/`, or under "Product information" on any product page. Example: `B09G9FPHY6`.

**Q: Can I scrape reviews from multiple marketplaces for the same product?**
A: Yes — run the actor twice with the same ASIN but different `marketplace` values. Amazon reviews are marketplace-specific (US reviews are separate from UK reviews).

**Q: How many reviews can I scrape per product?**
A: Amazon shows up to 10 reviews per page. The actor paginates automatically. Set `maxReviewsPerProduct` up to 100. Most products have far fewer publicly accessible reviews, so the actor stops naturally when all available reviews are collected.

**Q: Why does the actor stop before my review limit?**
A: The product has fewer public reviews than your limit, the star filter reduces available reviews, or Amazon served a CAPTCHA. If Amazon exposes product metadata but no anonymous review records for every supplied listing, the run succeeds with a clear terminal account-verification/access status message and keeps the available records in the `product_metadata` dataset. Runs still fail when every source route is blocked and no useful product response is available.

**Q: The actor got blocked — what should I do?**
A: Keep `maxRequestRetries` at its maximum of 2. The actor automatically rotates proxy sessions and can switch proxy groups when blocked. For persistent blocking, try a lower `maxReviewsPerProduct` and run multiple smaller batches. Listings for which Amazon requires sign-in cannot currently return review text because the actor does not accept Amazon account credentials.

**Q: Are product images or prices included?**
A: Prices and product images are not included. However, the actor does extract key product metadata — product name, URL, overall star rating, and total review count — into a separate `product_metadata` named dataset alongside the `reviews` dataset. For full product metadata (prices, images, Prime status, search rankings), use the [Amazon Scraper](https://apify.com/automation-lab/amazon-scraper).

**Q: Does this work for Amazon Business / Seller Central reviews?**
A: This actor scrapes public customer reviews only (the star ratings and text reviews on product pages). Seller feedback or A-to-Z claims require authentication and are not supported.

***

### 🔗 Related scrapers

- [Amazon Scraper](https://apify.com/automation-lab/amazon-scraper) — Scrape Amazon product search results: prices, ratings, images, Prime status across 11 marketplaces.

***

*Built by [automation-lab](https://apify.com/automation-lab) — reliable data extraction, maintained and monitored.*

# Actor input Schema

## `asins` (type: `array`):

List of Amazon ASINs (e.g. B07PXGQC1Q) or full product URLs. Mix of both is supported — ASINs are extracted from URLs automatically. Safety cap: max 50 unique ASINs per run; split larger jobs into multiple runs for clearer progress and lower abort risk.

## `marketplace` (type: `string`):

Which Amazon marketplace to scrape. Proxy country is set automatically to match the marketplace.

## `maxReviewsPerProduct` (type: `integer`):

Maximum number of reviews to scrape per ASIN. Amazon embeds 8–14 reviews on each product page. The actor extracts all available reviews from the product page, then attempts pagination for more. Due to Amazon's anti-bot measures, most runs return 8–14 reviews per product. For large ASIN batches, keep this near the default and split jobs rather than starting multi-thousand review runs.

## `sort` (type: `string`):

Sort reviews by most recent date or by most helpful votes.

## `filterByStars` (type: `string`):

Only scrape reviews with a specific star rating, or positive/critical reviews.

## `newerThan` (type: `string`):

Optional monitoring checkpoint in YYYY-MM-DD format. Only reviews strictly newer than this date are emitted and charged. Localized dates that cannot be parsed safely are retained and reported in the run log instead of being silently dropped.

## `maxRequestRetries` (type: `integer`):

Number of retry attempts for failed or blocked HTTP requests per page. Default is 2. Kept capped for cost safety — the actor also aborts early when Amazon keeps blocking pages.

## Actor input object example

```json
{
  "asins": [
    "0321965515"
  ],
  "marketplace": "SG",
  "maxReviewsPerProduct": 10,
  "sort": "recent",
  "filterByStars": "all",
  "maxRequestRetries": 2
}
```

# Actor output Schema

## `overview` (type: `string`):

Scraped Amazon reviews in the default dataset overview view.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "asins": [
        "0321965515"
    ],
    "marketplace": "SG",
    "maxReviewsPerProduct": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/amazon-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "asins": ["0321965515"],
    "marketplace": "SG",
    "maxReviewsPerProduct": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/amazon-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "asins": [
    "0321965515"
  ],
  "marketplace": "SG",
  "maxReviewsPerProduct": 10
}' |
apify call automation-lab/amazon-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/amazon-reviews-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/SArscfN3KsUhvgTTf/builds/QUNE7Dnf34Elf3mHB/openapi.json
