# Amazon Product & Price Scraper (`reventadata/amazon-scraper`) Actor

Scrape Amazon products, prices, Prime badges, ratings, and reviews across 8 countries (US, UK, DE, ES, FR, IT, CA, JP). Filter by price and rating.

- **URL**: https://apify.com/reventadata/amazon-scraper.md
- **Developed by:** [reventadata](https://apify.com/reventadata) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Amazon Product & Price Scraper

> **Unofficial.** This Actor is not affiliated with, authorised by, endorsed by, or in any
> way officially connected to Amazon.com, Inc. or any of its subsidiaries. "Amazon" is a trademark
> of its respective owner and is used here only to describe what this tool reads. It reads the same
> public pages a browser does.

Amazon Product & Price Scraper extracts structured listing data from Amazon across 8 national marketplaces (US, UK, Germany, Spain, France, Italy, Canada, and Japan).

### What does it do?

Extracts search results with structured attributes (ASIN, title, price, list price, discount percentage, star rating, reviews count, Prime eligibility, and sponsored ad markers) exported as clean tabular dataset fields.

### Why use it?

- **Multi-Country Support:** Search across 8 Amazon domains with a single click (`amazon.com`, `amazon.co.uk`, `amazon.de`, `amazon.es`, `amazon.fr`, `amazon.it`, `amazon.ca`, `amazon.co.jp`).
- **Structured Pricing & Discounts:** Extracts both current price and strikethrough MSRP/list price, calculating exact discount percentages.
- **Prime & Ad Transparency:** Boolean flags for sponsored placements and for results Amazon labelled Prime on the visit (see "Prime flag").
- **Built-in Quality Filters:** Filter by minimum rating, price bounds, Prime-only, or exclude sponsored ads directly at run time.
- **Search-result data as Amazon shows it:** the fields on each result card, nothing from behind a login.

### How to use it

1. Enter one or more keywords in `searchQueries` (e.g. `["thinkpad", "mechanical keyboard"]`).
2. Select the target `country` marketplace (defaults to `US`).
3. Set optional bounds such as `minRating`, `minPrice`, `maxPrice`, or toggle `primeOnly`.
4. Run the Actor and export your data as JSON, CSV, Excel, or NDJSON.

#### Input Parameters

| Field | Type | Description |
|---|---|---|
| `searchQueries` | array | Required. Keywords or search terms to crawl on Amazon. |
| `country` | string | Target national marketplace (US, UK, DE, ES, FR, IT, CA, JP, IN). Default: `US`. |
| `maxItems` | integer | Maximum number of matching products to push to the dataset. Default: `20`. |
| `sortBy` | string | Sort order (`relevance`, `price_low_to_high`, `price_high_to_low`, `review_rank`, `newest`). |
| `minPrice` | number | Optional minimum price filter in local marketplace currency. |
| `maxPrice` | number | Optional maximum price filter in local marketplace currency. |
| `minRating` | number | Optional minimum average rating (1.0 to 5.0 stars). |
| `primeOnly` | boolean | When enabled, only returns items with `isPrime` true (see "Prime flag" below). Default: `false`. |
| `excludeSponsored` | boolean | When enabled, sponsored ad listings are discarded. Default: `false`. |

#### Sample Input

```json
{
    "searchQueries": ["thinkpad"],
    "country": "US",
    "maxItems": 20,
    "sortBy": "relevance",
    "minRating": 4.0,
    "primeOnly": false
}
```

#### Sample Output

```json
{
    "asin": "B0F195W823",
    "title": "Acer Nitro V 16S AI Gaming Laptop | AMD Ryzen 7 26",
    "price": 1342.16,
    "currency": "USD",
    "listPrice": 1599.99,
    "discountPercentage": 16,
    "rating": 4.5,
    "reviewsCount": 1240,
    "url": "https://www.amazon.com/dp/B0F195W823",
    "image": "https://m.media-amazon.com/images/I/81zV-uXEduL._AC_UY218_.jpg",
    "isPrime": true,
    "isSponsored": false,
    "country": "US",
    "scrapedAt": "2026-10-17T10:25:00.000000+00:00"
}
```

### Prime flag

Amazon no longer shows a Prime badge to visitors who are not signed in. `isPrime` is true when the result shows Amazon's line "Join Prime to get FREE delivery ...". Whether Amazon prints that line depends on where the request comes from, so `true` is reliable but many Prime items come back `false`. On one amazon.com search on 2026-10-22 the line appeared on 8 of 22 results through a residential unblocker, 2 of 20 through US residential proxies, and 0 of 106 through the default proxy. amazon.in showed it on no result. Treat `primeOnly` as "only items Amazon labelled Prime on this visit", not "every Prime item".

### India (amazon.in)

Set `country` to `IN` for amazon.in; prices come back in INR. amazon.in blocks datacenter IPs (0 of 25 requests got through when we measured on 2026-10-22), so every India page goes through a residential unblocker. In that test 19 of 25 page requests succeeded and each page took 25 to 70 seconds. The Actor retries failed pages while the run has time left, but expect India runs to be slower than US runs and to return fewer pages in the same time.

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

Pay-per-event: **$0.0025 per product** saved to the dataset (**$2.50 per 1,000 products**), plus **$0.00005** charged once when the run starts. No subscription. Only rows saved to the dataset are charged.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords or search phrases to find on Amazon (e.g. \['thinkpad', 'gaming laptop']). Required.

## `country` (type: `string`):

Amazon national domain to search: US (amazon.com), UK (amazon.co.uk), DE (amazon.de), ES (amazon.es), FR (amazon.fr), IT (amazon.it), CA (amazon.ca), JP (amazon.co.jp).

## `maxItems` (type: `integer`):

Total maximum number of matching product listings to collect across queries. Amazon limits search pagination to ~7 pages per query.

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

Order of search results on Amazon.

## `minPrice` (type: `integer`):

Optional minimum product price filter in marketplace currency.

## `maxPrice` (type: `integer`):

Optional maximum product price filter in marketplace currency.

## `minRating` (type: `integer`):

Optional minimum customer rating (1 to 5 stars). Listings below this rating are rejected.

## `primeOnly` (type: `boolean`):

When enabled, only results that show Amazon's "Join Prime to get FREE delivery" line are returned. Seen on amazon.com; amazon.in showed no Prime line on 2026-10-22, so there this returns nothing. Other marketplaces not checked yet.

## `excludeSponsored` (type: `boolean`):

When enabled, sponsored/promoted search result placements are discarded.

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

Proxy settings for the Actor. Apify Proxy or custom proxies can be configured.

## Actor input object example

```json
{
  "searchQueries": [
    "thinkpad"
  ],
  "country": "US",
  "maxItems": 20,
  "sortBy": "relevance",
  "primeOnly": false,
  "excludeSponsored": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Items scraped from the target website.

# 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 = {
    "searchQueries": [
        "thinkpad"
    ],
    "country": "US",
    "maxItems": 20,
    "sortBy": "relevance"
};

// Run the Actor and wait for it to finish
const run = await client.actor("reventadata/amazon-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 = {
    "searchQueries": ["thinkpad"],
    "country": "US",
    "maxItems": 20,
    "sortBy": "relevance",
}

# Run the Actor and wait for it to finish
run = client.actor("reventadata/amazon-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 '{
  "searchQueries": [
    "thinkpad"
  ],
  "country": "US",
  "maxItems": 20,
  "sortBy": "relevance"
}' |
apify call reventadata/amazon-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reventadata/amazon-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/guAeak40rcelc4ytZ/builds/3WAl495BVwEOsTwyy/openapi.json
