# Amazon Reviews Scraper — Ratings & Sentiment (`maged120/amazon-reviews-scraper`) Actor

Extract written customer reviews from any Amazon product — star ratings, review text, verified purchase status, helpful votes, and reviewer info. Supports bulk ASINs, star filters, and verified-only mode.

- **URL**: https://apify.com/maged120/amazon-reviews-scraper.md
- **Developed by:** [Maged](https://apify.com/maged120) (community)
- **Categories:** E-commerce, Other, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What does Amazon Reviews Scraper do?

**Amazon Reviews Scraper** extracts written customer reviews from any Amazon product page — star ratings, review text, verified purchase status, helpful votes, reviewer info, and attached images — for any ASIN on amazon.com. Retrieves **hundreds to thousands of reviews per product** depending on review volume.

Give it a list of ASINs or Amazon product URLs and get a structured dataset you can download as JSON, CSV, or Excel in seconds. Runs on the Apify platform with scheduling, API access, webhook integrations, and monitoring built in.

> **Note:** Amazon's rating count (e.g. "80 ratings") includes star-only feedback with no written text. This scraper retrieves **written reviews** — customers who left a text review alongside their rating. The number of written reviews is typically lower than the total rating count shown on Amazon.

### Why use Amazon Reviews Scraper?

- **Product research** — understand real buyer sentiment before launching or improving a product
- **Competitive intelligence** — see exactly what customers love and hate about competitor products
- **Brand monitoring** — get alerted when new negative reviews appear for your products
- **AI & NLP pipelines** — power sentiment classifiers, fine-tune LLMs, or train recommendation engines with authentic review data
- **Market research** — spot category trends across thousands of reviews at once
- **Review management** — export reviews to spreadsheets, CRMs, or analytics dashboards with one click

### How to use Amazon Reviews Scraper

1. Open the **Input** tab in Apify Console
2. Paste one or more ASINs (e.g. `B08N5WRWNW`) or full Amazon product URLs — one per line
3. Choose your **Sort order** and **Star filter** (optional)
4. Set **Max reviews per product** (default 100, set to 0 to collect all available)
5. Click **Start** — reviews stream into the **Output** tab in real time
6. Download the dataset as JSON, CSV, or Excel from the **Storage** tab

> **Tip:** Paste a full URL like `https://www.amazon.com/dp/B08N5WRWNW` and the ASIN is extracted automatically.

### Input

Configure the scraper from the **Input** tab or via the Apify API:

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `asins` | string[] | — | ASINs or Amazon product URLs to scrape (required) |
| `maxReviewsPerProduct` | integer | `100` | Max written reviews to retrieve per ASIN (0 = all available) |
| `sortBy` | string | `recent` | `recent` — newest first · `helpful` — most helpful first |
| `filterByStar` | string | `all_stars` | Filter by rating: `all_stars`, `five_star` … `one_star`, `positive` (4–5★), `critical` (1–3★) |
| `reviewerType` | string | `all_reviews` | `all_reviews` or `avp_only_reviews` (verified purchases only) |
| `proxyConfiguration` | object | — | Optional. Add Residential Proxy for additional coverage on high-volume products |

**Example input:**

```json
{
  "asins": ["B08N5WRWNW", "B09G9FPHY6"],
  "maxReviewsPerProduct": 200,
  "sortBy": "recent",
  "filterByStar": "all_stars",
  "reviewerType": "all_reviews"
}
````

### Output

Each written review is one row in the dataset. Download in JSON, CSV, HTML, or Excel from the Storage tab.

**Example output item:**

```json
{
  "reviewId": "R2STPNLB5EQXXX",
  "asin": "B08N5WRWNW",
  "productTitle": "Echo Dot (4th Gen)",
  "stars": 5,
  "reviewTitle": "Great little speaker for the price",
  "reviewText": "Sound quality is much better than expected for the size. Setup was easy and Alexa responds quickly.",
  "date": "April 3, 2024",
  "country": "the United States",
  "verifiedPurchase": true,
  "helpfulVotes": 12,
  "author": "John D.",
  "authorUrl": null,
  "variant": null,
  "images": null,
  "scrapedAt": "2024-05-15T10:23:45.000Z"
}
```

### Data fields

| Field | Type | Description |
|-------|------|-------------|
| `reviewId` | string | Unique Amazon review ID |
| `asin` | string | Product ASIN |
| `productTitle` | string | Product name (when available) |
| `stars` | number | Star rating (1–5) |
| `reviewTitle` | string | Review headline |
| `reviewText` | string | Full review body |
| `date` | string | Review date as shown on Amazon |
| `country` | string | Country where the review was written |
| `verifiedPurchase` | boolean | Whether the reviewer purchased the product |
| `helpfulVotes` | number | Number of "helpful" votes |
| `author` | string | Reviewer display name |
| `authorUrl` | string | Link to reviewer's Amazon profile |
| `variant` | string | Product variant purchased (size, color, etc.) |
| `images` | string\[] | URLs of images attached to the review |
| `scrapedAt` | string | ISO timestamp of when the data was scraped |

### Pricing

This Actor uses **pay-per-result** pricing — you pay per review extracted, not per run. Runs that return zero results cost nothing.

| Plan | Price per 1,000 reviews |
|------|------------------------|
| Standard | $1.00 |
| Bronze | $0.90 |
| Silver | $0.80 |
| Gold | $0.70 |

**Example costs:**

- 500 reviews from 1 ASIN → ~$0.50

- 5,000 reviews from 10 ASINs → ~$5.00

- 50,000 reviews from 100 ASINs → ~$50.00

- **Free tier:** Try it for free with Apify's included platform credits — no credit card required

- **No wasted spend:** Zero results = zero charge

- **Combine with other Actors:** Use the [Amazon Product Scraper](https://apify.com/maged120/amazon-scraper) to collect product metadata, then run this Actor to pull all reviews in one workflow

### Tips

- **Get all written reviews:** set `maxReviewsPerProduct` to `0`
- **Negative reviews only:** set `filterByStar` to `critical` to focus on 1–3 star reviews
- **Higher-quality sentiment data:** set `reviewerType` to `avp_only_reviews` to restrict to verified purchases
- **Bulk runs:** paste as many ASINs or product URLs as needed — they are all processed in a single run
- **Boost coverage on high-volume products:** add a Residential Proxy in the input configuration to increase the number of reviews retrieved for popular products
- **Automate monitoring:** use Apify Schedules to run on a daily or weekly cadence and track new reviews over time

### FAQ, Disclaimers & Support

**Is scraping Amazon reviews legal?**
Scraping publicly visible data is generally accepted for personal, academic, and business research use. Review Amazon's Terms of Service before using the data commercially. This scraper only accesses publicly available review data — no login or personal accounts are used.

**Why does the review count differ from what Amazon shows?**
Amazon's rating count includes star-only ratings that have no written text. This scraper retrieves written reviews — customers who left a text review. The number of written reviews is always lower than the total rating count. Setting `maxReviewsPerProduct` to `0` collects all available written reviews for an ASIN.

**Can I scrape reviews from Amazon.co.uk, Amazon.de, or other marketplaces?**
Currently amazon.com only. Support for additional marketplaces is on the roadmap.

**Can I schedule this to run automatically?**
Yes — use Apify Schedules to monitor review changes on a daily or weekly basis without any manual effort.

**Need help or a custom solution?**
Open an issue in the Issues tab or reach out on Discord: **maged03211**

# Actor input Schema

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

Amazon ASINs or full product URLs to scrape reviews for. One per line. The ASIN is extracted automatically from URLs.

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

Maximum number of reviews to extract per ASIN (0 = all available).

## `sortBy` (type: `string`):

Order in which to retrieve reviews.

## `filterByStar` (type: `string`):

Only retrieve reviews with a specific star rating.

## `reviewerType` (type: `string`):

Filter by reviewer type.

## `proxyConfiguration` (type: `object`):

Optional. Add a Residential Proxy to increase coverage for products with high review volumes and reduce rate-limiting on large runs.

## Actor input object example

```json
{
  "asins": [
    "B08N5WRWNW"
  ],
  "maxReviewsPerProduct": 100,
  "sortBy": "recent",
  "filterByStar": "all_stars",
  "reviewerType": "all_reviews"
}
```

# 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": [
        "B08N5WRWNW"
    ],
    "maxReviewsPerProduct": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maged120/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": ["B08N5WRWNW"],
    "maxReviewsPerProduct": 100,
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "B08N5WRWNW"
  ],
  "maxReviewsPerProduct": 100
}' |
apify call maged120/amazon-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maged120/amazon-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Amazon Reviews Scraper — Ratings & Sentiment",
        "description": "Extract written customer reviews from any Amazon product — star ratings, review text, verified purchase status, helpful votes, and reviewer info. Supports bulk ASINs, star filters, and verified-only mode.",
        "version": "0.0",
        "x-build-id": "Kih0C8GEt3zYRnwnU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maged120~amazon-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maged120-amazon-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maged120~amazon-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maged120-amazon-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maged120~amazon-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maged120-amazon-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "asins"
                ],
                "properties": {
                    "asins": {
                        "title": "Product ASINs or URLs",
                        "type": "array",
                        "description": "Amazon ASINs or full product URLs to scrape reviews for. One per line. The ASIN is extracted automatically from URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxReviewsPerProduct": {
                        "title": "Max Reviews Per Product",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of reviews to extract per ASIN (0 = all available).",
                        "default": 100
                    },
                    "sortBy": {
                        "title": "Sort Reviews By",
                        "enum": [
                            "recent",
                            "helpful"
                        ],
                        "type": "string",
                        "description": "Order in which to retrieve reviews.",
                        "default": "recent"
                    },
                    "filterByStar": {
                        "title": "Filter by Star Rating",
                        "enum": [
                            "all_stars",
                            "five_star",
                            "four_star",
                            "three_star",
                            "two_star",
                            "one_star",
                            "positive",
                            "critical"
                        ],
                        "type": "string",
                        "description": "Only retrieve reviews with a specific star rating.",
                        "default": "all_stars"
                    },
                    "reviewerType": {
                        "title": "Reviewer Type",
                        "enum": [
                            "all_reviews",
                            "avp_only_reviews"
                        ],
                        "type": "string",
                        "description": "Filter by reviewer type.",
                        "default": "all_reviews"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Optional. Add a Residential Proxy to increase coverage for products with high review volumes and reduce rate-limiting on large runs."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
