# Amazon Best Sellers Scraper - 17 Marketplaces (`zet46/amazon-best-sellers-scraper`) Actor

Amazon Best Sellers + New Releases across 17 marketplaces (US, UK, DE, FR, ES, IT, NL, PL, SE, MX, BR, CA, AU, IN, JP, SG, AE, TR) and 10k+ sub-categories. Returns rank, title, ASIN, price, rating, reviews, image. Use when an agent needs top-selling products in a category or country.

- **URL**: https://apify.com/zet46/amazon-best-sellers-scraper.md
- **Developed by:** [An Tan Huynh](https://apify.com/zet46) (community)
- **Categories:** E-commerce, AI, MCP servers
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 best-seller scrapeds

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 Best Sellers Scraper — 17 Marketplaces, Best Sellers + New Releases

Scrape the **Best Sellers** and **New Releases** (Hot New Releases) charts on Amazon — in **17 marketplaces** (US, UK, DE, FR, ES, IT, NL, PL, SE, MX, BR, CA, AU, IN, JP, SG, AE, TR). No API key, no login, no proxy configuration.

**$1 per 1,000 products scraped.** Pay only for products that end up in your dataset.

### What you get

For each product, one dataset item with:

| Field | Example | Notes |
|---|---|---|
| `marketplace` | `"co.uk"` | Amazon marketplace TLD |
| `listType` | `"bestsellers"` | Which chart (see below) |
| `rank` | `1` | Rank within the chart |
| `asin` | `B0G36TDT1W` | 10-char Amazon ID (ISBN-10 for books) |
| `title` | `Apple AirTag (2nd Generation)...` | Full product title |
| `url` | `https://www.amazon.co.uk/.../dp/B0G36TDT1W/...` | Canonical product URL on that marketplace |
| `image` | `https://images-na.ssl-images-amazon.com/...jpg` | Primary product image |
| `rating` | `4.3` | Average customer rating out of 5 |
| `reviewsCount` | `1214` | Total number of ratings |
| `price` | `22.38` | Parsed as a float using the marketplace locale |
| `priceText` | `"£18.99"` | Raw price string as shown on the listing |
| `currency` | `"GBP"` | ISO currency code of this marketplace |
| `byline` | `"Sarah J. Maas"` | Author (books) or brand byline |
| `format` | `"Hardcover"` | Format label for books/media |
| `categorySlug` | `"books"` | The slug you requested |
| `categoryName` | `"Books"` | Human-readable category name from the page |
| `scrapedAt` | `"2026-10-15T15:10:21+00:00"` | UTC timestamp |

### The charts

Set `listType` to pick which Amazon chart to pull:

- `bestsellers` (default) — top sellers over the last 24 hours
- `new-releases` — Hot New Releases (newest launches climbing the chart)

> Why not Movers & Shakers / Most Wished For / Gift Ideas? Amazon currently serves those three charts empty from datacenter IPs (`data-client-recs-list=""`). They need residential-IP routing, which the author is still cost-benchmarking before adding. If you need those three today, open an issue and we'll prioritise the proxy mode.

### The 17 marketplaces

| Code | Country | Currency |
|---|---|---|
| `com` | United States | USD |
| `co.uk` | United Kingdom | GBP |
| `ca` | Canada | CAD |
| `com.au` | Australia | AUD |
| `in` | India | INR |
| `sg` | Singapore | SGD |
| `ae` | United Arab Emirates | AED |
| `de` | Germany | EUR |
| `fr` | France | EUR |
| `es` | Spain | EUR |
| `it` | Italy | EUR |
| `nl` | Netherlands | EUR |
| `pl` | Poland | PLN |
| `se` | Sweden | SEK |
| `com.mx` | Mexico | MXN |
| `com.br` | Brazil | BRL |
| `com.tr` | Turkey | TRY |
| `co.jp` | Japan | JPY |

### Example inputs

**US best sellers in Electronics + Toys:**

```json
{
  "marketplace": "com",
  "listType": "bestsellers",
  "categorySlugs": ["electronics", "toys-and-games"],
  "maxItemsPerCategory": 100
}
```

**UK New Releases in Beauty:**

```json
{
  "marketplace": "co.uk",
  "listType": "new-releases",
  "categorySlugs": ["beauty"]
}
```

**Mix marketplaces and list types by pasting URLs** — the marketplace, chart AND sub-category are detected per URL:

```json
{
  "categoryUrls": [
    "https://www.amazon.com/gp/bestsellers/electronics",
    "https://www.amazon.co.uk/gp/new-releases/beauty",
    "https://www.amazon.de/gp/bestsellers/computers",
    "https://www.amazon.co.jp/gp/bestsellers/books",
    "https://www.amazon.fr/gp/new-releases/jouets"
  ]
}
```

**Sub-categories (10k+ browse nodes)** — drill into any sub-category by appending its browse-node id to the slug (or paste the full URL). Amazon exposes a bestsellers chart for every browse node it ships:

```json
{
  "categoryUrls": [
    "https://www.amazon.com/gp/bestsellers/electronics/172541",
    "https://www.amazon.com/gp/bestsellers/electronics/172456",
    "https://www.amazon.co.uk/gp/bestsellers/electronics/560834"
  ]
}
```

Resolves to Best Headphones & Earbuds, Best Computer Accessories & Peripherals, and Best Camera & Photo (UK). You can also pass sub-category slugs directly:

```json
{
  "marketplace": "com",
  "categorySlugs": ["electronics/172541", "books/16190"]
}
```

#### Example output row (book)

```json
{
  "marketplace": "com",
  "listType": "bestsellers",
  "categorySlug": "books",
  "categoryName": "Books",
  "rank": 1,
  "asin": "1639739130",
  "title": "A Court of Splintered Harmony: The Valkyrie Cycle, Movement I",
  "url": "https://www.amazon.com/Court-Splintered-Harmony-Thorns-Roses/dp/1639739130/...",
  "image": "https://images-na.ssl-images-amazon.com/images/I/813aoHWrPqL._AC_UL300_SR300,200_.jpg",
  "price": 22.38,
  "priceText": "$22.38",
  "currency": "USD",
  "byline": "Sarah J. Maas",
  "format": "Hardcover"
}
```

### Common category slugs

Amazon slugs often match across marketplaces, but not always — `electronics` works everywhere, while `beauty` on amazon.de is `beauty` but Toys is `spielzeug`. The reliable way is to open any `amazon.<tld>/gp/bestsellers/<slug>` URL in your browser and copy the slug (or paste the full URL).

US/UK common slugs: `electronics`, `books`, `toys-and-games`, `home-garden`, `wireless` (cell phones), `office-products`, `pet-supplies`, `beauty`, `automotive`, `videogames`, `appliances`, `arts-crafts-sewing`, `baby-products`, `camera-photo`, `computers`, `fashion`, `grocery`, `handmade`, `health-personal-care`, `industrial`, `jewelry`, `kitchen`, `lawn-garden`, `movies-tv`, `music`, `musical-instruments`, `shoes`, `software`, `sporting-goods`, `tools`, `watches`.

For sub-categories, drill in on Amazon's own best-sellers tree (left sidebar) and copy the full URL. Every browse node has its own chart, e.g. `electronics/172541` = Headphones & Earbuds, `electronics/172456` = Computer Accessories, `books/27` = Travel, `books/16190` = Business & Money.

### Filtering

Only pay for products you want:

- `minRating` — e.g. `4.5` keeps only 4.5-star+ items. Items without a rating are also skipped.
- `minReviews` — e.g. `100` keeps items with at least 100 ratings.
- `maxItemsPerCategory` — stop at this many items (max 100).
- `pagesPerCategory` — each page has 30 items. Default 2 pages (= top 60).

Skipped items are not charged.

### Pricing

$0.001 per item returned. Running the example above (3 categories × 100 items = 300 products) costs **$0.30**.

### Use cases

- **Trend research** — Track what's selling across US, UK, DE, FR etc. in your category.
- **Competitor monitoring** — Watch the top 100 ASINs daily per country; alert when a competitor enters or leaves.
- **Hot-new feed** — Pull `new-releases` + `movers-and-shakers` once a day and feed them to a shopping assistant.
- **Catalog seeding** — Export top 100 ASINs per (country, category) and feed them into another scraper for prices, offers, reviews.
- **AI/LLM apps** — Listed under the MCP Servers category so AI agents can call it directly.
- **Books** — Daily top 100 charts, with author (byline), format (Hardcover / Paperback / Kindle Edition) and listing price.

### How it works

- Fetches the public Amazon listing page for your (marketplace, chart, category, page).
- Parses rank, ASIN, title, URL, image, rating, review count, byline, format, and (when shown) the listing price in both float and raw-text forms.
- Price parsing is locale-aware (`.` vs `,` decimal separator).
- Review and rating patterns cover the UI language of each marketplace.
- Three fallback layers: direct Apify IP → datacenter proxy → residential proxy (country-matched). Only used when the previous layer was blocked, so most runs stay on the cheapest path.
- Slug remap for stores where the standard slug differs: `electronics` on amazon.de resolves to `ce-de` automatically.
- Stops at `maxItemsPerCategory` items per target.

### Python examples and daily tracking

A companion repo on GitHub — [huynhtanan/amazon-bestsellers-tracker](https://github.com/huynhtanan/amazon-bestsellers-tracker) — ships three example scripts you can run directly against this actor via `apify-client`:

- `top_sellers.py` — pull current top-50 of any category and print a sortable table
- `compare_markets.py` — pull the same category across 4 marketplaces and spot cross-market overlaps
- `track_rank.py` — ~90-line script that writes daily snapshots into SQLite and emits SQL to spot climbers/droppers

Full walkthrough with sample output, Apify Scheduler setup and a $0.0X/month cost sketch: [Track Amazon Best Sellers in 17 country stores with Python](https://dev.to/huynhtanan/track-amazon-best-sellers-in-17-country-stores-with-python-odm).

### Related actors by the same author

- [Google Hotels Scraper](https://apify.com/zet46/google-hotels-scraper) — $2 per 1,000 hotels with OTA rates
- [Google Hotels Price Calendar](https://apify.com/zet46/google-hotels-price-calendar) — $1.50 per 1,000 nightly prices
- [Google Vacation Rentals](https://apify.com/zet46/google-vacation-rentals-scraper) — $2 per 1,000 vacation rentals

### Limitations

- Listing-page price only; most non-book categories hide the price on the listing. For prices on everything, pipe the ASINs into an Amazon product scraper.
- Category slugs are marketplace-specific — amazon.de's "Toys" slug is `spielzeug`, not `toys-and-games`. Use `categoryUrls` and paste the URL from your browser if you aren't sure.
- Review count regex covers 15 UI languages; a few uncommon marketplaces may leave `reviewsCount` null — ratings and rank are always set.

# Actor input Schema

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

Amazon country domain. Default amazon.com (US). Full list: com, co.uk, de, fr, es, it, nl, pl, se, com.mx, com.br, ca, com.au, in, co.jp, sg, ae, com.tr. Overridden per URL when you paste a full URL in 'categoryUrls'.

## `listType` (type: `string`):

Which Amazon chart to pull. Best Sellers (default, top sellers in the last 24 hours) or New Releases (Hot New Releases).

## `categorySlugs` (type: `array`):

Amazon category slugs. Top-level: 'electronics', 'books', 'toys-and-games', 'home-garden', 'wireless', 'office-products', 'pet-supplies', 'beauty', 'automotive', 'videogames', ... Sub-category: append the browse-node id ('electronics/172456' = Computer Accessories, 'electronics/172541' = Headphones & Earbuds). Grab the exact slug from any amazon.<tld>/gp/bestsellers/... URL. Slugs can differ per marketplace (e.g. amazon.de uses 'elektronik').

## `categoryUrls` (type: `array`):

Full URLs like https://www.amazon.co.uk/gp/bestsellers/electronics, https://www.amazon.com/gp/bestsellers/electronics/172541 (Headphones sub-category) or https://www.amazon.de/gp/new-releases/buecher. The marketplace, list type AND sub-category id are detected per-URL and override the top-level fields. Only /gp/bestsellers/ and /gp/new-releases/ paths are supported.

## `maxItemsPerCategory` (type: `integer`):

Each page has 30 items; up to 100 items total per target.

## `pagesPerCategory` (type: `integer`):

How many listing pages to fetch per target. Page 1 = ranks 1-30, page 2 = 31-60, etc. Up to 10.

## `minRating` (type: `number`):

Skip (and don't charge for) items with fewer stars. Items without a rating are also skipped if this is set.

## `minReviews` (type: `integer`):

Skip (and don't charge for) items with fewer reviews. Items without a review count are also skipped if this is set.

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

Apify Proxy is used only if a request fails without proxy. You usually don't need to change this.

## Actor input object example

```json
{
  "marketplace": "com",
  "listType": "bestsellers",
  "categorySlugs": [
    "electronics",
    "toys-and-games"
  ],
  "maxItemsPerCategory": 100,
  "pagesPerCategory": 2,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `bestSellers` (type: `string`):

All scraped best-sellers as JSON items (one item per product).

## `bestSellersCsv` (type: `string`):

The same best-sellers as a CSV file.

# 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 = {
    "categorySlugs": [
        "electronics",
        "toys-and-games"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zet46/amazon-best-sellers-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 = {
    "categorySlugs": [
        "electronics",
        "toys-and-games",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("zet46/amazon-best-sellers-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 '{
  "categorySlugs": [
    "electronics",
    "toys-and-games"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call zet46/amazon-best-sellers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zet46/amazon-best-sellers-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/JUKhGcUjdwn3QYOk5/builds/tJkt6ZuxlVbBtrEA6/openapi.json
