# Amazon Best Sellers Scraper & Bestsellers Tracker (`rastriq/amazon-bestsellers-tracker`) Actor

Amazon Best Sellers and bestsellers scraper: top-100 Best Sellers and New Releases (plus Movers & Shakers, Most Wished For, Gift Ideas) in 21 marketplaces and every subcategory, with rank changes, new entries, dropped products and review growth between runs.

- **URL**: https://apify.com/rastriq/amazon-bestsellers-tracker.md
- **Developed by:** [Rastriq — Structured data from the world](https://apify.com/rastriq) (community)
- **Categories:** E-commerce, Marketing
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.90 / 1,000 products

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?

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 & Bestsellers Tracker — top-100 rankings, new entries & trends in 21 marketplaces

**Amazon Best Sellers Scraper & Bestsellers Tracker** is an Amazon Best Sellers scraper that turns Amazon's public ranking lists into a clean, comparable dataset: the **top 100 products of any category** in **Best Sellers** and **New Releases** (plus **Movers & Shakers**, **Most Wished For** and **Gift Ideas** whenever Amazon publishes them), across **21 Amazon marketplaces** and the **whole category tree**.

What makes this Amazon bestsellers tracker different: every row can carry a **trend signal**. Schedule the same input daily or weekly and each product comes back with its **previous rank, rank change, "new entry" flag, days in the list, best rank ever, price change and reviews gained since the last run** — the raw material for spotting rising products, new competitors and category shifts before they show up in reports.

No Amazon account, no API keys, no browser. Paste a list URL, click **Start**, and export to JSON, CSV, Excel or Google Sheets. The default example returns the **top 10 Amazon Best Sellers in Electronics** in a few seconds (8 s in our last test run).

### 📈 What can you do with the Amazon Best Sellers Scraper?

- 🚀 **Spot rising products early** — `trendSignal: rising` and `rankChange` show who is climbing; `reviewsGained` approximates sales velocity.
- 🆕 **Catch new competitors** — `isNewEntry` flags products that entered a top-100 since the last run; optional `dropped` rows tell you who fell out.
- 🧭 **Map a category** — crawl a department and its subcategories (`subcategoryDepth`) to see price bands, ratings and leaders per niche.
- 🌍 **Compare countries** — the same category in amazon.com, .co.uk, .de, .fr, .es, .it, .co.jp… in one run, one schema.
- 💡 **Product research & sourcing** — New Releases + review growth = demand signals for what to sell or stock next.
- 📊 **Feed dashboards** — a per-list **market summary** (median price, average rating, new entries, top risers) is saved with every run, free.

### 📊 What data does the Amazon Best Sellers Scraper extract?

| | Fields |
|---|---|
| 🏆 **Ranking** | `rank`, `listType`, `listName`, `marketplace`, `domain` |
| 🗂️ **Category** | `categoryName`, `categoryPath` (e.g. `Electronics > Headphones`), `categoryId` (browse node), `categoryUrl`, `depth` |
| 🏷️ **Product** | `asin`, `title`, `url` (clean `/dp/` link), `image` (largest available), `subtitle` (format, e.g. Paperback) |
| 💶 **Price** | `price`, `priceMax` (variant ranges), `currency` (ISO), `priceType` (`featured` / `offers_from` / `hidden`), `offersCount` |
| ⭐ **Reviews** | `rating`, `reviewsCount` |
| 🚀 **Movers & Shakers** | `salesRank`, `salesRankPrevious` (24 h ago), `salesRankChangePercent` |
| 📈 **Trends** | `trendSignal` (`first_run` / `new_entry` / `rising` / `stable` / `falling` / `dropped_out`), `previousRank`, `rankChange`, `isNewEntry`, `firstSeenAt`, `timesSeen`, `bestRank`, `previousPrice`, `priceChangePercent`, `reviewsGained`, `previousScrapedAt` |
| 🧾 **Quality** | `recordType` (`ranking` / `dropped`), `detailLevel` (`full` / `rank_only`), `scrapedAt` |

Missing values come back as `null` — products are never filtered out or invented. If Amazon fails to deliver the details of a position after several retries, the row is still saved with its rank and ASIN and marked `detailLevel: rank_only`.

### 🚀 How to scrape Amazon Best Sellers

1. Open **Amazon Best Sellers Scraper & Bestsellers Tracker** in Apify Console and paste one or more **Amazon list URLs** — any marketplace, any list type, mixed freely. Or pick **whole marketplaces** and the **list types** you want.
2. Choose how many **products per list** (up to 100) and how deep to go into **subcategories**.
3. Click **Start**. Download the results or connect them via API, Make, Zapier or webhooks.
4. **For trends:** save the input as a **Task** and add a **Schedule** (daily is ideal for Best Sellers, weekly for slower categories). From the second run on, every row carries its movement.
5. **For alerts:** turn on **Output only changes** — each run then saves only new entries, climbers and fallers. Stable products are skipped and **not charged**, while the history keeps tracking the full list.

#### Accepted URLs

```
https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/
https://www.amazon.com/gp/bestsellers/electronics/172541/
https://www.amazon.de/gp/new-releases/books/
https://www.amazon.co.uk/gp/movers-and-shakers/kitchen/
https://www.amazon.es/gp/most-wished-for/toys/
https://www.amazon.fr/gp/most-gifted/books/
https://www.amazon.com/gp/bestsellers/          ← every department
```

#### Supported marketplaces

🇺🇸 amazon.com · 🇬🇧 amazon.co.uk · 🇩🇪 amazon.de · 🇫🇷 amazon.fr · 🇪🇸 amazon.es · 🇮🇹 amazon.it · 🇳🇱 amazon.nl · 🇧🇪 amazon.com.be · 🇸🇪 amazon.se · 🇵🇱 amazon.pl · 🇮🇪 amazon.ie · 🇨🇦 amazon.ca · 🇲🇽 amazon.com.mx · 🇧🇷 amazon.com.br · 🇯🇵 amazon.co.jp · 🇮🇳 amazon.in · 🇦🇺 amazon.com.au · 🇦🇪 amazon.ae · 🇸🇦 amazon.sa · 🇸🇬 amazon.sg · 🇹🇷 amazon.com.tr

> ℹ️ **About Movers & Shakers, Most Wished For and Gift Ideas:** in October 2026 Amazon shows these lists empty in most categories ("no movers and shakers available"), even for signed-in shoppers. The Actor supports them and returns data the moment Amazon publishes it; empty lists are reported in the log and the market summary and **cost nothing**.

### ⚙️ Input parameters

| Parameter | Description | Default |
|---|---|---|
| `startUrls` | Amazon list URLs (any marketplace / list type). Console example: Electronics Best Sellers on amazon.com | — |
| `marketplaces` | Scrape the top list of every department in these marketplaces | — |
| `listTypes` | Lists to scrape for `marketplaces`: `best_sellers`, `new_releases`, `movers_and_shakers`, `most_wished_for`, `gift_ideas` | `best_sellers` |
| `subcategoryDepth` | 0 = only the given lists; 1 = plus direct subcategories; … (each level ≈ 10-20× more lists) | `0` |
| `maxItemsPerList` | Products per list (Amazon ranks up to 100). Console example: 10 | `100` |
| `maxLists` | Cap on category lists per run, shared fairly between inputs. Results ≈ lists × products per list | `20` |
| `maxItems` | Optional cap on rows saved (and charged) per run | — |
| `trackTrends` | Add trend fields by comparing with the previous run | `true` |
| `trendStoreName` | History name: key-value store in **your** account (one per tracked project) | `amazon-bestsellers-history` |
| `onlyChanges` | Save only new entries, climbers and fallers (stable products are free); first run saves all | `false` |
| `includeDroppedProducts` | Add a row for each product that left a list since last run | `false` |
| `proxyConfiguration` | Apify Proxy settings | datacenter |
| `residentialFallback` | Only if a marketplace keeps blocking: switch it to local residential IPs | `true` |
| `maxConcurrency` | Parallel requests | `5` |

```json
{
  "startUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
    "https://www.amazon.de/gp/new-releases/kitchen/"
  ],
  "subcategoryDepth": 1,
  "maxItemsPerList": 100,
  "maxLists": 40,
  "trackTrends": true,
  "onlyChanges": false
}
```

### 📦 Output example

A row from amazon.es (first run, subcategory at depth 1):

```json
{
  "recordType": "ranking",
  "marketplace": "ES",
  "domain": "amazon.es",
  "listType": "best_sellers",
  "listName": "Best Sellers",
  "categoryId": "970144031",
  "categoryName": "Accesorios de alimentación",
  "categoryPath": "Electrónica > Accesorios de alimentación",
  "categoryUrl": "https://www.amazon.es/gp/bestsellers/electronics/970144031/",
  "depth": 1,
  "rank": 3,
  "asin": "B0D95S3MVQ",
  "title": "decqle Adaptador Enchufe Universal con 2 USB-C(PD 20W) ＆ 1 USB-A para Viaje | Adaptador de Viaje…",
  "url": "https://www.amazon.es/dp/B0D95S3MVQ",
  "image": "https://images-eu.ssl-images-amazon.com/images/I/61jD5viM+AL._AC_UL900_SR900,600_.jpg",
  "price": 15.99,
  "priceMax": null,
  "currency": "EUR",
  "priceType": "featured",
  "offersCount": null,
  "rating": 4.7,
  "reviewsCount": 3928,
  "detailLevel": "full",
  "trendSignal": "first_run",
  "scrapedAt": "2026-10-25T15:32:10.505Z"
}
```

From the second run on, the same row also carries its movement (example values):

```json
{
  "rank": 3,
  "trendSignal": "rising",
  "previousRank": 11,
  "rankChange": 8,
  "isNewEntry": false,
  "firstSeenAt": "2026-10-18T07:00:12.000Z",
  "timesSeen": 8,
  "bestRank": 3,
  "previousPrice": 17.99,
  "priceChangePercent": -11.12,
  "reviewsGained": 41,
  "previousScrapedAt": "2026-10-24T07:00:09.000Z"
}
```

`rankChange` is positive when a product **climbs** (11 → 3 = +8). On the first run every row is `first_run` and the trend fields are empty.

#### Market summary

Each run also saves `MARKET_SUMMARY` in its key-value store (free): one entry per list with `products`, `medianPrice`, `avgRating`, `medianReviews`, `newEntries`, `rising`, `falling`, `droppedOut`, `topRisers` and `fastestReviewGrowth`.

### 💰 How much does the Amazon Best Sellers Scraper cost?

You pay **per product saved** (pay-per-event). The price per product is **$0.0035** on the Free plan, **$0.003** on Bronze, **$0.0024** on Silver and **$0.0019** on Gold and above. Empty lists, blocked pages that are retried, unchanged products skipped by **Output only changes** and the market summary are free.

Rule of thumb: **results ≈ lists × products per list**. The 10-product example costs about $0.035 on the Free plan; a full top-100 list is 100 results; a department with 20 subcategories at depth 1 is about 2,100 results. The default cap of **20 lists** keeps any run at 2,000 results or less until you raise it.

The Actor is HTTP-only (no browser), so platform usage is tiny: the 10-product example ran in about 8 seconds for roughly $0.0003 of platform usage on 512 MB.

### 🤖 Use with Claude/ChatGPT (MCP)

Call **Amazon Best Sellers Scraper & Bestsellers Tracker** from any MCP-compatible AI assistant through the Apify MCP server.

- **Hosted server:** `https://mcp.apify.com`.
- **Only this Actor:** `https://mcp.apify.com?tools=actors,rastriq/amazon-bestsellers-tracker`
- **Local client:** `npx @apify/actors-mcp-server --tools rastriq/amazon-bestsellers-tracker` with the `APIFY_TOKEN` environment variable set.

Example prompts:

- "Get the top 20 Amazon Best Sellers in Electronics on amazon.com and list price, rating and review count."
- "Scrape the New Releases in Toys & Games on amazon.com and tell me which products have the most reviews."
- "Run my Amazon bestsellers tracker on the Kitchen category of amazon.co.uk and show me which products entered the top 100 since the last run."

### ❓ FAQ

**How fresh are the rankings?** Each run captures the list exactly as Amazon shows it at that moment; schedule it daily or weekly to follow changes.

**Why are some prices `null` or `priceType: hidden`?** Some products show "Click for details" (minimum advertised price) or have no current offer. `offers_from` means there is no featured offer and the price is the lowest of `offersCount` sellers.

**Do I get local prices?** Prices are as Amazon shows them to the proxy IP. The default proxy is datacenter; the run log tells you when its IPs are not from the marketplace's country (prices may then show without local VAT). If a marketplace keeps blocking, **Residential fallback** switches that marketplace to residential IPs of its country, when your account has them.

**Why did my run return no products from some marketplace?** Amazon sometimes serves a challenge page to datacenter IPs, and the Actor does not try to solve it: the page is retried with a fresh session and, if it keeps failing, the list is skipped and costs nothing. In our latest tests amazon.com lists worked on datacenter proxy while a single amazon.de list was blocked; use a residential proxy in the **Proxy** setting for marketplaces that block.

**What happens if a run finds no results?** If a run finds no results, it ends with status FAILED and a message explaining the likely cause, so empty runs are never silent.

**Is the history shared with anyone?** No. It lives in a named key-value store in **your** Apify account (`trendStoreName`). Use different names to keep separate histories, delete the store to start fresh.

**Is it legal to scrape Amazon Best Sellers?** The Amazon Best Sellers Scraper collects publicly visible ranking data — no personal data and nothing behind a login. You are responsible for how you use the data and for complying with applicable laws and terms.

### 🔗 Related Actors

- [Amazon Product Scraper & Price Tracker](https://apify.com/rastriq/amazon-product-price-tracker) — full product pages by ASIN: price, stock, seller, Buy Box, BSR, variants and price-change alerts. Perfect next step for the ASINs this Amazon bestsellers tracker surfaces.
- [Amazon Reviews Scraper](https://apify.com/rastriq/amazon-reviews-scraper) — the reviews behind the products climbing the charts.

Questions or a marketplace not listed? Open an issue in the **Issues** tab.

# Actor input Schema

## `startUrls` (type: `array`):

Any Amazon ranking page from a supported marketplace — mix countries and list types freely. Examples:<br>• <code>https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/</code><br>• <code>https://www.amazon.de/gp/new-releases/books/</code><br>• <code>https://www.amazon.co.uk/gp/movers-and-shakers/kitchen/</code><br>• <code>https://www.amazon.es/gp/most-wished-for/toys/</code><br>A list home page (no category) scrapes the top list of <b>every department</b>.

## `marketplaces` (type: `array`):

Scrape the top list of every department (~30-45 per marketplace) in these marketplaces, for each list type selected below. Capped by <b>Max lists per run</b>. Leave empty if you only use URLs.

## `listTypes` (type: `array`):

Which Amazon lists to scrape for the marketplaces above. URLs already carry their own list type.<br>⚠️ In late 2026 Amazon shows <b>Movers & Shakers, Most Wished For and Gift Ideas</b> empty in most categories. They are supported and empty lists are free, but expect few or no rows.

## `subcategoryDepth` (type: `integer`):

0 = only the lists you entered. 1 = also their direct subcategories, 2 = two levels down, and so on.<br>⚠️ Each level multiplies the number of lists by roughly <b>10-20×</b> (every subcategory is its own top-100). Keep <b>Max lists per run</b> in mind.

## `maxItemsPerList` (type: `integer`):

Amazon ranks up to 100 products per list. The example is set to 10 for a fast first test (a few seconds); raise it to 100 for the full top-100. 50 or less needs half the requests.

## `maxLists` (type: `integer`):

Safety cap on category lists per run, shared fairly between your inputs.<br>💰 Results charged ≈ <b>lists × products per list</b> (20 lists × 100 = up to 2,000 products). Raise it when you crawl whole marketplaces or deep subcategories.

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

Optional hard cap on rows saved (and charged) in this run. Empty = no cap beyond <b>Max lists per run</b>.

## `trackTrends` (type: `boolean`):

Remembers each list in a storage of <b>your</b> account and adds to every row: previous rank, rank change, new entry, days in list, best rank, price change and reviews gained.<br>📅 Save this input as a <b>Task</b> and add a <b>Schedule</b> (daily or weekly) — trend fields fill in from the second run.

## `trendStoreName` (type: `string`):

Name of the key-value store in your account that keeps the history. Runs with the same name compare with each other; use a different name per client or project.

## `onlyChanges` (type: `boolean`):

Save only products that <b>entered</b> a list, <b>climbed</b> or <b>fell</b> (3+ positions) since the previous run. Stable products are not saved and <b>not charged</b>; the history is still updated with the full list. The first run (no history yet) saves everything. Ideal for daily alerts via webhooks, Slack, Make or Zapier.

## `includeDroppedProducts` (type: `boolean`):

Adds a row (<code>recordType: dropped</code>) for every product that was in a list last run and is gone now. Charged like any other row.

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

Datacenter proxy works for most marketplaces. Blocked pages are retried with a fresh session automatically.

## `residentialFallback` (type: `boolean`):

Only kicks in if a marketplace keeps blocking (half of recent pages): that marketplace switches to residential IPs of its country, if your account has them. Normal runs stay on datacenter.

## `maxConcurrency` (type: `integer`):

Parallel requests. 5 is gentle on Amazon and fast enough for hundreds of lists.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
  ],
  "listTypes": [
    "best_sellers"
  ],
  "subcategoryDepth": 0,
  "maxItemsPerList": 10,
  "maxLists": 20,
  "trackTrends": true,
  "trendStoreName": "amazon-bestsellers-history",
  "onlyChanges": false,
  "includeDroppedProducts": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": true,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `rankings` (type: `string`):

No description

## `trends` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "startUrls": [
        "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
    ],
    "maxItemsPerList": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rastriq/amazon-bestsellers-tracker").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 = {
    "startUrls": ["https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"],
    "maxItemsPerList": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rastriq/amazon-bestsellers-tracker").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 '{
  "startUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
  ],
  "maxItemsPerList": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rastriq/amazon-bestsellers-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rastriq/amazon-bestsellers-tracker"
        }
    }
}
```

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/Z3d7TjQHm1OLeAQdZ/builds/cnjwWAHodWTjYmqsJ/openapi.json
