# Amazon Product Scraper (`crawlerbros/amazon-product-scraper`) Actor

Scrapes Amazon product data including prices, reviews, seller info, variants, and delivery details. Supports multiple Amazon domains and languages.

- **URL**: https://apify.com/crawlerbros/amazon-product-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Lead generation, E-commerce
- **Stats:** 26 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 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 Product Scraper

Scrape **Amazon** product pages for pricing, ratings, seller, and variant data across 21 country domains. Give it product URLs or bare ASINs and get back price, list price, stock status, star rating and review count, seller info, images, bestseller ranks, variants, and technical details for each product. No cookies or login required — proxy is handled automatically.

### What this actor does

- **21 Amazon domains** — mix `amazon.com`, `.co.uk`, `.de`, `.fr`, `.co.jp`, `.in`, and 15 others freely in one run; URLs are grouped by domain and proxy traffic is routed per TLD
- **Flexible input** — accepts full product URLs (`/dp/ASIN`) or bare 10-character ASINs (auto-builds the URL for you)
- **Deep product data** — price, list price, stock status, ratings/review breakdown, seller, variants + per-variant pricing, bestseller ranks, images, description, features, technical details, and book-specific fields when applicable
- **Optional delivery targeting** — set a delivery country/postal code to see buy-box price and availability as it would render for that destination
- **Automatic anti-bot handling** — datacenter proxy by default, with automatic escalation to residential proxy only when a block is detected, and automatic bot-check click-through
- **Empty fields are omitted** — only fields the actor could actually populate for a given product appear on that record

### Output per product

- `title` — Product title
- `url` — Product page URL
- `asin` — Amazon Standard Identification Number
- `inStock` — Whether the buy-box is currently purchasable
- `inStockText` — Raw stock availability text
- `brand` — Product brand name
- `price` — Current price (`value`, `currency`, `display`)
- `listPrice` — Original/strike-through price if discounted
- `shippingPrice` — Shipping cost, when explicitly shown (omitted for FREE shipping)
- `stars` — Average rating (0-5)
- `starsBreakdown` — Percentage of reviews per star level (`5star`...`1star`, 0.0-1.0)
- `ratingHistogram` — Per-star histogram entries (`stars`, `percent`)
- `reviewsCount` — Total number of reviews
- `answeredQuestions` — Number of answered customer questions
- `breadCrumbs` — Category path
- `thumbnailImage` — Main product image URL
- `images[]` — All product image URLs (main + alt thumbnails), max-resolution
- `description` — Product description text
- `features[]` — Bullet-point feature list
- `variantAsins[]` — Related variant product ASINs (e.g. other colors/sizes)
- `variantAttributes[]` — Variant dimensions (`dimension`, `values[]`), e.g. Color/Size
- `priceVariants` — Per-variant pricing matrix, when the page exposes one
- `reviewsLink` — URL to the full reviews page
- `delivery` — Delivery/shipping message
- `fastestDelivery` — Fastest delivery option text
- `locationText` — The delivery destination the page rendered for
- `returnPolicy` — Return policy text
- `support` — Product support text
- `seller` — Seller information (`name`, `id`, `url`, `reviewsCount`, `averageRating`)
- `bestsellerRanks[]` — Bestseller rankings (`rank`, `category`)
- `purchaseOptions[]` — Buying options (`type`: `ONE_TIME`/`SUBSCRIBE_AND_SAVE`/`USED`, `price`, `availabilityStatus`)
- `sustainabilityFeatures` — Climate Pledge Friendly / sustainability text
- `documents[]` — Manuals/guides (`label`, `url`, `mediaType`)
- `sizeChart[]` — Apparel/footwear size-chart rows, when present
- `details[]` — Grouped technical/additional/overview detail rows (`group`, `key`, `value`, `raw`)
- `customersSay` — "Customers say" AI-generated review summary + sentiment aspects
- `relatedProducts[]` — Related-product carousels (only when `includeRelatedProducts=true`)
- `productType` — `"BOOK"` when book-specific evidence (ISBN/byline) is present
- `book` — Book-specific fields (`isbn10`, `isbn13`, `authors`, `publisher`, `format`, ...)
- `manufacturer`, `modelNumber`, `weight`, `productDimensions`, `countryOfOrigin`, `dateFirstAvailable`, `gtin`, `upc`, `isbn10`, `isbn13` — Common technical-detail fields promoted to the top level when present
- `scrapedAt` — ISO-8601 UTC timestamp when the record was scraped

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `productUrls` | array | – | Amazon product URLs to scrape (e.g., `amazon.com/dp/ASIN`). One of `productUrls`/`asins` required |
| `asins` | array | – | Bare 10-character Amazon ASINs, as an alternative/addition to `productUrls`. Builds `/dp/{ASIN}` URLs on `amazon.com` (or the first `productUrls` domain, if provided) |
| `deliveryCountry` | string | – | Best-effort delivery country to set before scraping (used together with `postalCode`); affects buy-box availability/price for some products |
| `postalCode` | string | – | Best-effort ZIP/postal code to set as the delivery destination before scraping |
| `includeRelatedProducts` | boolean | `false` | Include a best-effort `relatedProducts[]` array (Frequently Bought Together / From the Brand / Similar items) on each record |
| `proxyConfiguration` | object | `{"useApifyProxy": true}` | Apify Proxy configuration. Defaults to AUTO (datacenter-first); the actor automatically escalates to a residential proxy for a domain session if it detects a block, so most users never need to change this |
| `proxyCountry` | string | `AUTO` | Proxy country for geo-targeting. Use `AUTO` to automatically select based on the Amazon domain |
| `rateLimitDelay` | integer | `2` | Delay between requests in seconds (1-30) |

#### Example: single product

```json
{
  "productUrls": ["https://www.amazon.com/dp/B09X7MPX8L"]
}
```

#### Example: bare ASINs (no full URL needed)

```json
{
  "asins": ["B09X7MPX8L", "B08H75RTZ8"]
}
```

#### Example: multiple domains in one run

```json
{
  "productUrls": [
    "https://www.amazon.com/dp/B09X7MPX8L",
    "https://www.amazon.co.uk/dp/B09X7MPX8L",
    "https://www.amazon.de/dp/B09X7MPX8L"
  ]
}
```

#### Example: delivery destination + related products

```json
{
  "productUrls": ["https://www.amazon.com/dp/B09X7MPX8L"],
  "deliveryCountry": "US",
  "postalCode": "10001",
  "includeRelatedProducts": true
}
```

### Use cases

- **Price monitoring** — track price, list price, and stock status across your catalog or competitors' listings
- **Market research** — compare ratings, review counts, and bestseller ranks across products and categories
- **Catalog enrichment** — pull images, descriptions, features, and technical details to populate your own product database
- **Repricing tools** — feed buy-box price/availability by delivery destination into a repricing engine
- **Review/reputation tracking** — monitor star ratings, rating breakdowns, and "Customers say" sentiment over time
- **Cross-marketplace comparison** — scrape the same ASIN across multiple country domains to compare pricing and availability

### FAQ

**Which Amazon domains are supported?**
21 country domains: amazon.com, .co.uk, .de, .fr, .es, .it, .ca, .com.au, .co.jp, .in, .com.br, .com.mx, .nl, .se, .pl, .com.tr, .ae, .sa, .sg, .com.be, .eg. Mix domains freely in one run; the actor groups URLs by domain and routes proxy traffic per TLD.

**Do I need to configure a residential proxy myself?**
No. The actor defaults to Apify's AUTO proxy (cheaper, datacenter-first) and only escalates a domain session to residential automatically when it detects an actual block — you never need to change `proxyConfiguration` unless you want to force a specific behavior.

**What happens if a CAPTCHA/bot-check page appears?**
The actor first attempts a soft bypass (clicking the "Continue shopping" button on the simple bot-check page). If a hard image CAPTCHA is detected, that ASIN is skipped and the run continues with the next URL.

**Can I scrape by ASIN instead of a full URL?**
Yes — use the `asins` input field with bare 10-character ASINs; the actor builds the `/dp/{ASIN}` URL for you (on `amazon.com`, or the domain of the first `productUrls` entry if both are supplied).

**Why is a field missing from some records?**
Empty/null fields are dropped at push time, so the dataset only carries fields that were actually populated for a given product. Fields like `priceVariants`, `sizeChart`, and `book` only appear on products that actually carry that kind of data (a variant matrix, an apparel size chart, a book listing).

**Does `deliveryCountry`/`postalCode` always change the result?**
It's best-effort: some marketplaces don't expose a settable delivery-location UI, in which case the request still succeeds using the proxy's own default location.

**Is this affiliated with Amazon?**
No, this is a third-party actor that scrapes publicly available Amazon product pages. It is not affiliated with, endorsed by, or sponsored by Amazon.

**Is the actor compliant with Amazon's robots.txt?**
Yes. It only fetches `/dp/{ASIN}` product pages, which Amazon's `robots.txt` does not disallow for `User-agent: *`. There is no `Crawl-delay` directive on amazon.com; the actor paces requests via the `rateLimitDelay` input.

### More Amazon Actors

Part of a full Amazon scraper suite — also check out:

- [Amazon Category Scraper](https://apify.com/crawlerbros/amazon-scraper)
- [Amazon Best Sellers & Rankings Scraper](https://apify.com/crawlerbros/amazon-bestseller-scraper)
- [Amazon Reviews Scraper](https://apify.com/crawlerbros/amazon-reviews-scraper)
- [Amazon Reviews Scraper Pro](https://apify.com/crawlerbros/amazon-reviews-scraper-pro)
- [Amazon Offers Scraper (All Offers Display)](https://apify.com/crawlerbros/amazon-offers-scraper)
- [Amazon Seller & Shop Scraper](https://apify.com/crawlerbros/amazon-seller-shop-scraper)
- [Amazon Deals Scraper](https://apify.com/crawlerbros/amazon-deals-scraper)
- [Amazon Brand Store Scraper](https://apify.com/crawlerbros/amazon-brand-store-scraper)
- [Amazon Creator Shop Scraper](https://apify.com/crawlerbros/amazon-creator-shop-scraper)
- [Amazon Wishlist & Registry Scraper](https://apify.com/crawlerbros/amazon-list-registry-scraper)
- [Amazon Keyword Suggestions Scraper](https://apify.com/crawlerbros/amazon-keyword-suggestions-scraper)

# Actor input Schema

## `productUrls` (type: `array`):

List of Amazon product URLs to scrape. Use direct product URLs (e.g., amazon.com/dp/ASIN). Supports multiple Amazon domains (amazon.com, amazon.co.uk, amazon.de, etc.)

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

List of bare Amazon ASINs (10-character product IDs) to scrape, as an alternative/addition to productUrls. Builds /dp/{ASIN} URLs on amazon.com (or the first productUrls domain, if provided).

## `deliveryCountry` (type: `string`):

Best-effort delivery country to set before scraping (used together with postalCode). Affects buy-box availability/price for some products.

## `postalCode` (type: `string`):

Best-effort ZIP/postal code to set as the delivery destination before scraping.

## `includeRelatedProducts` (type: `boolean`):

Include a best-effort relatedProducts\[] array (Frequently Bought Together / From the Brand / Similar Brands) on each record.

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

Apify Proxy configuration. Defaults to AUTO (datacenter-first); the actor automatically escalates to a residential proxy for a domain session if it detects a block, so most users never need to change this.

## `proxyCountry` (type: `string`):

Proxy country for geo-targeting. Use AUTO to automatically select based on Amazon domain.

## `rateLimitDelay` (type: `integer`):

Delay between requests in seconds to avoid rate limiting

## Actor input object example

```json
{
  "productUrls": [
    "https://www.amazon.com/dp/B07ZPKBL9V",
    "https://www.amazon.com/dp/B08H75RTZ8"
  ],
  "asins": [
    "B09X7MPX8L",
    "B08H75RTZ8"
  ],
  "includeRelatedProducts": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "proxyCountry": "AUTO",
  "rateLimitDelay": 2
}
```

# Actor output Schema

## `products` (type: `string`):

Dataset containing all scraped Amazon product records.

# 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 = {
    "productUrls": [
        "https://www.amazon.com/dp/B09X7MPX8L",
        "https://www.amazon.com/dp/B08H75RTZ8"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/amazon-product-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 = {
    "productUrls": [
        "https://www.amazon.com/dp/B09X7MPX8L",
        "https://www.amazon.com/dp/B08H75RTZ8",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/amazon-product-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 '{
  "productUrls": [
    "https://www.amazon.com/dp/B09X7MPX8L",
    "https://www.amazon.com/dp/B08H75RTZ8"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call crawlerbros/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/lUqaT7BpumByHXbvx/builds/Ukp3MIKhve6QNSoMW/openapi.json
