# Amazon Best Sellers Tracker: Rank Changes, 21 Marketplaces (`fayoussef/amazon-bestsellers-tracker`) Actor

Track Amazon Best Sellers and New Releases ranks 1-100 in 21 marketplaces (US, UK, DE, FR, JP, IN, BR and more). Each run shows what moved up, moved down, entered or dropped off the chart, with prices, price changes, ratings and reviews. Proxies included on paid plans.

- **URL**: https://apify.com/fayoussef/amazon-bestsellers-tracker.md
- **Developed by:** [Youssef Farhan](https://apify.com/fayoussef) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.25 / 1,000 chart 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

### What does Amazon Best Sellers Tracker do?

**Amazon Best Sellers Tracker scrapes the Amazon Best Sellers and New Releases charts, ranks 1 to 100, in 21 Amazon marketplaces, and tells you what changed since your last run.** Every product comes with its **rank, movement (new, up, down, dropped off), previous rank, price, price change, rating, review count, image and ASIN**.

Amazon's own Movers & Shakers chart is currently empty in every marketplace. Schedule this Actor daily or hourly and it builds **your own movers & shakers**: which products climbed, which fell, which just entered the top 100 and which left it.

It runs on the Apify platform, so you get an API, scheduling, webhooks, integrations (Google Sheets, Slack, Zapier, Make) and proxies included on paid plans.

### Why track Amazon Best Sellers?

- **Product research for Amazon sellers and FBA**: spot products climbing the charts before they peak, in any department.
- **Competitor monitoring**: see the day a rival's product enters, jumps or drops out of the top 100.
- **New product discovery**: New Releases plus a `new` movement flag shows what just launched and is already selling.
- **Price tracking on top sellers**: every row carries the price and the change since the last run.
- **Cross-border research**: compare the same department in the US, UK, Germany, Japan, India, Brazil and 15 more marketplaces.
- **Brand and agency reporting**: one watchlist per client, with history that never mixes.

### How to track Amazon Best Sellers

1. Open the **Input** tab.
2. Paste one or more chart URLs, for example `https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics`, **or** pick marketplaces, charts and departments.
3. Keep **Track rank changes** on and give the watchlist a name.
4. Click **Start**. The first run saves a baseline.
5. Add a **schedule** (daily is a good start). Every later run shows movement against the previous one.

### Supported Amazon marketplaces

amazon.com (US), amazon.co.uk, amazon.de, amazon.fr, amazon.it, amazon.es, amazon.ca, amazon.co.jp, amazon.com.au, amazon.in, amazon.com.mx, amazon.com.br, amazon.nl, amazon.se, amazon.pl, amazon.com.tr, amazon.ae, amazon.sa, amazon.sg, amazon.com.be and amazon.eg. Prices come in each marketplace's own currency.

### Input

| Field | What it does |
| --- | --- |
| Chart URLs | Best Sellers or New Releases pages, department or sub-category level. A chart front page tracks every department. |
| Marketplaces | Or pick marketplaces; combined with Charts and Departments. |
| Charts | Best Sellers, New Releases, or both. |
| Departments | Optional slugs such as `electronics`, `kitchen`, `toys-and-games`. Slugs differ per marketplace; a wrong one is reported with suggestions. |
| Include sub-categories | Also track the sub-categories listed on each department page. |
| Max categories | Upper limit on categories per run. |
| Max rank | Ranks 1 to this number (up to 100). |
| Track rank changes | Compare with the previous run of the same watchlist. |
| Watchlist name | Keeps separate histories for separate schedules. |
| Include products that dropped off | Adds a `dropped` row for products that left the chart. |
| Only output changes | Outputs only new, up, down and dropped products. Made for alerts. |

```json
{
    "marketplaces": ["com", "co.uk", "de"],
    "charts": ["bestsellers", "new-releases"],
    "categories": ["kitchen", "electronics"],
    "maxRank": 100,
    "trackChanges": true,
    "watchlistName": "kitchen-electronics-eu-us"
}
```

### Output

One row per product per chart category, plus one row per product that dropped off. Download as JSON, CSV, Excel, XML or HTML, or read it through the API.

```json
{
    "rank": 1,
    "movement": "up",
    "previousRank": 5,
    "rankChange": 4,
    "asin": "B08JHCVHTY",
    "title": "Blink Plus Plan with monthly auto-renewal",
    "price": "$11.99",
    "priceValue": 11.99,
    "currency": "USD",
    "previousPrice": 11.99,
    "priceChange": 0,
    "rating": 4.4,
    "reviewCount": 281333,
    "imageUrl": "https://images-na.ssl-images-amazon.com/images/I/31YHGbJsldL.png",
    "productUrl": "https://www.amazon.com/dp/B08JHCVHTY",
    "chart": "bestsellers",
    "chartName": "Best Sellers",
    "marketplace": "amazon.com",
    "country": "United States",
    "categorySlug": "electronics",
    "categoryName": "Best Sellers in Electronics",
    "categoryUrl": "https://www.amazon.com/gp/bestsellers/electronics",
    "firstSeenAt": "2026-10-21T19:19:13Z",
    "runsOnChart": 2,
    "scrapedAt": "2026-10-22T08:00:02Z"
}
```

### Data fields

| Field | Description |
| --- | --- |
| `rank` | Position on the chart (empty for `dropped` rows) |
| `movement` | `baseline` (first run), `new`, `up`, `down`, `same` or `dropped` |
| `previousRank`, `rankChange` | Rank last run, and places gained (positive) or lost (negative) |
| `asin`, `title`, `productUrl`, `imageUrl` | Product identity, full-size image |
| `price`, `priceValue`, `currency` | Price as shown, as a number, ISO currency |
| `previousPrice`, `priceChange` | Price last run and the difference |
| `rating`, `reviewCount` | Star rating and number of ratings |
| `chart`, `marketplace`, `categoryName`, `categorySlug`, `categoryNode` | Where the product ranks |
| `firstSeenAt`, `runsOnChart` | When this watchlist first saw it on the chart, and for how many runs |

The **Movers** view in the Output tab sorts the change fields up front.

### How much does it cost to track Amazon Best Sellers?

The Actor is **pay per result**: you pay for each row in the dataset (products on the chart, plus dropped-off rows if you keep them on). The current rate is shown on this Actor's Store page. Proxies are included on paid Apify plans, so there is no proxy bill on top.

To spend less: lower **Max rank** (the top 20 is often enough), turn on **Only output changes** for alert schedules, or turn off dropped-off rows.

On the free Apify plan a run tracks up to 2 chart categories. An [Apify plan](https://apify.com/pricing?fpr=youssef) lifts that to hundreds per run.

### Tips

- **One watchlist per purpose.** History is per watchlist name and per category, so a daily schedule and an hourly one should use different names.
- **The first run of a watchlist is a baseline.** Movement appears from the second run on.
- **Hourly is the finest useful schedule.** Amazon refreshes Best Sellers about once an hour.
- **Department slugs differ.** amazon.com uses `toys-and-games`, amazon.de and amazon.in use `toys`. A wrong slug is skipped with a "did you mean" hint in the log.
- **Use it from an AI agent.** Call this Actor through the Apify MCP server or API to answer questions like "what entered the top 100 in kitchen on amazon.de this week?".

### FAQ

#### Is there an Amazon Best Sellers API?

Amazon does not offer a public Best Sellers API. This Actor works as one: call it through the Apify API and get JSON back, or schedule it and read the latest dataset.

#### Why is Movers & Shakers not an option?

Amazon currently shows "no movers and shakers available" in every marketplace. This Actor computes movement itself from your own run history, which also covers New Releases and any sub-category.

#### Can I track a single sub-category?

Yes. Paste its chart URL, for example `https://www.amazon.com/Best-Sellers-Electronics-Computer-Monitors/zgbs/electronics/1292115011`.

#### Is scraping Amazon Best Sellers legal?

The Actor reads public chart pages that anyone can open without logging in, and collects no personal data. You are responsible for how you use the data; check Amazon's terms and the laws that apply to you.

#### Some rows have no rating or price. Why?

Brand-new products often have no reviews yet (common in New Releases), and an item out of stock shows no price. The Actor leaves those fields empty rather than guessing.

### Support

Found a bug or a missing field? Open an issue in the **Issues** tab and it gets fixed. 💼 Need a custom version or another site? [Contact me through my Apify profile](https://apify.com/fayoussef).

# Actor input Schema

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

Paste Amazon Best Sellers or New Releases pages from any of the 21 supported marketplaces, for example https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics or https://www.amazon.de/gp/new-releases/kitchen. A chart's front page (https://www.amazon.com/gp/bestsellers) tracks every department. Leave empty to use the marketplace picker below.

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

Or pick marketplaces, and the actor tracks the charts below in each of them. Combine with Departments to limit the scope, or leave Departments empty to track every department (up to Max categories).

## `charts` (type: `array`):

Which charts to track for the picked marketplaces. Movers & Shakers is not offered because Amazon currently shows it empty everywhere; this actor computes its own movers from run-to-run rank changes instead.

## `categories` (type: `array`):

Optional department slugs as they appear in Amazon's chart URLs, for example electronics, kitchen, toys-and-games, beauty. Slugs differ between marketplaces (amazon.com uses toys-and-games, amazon.de uses toys). Leave empty to track every department.

## `includeSubcategories` (type: `boolean`):

Also track the sub-categories listed on each department's chart page (for example Electronics > Headphones). Counts toward Max categories.

## `maxCategories` (type: `integer`):

Upper limit on chart categories tracked in one run. Each category returns up to 100 products.

## `maxRank` (type: `integer`):

Track ranks 1 to this number in each category. Amazon charts go to 100.

## `trackChanges` (type: `boolean`):

Compare every run with the previous run of the same watchlist: each product gets movement (new, up, down, same), previous rank, rank change and price change. The first run saves a baseline. Schedule the actor daily or hourly to get your own movers & shakers.

## `watchlistName` (type: `string`):

History is kept per watchlist name, so separate schedules (for example one per client) do not mix their history. Use the same name on every run you want compared.

## `includeDropped` (type: `boolean`):

Add a row (movement: dropped) for each product that was on the chart last run and is gone now.

## `onlyMovers` (type: `boolean`):

Output only products that are new, moved up, moved down or dropped off since the last run. Fewer rows, made for alerts. The first run of a watchlist outputs nothing in this mode, it only saves the baseline.

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

How many categories load at the same time.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics"
    }
  ],
  "charts": [
    "bestsellers"
  ],
  "includeSubcategories": false,
  "maxCategories": 5,
  "maxRank": 100,
  "trackChanges": true,
  "watchlistName": "default",
  "includeDropped": true,
  "onlyMovers": false,
  "maxConcurrency": 8
}
```

# Actor output Schema

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

Every tracked product with rank, movement since the last run, price, rating, reviews and category.

## `resumeState` (type: `string`):

Progress checkpoint that lets an interrupted or migrated run continue where it stopped.

# 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": [
        {
            "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics"
        }
    ],
    "maxCategories": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/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": [{ "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics" }],
    "maxCategories": 5,
}

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

```

## MCP server setup

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