# Amazon Best Sellers, New Releases & Movers Scraper (`vncntlabs/amazon-best-sellers`) Actor

Scrape Amazon Best Sellers, Hot New Releases and Movers & Shakers lists in any category on 11 marketplaces: rank, ASIN, title, price, rating, reviews and author or brand, up to 100 per list. Add full details with BSR, rank changes since the last run and subcategories. Pay per product.

- **URL**: https://apify.com/vncntlabs/amazon-best-sellers.md
- **Developed by:** [VNCNT Labs](https://apify.com/vncntlabs) (community)
- **Categories:** E-commerce, Lead generation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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, New Releases & Movers Scraper

Get Amazon's **Best Sellers**, **Hot New Releases** and **Movers & Shakers** charts for any category on **11 marketplaces**. Each row is one ranked product: **rank, ASIN, title, price, rating, reviews count, author or brand line, format, image and link**, plus the list and category it came from. Read a whole department and its **subcategories** in one run, switch on **change tracking** to see each product's previous rank and what dropped off the chart, or ask for **full product details** (best sellers rank in every category, brand, categories, specs, images, variations, date first available).

You pay **per product delivered**: $2 per 1,000 products, or $5 per 1,000 with full details. Empty charts are free. No subscription, no API key, no browser to maintain.

Built for:

- **Amazon and print-on-demand sellers:** what is selling in a niche right now, which new products are climbing, which prices win.
- **Publishers and authors:** daily book charts by genre, new releases in your category, rank movement over time.
- **Brands, agencies and analysts:** track a category's top 100 every day and see who enters and who drops out.
- **AI agents:** current Amazon chart data on demand through the Apify API or MCP.

### What you get

| Row (`type`) | What's in it | Charged |
|---|---|---|
| `product` | `listType`, `listName`, `marketplace`, `category`, `categorySlug`, `categoryNodeId`, `parentCategory`, `listUrl`, `rank`, `asin`, `title`, `url`, `imageUrl`, `byline` (author or brand line), `format` (Paperback, Kindle...), `price`, `priceText`, `currency`, `rating`, `reviewsCount`, `offersText`, `scrapedAt`. Movers & Shakers adds `salesRank`, `salesRank24hAgo`, `salesRankChangePercent`. With change tracking: `previousRank`, `rankChange` (+3 = moved up 3), `isNewEntry`, `previousScrapedAt`. With full details: `details` (`brand`, `author`, `listPrice`, `discountPercent`, `isAvailable`, `bestSellersRank` in every category, `bestSellersRankMain`, `categories`, `productDetails`, `description`, `images`, `variationAsins`, `dateFirstAvailable` and more) | `product`, or `enriched-product` when it has full details |
| `list` | one per chart read: `status` (`ok`, `empty`, `not_found`, `blocked`, `error`), `productsDelivered`, `subcategories` found, and with tracking `droppedOut` (ASINs that were on the chart last time and are not now) | free |

### Input examples

Top 50 Best Sellers in Books on amazon.com:

```json
{ "categories": ["books"] }
```

Best Sellers and Hot New Releases for one subcategory, top 100 each, with change tracking (schedule it daily):

```json
{ "categories": ["fashion/9056987011"], "listTypes": ["bestsellers", "new-releases"], "maxItemsPerList": 100, "trackChanges": true, "monitorId": "novelty-tees" }
```

A department and its first 10 subcategories, top 20 of each:

```json
{ "categories": ["kitchen"], "includeSubcategories": true, "maxSubcategories": 10, "maxItemsPerList": 20 }
```

Paste chart links from any supported marketplace:

```json
{ "startUrls": ["https://www.amazon.co.uk/gp/new-releases/books", "https://www.amazon.de/gp/bestsellers/books/403434"] }
```

Top 10 with full product details:

```json
{ "categories": ["electronics"], "maxItemsPerList": 10, "enrichDetails": true }
```

**Tips**

- **Categories:** use the slug from a chart URL (`books`, `kitchen`, `electronics`, `fashion`...), a slug with a node ID (`fashion/9056987011`), or paste the full chart URL. The node ID is the number at the end of a subcategory's URL.
- **Marketplaces:** United States, United Kingdom, Germany, France, Italy, Spain, Canada, Australia, India, Japan and Mexico. Pasted URLs use their own marketplace.
- **Depth:** Amazon shows up to 100 products per chart. `maxItemsPerList` goes from 1 to 100 (default 50).
- **Movers & Shakers:** Amazon sometimes shows no movers in a category, or in any category, for a while ("Sorry, there are no movers and shakers available in this category"). The run then returns a `list` row with `status: empty` and charges nothing. At the time of writing this message appears across the store, so expect empty Movers & Shakers results until Amazon fills the chart again.
- **Change tracking** compares each chart with the last run that used the same chart and `monitorId`. History is kept in your own Apify account (key-value store `amazon-charts-history`). The first run is the baseline.
- **Prices** come in the marketplace's own currency (euros on amazon.de, pounds on amazon.co.uk...). `currency` is read from the price shown, so it always matches `priceText`.
- Charts update about once an hour. `scrapedAt` tells you when each row was read. Runs without details usually take under a minute; full details add 1 to 2 minutes (the data provider's standard queue).

### Output example (one product)

```json
{
  "type": "product", "listType": "bestsellers", "listName": "Best Sellers", "marketplace": "US",
  "category": "Books", "categorySlug": "books", "categoryNodeId": null,
  "listUrl": "https://www.amazon.com/gp/bestsellers/books", "rank": 1, "asin": "1639739130",
  "title": "A Court of Splintered Harmony: The Valkyrie Cycle, Movement I (A Court of Thorns and Roses, 6)",
  "url": "https://www.amazon.com/dp/1639739130", "byline": "Sarah J. Maas", "format": "Hardcover",
  "price": 22.38, "priceText": "$22.38", "currency": "USD", "rating": null, "reviewsCount": null,
  "offersText": "5 formats available", "enriched": false, "chargedEvent": "product",
  "scrapedAt": "2026-10-25T23:19:37Z"
}
```

`rating` and `reviewsCount` are `null` when the chart card doesn't show them (common for pre-orders and brand-new releases).

The dataset has three views: **Products**, **Movers & Shakers** and **Lists**. Export to CSV, Excel or JSON, or connect it to Google Sheets, Slack, Zapier or Make through Apify integrations.

### Pricing (pay per event)

| Event | Price | When it is charged |
|---|---|---|
| Actor start | set by Apify | once per run |
| `product` | $0.002 | one ranked product delivered |
| `enriched-product` | $0.005 | one ranked product delivered with full product details (charged instead of `product`, not on top of it) |

You are not charged for:

- empty charts, charts that do not exist, and charts that could not be read (the `list` row says why);
- `list` rows, invalid or duplicate inputs;
- anything beyond your run's maximum charge. The run stops cleanly and lists what it didn't process.

If the full details for a product cannot be fetched, the product is still delivered and charged as a basic `product`.

**Apify free plan:** 2 charts with up to 50 products each and 10 products with full details per run. Any paid Apify plan unlocks up to 50 charts (plus up to 30 subcategories each) and 100 products per chart.

### How it works and what it doesn't do

The Actor reads the public chart pages the same way a logged-out shopper sees them. It never logs in, sends a few requests at a time with pauses between them, and uses Apify Proxy. Full product details come from DataForSEO's licensed Merchant API. Reviews and reviewer names are never collected; you get the rating and the number of reviews only.

### Use from AI agents (MCP)

AI assistants such as Claude, ChatGPT and Cursor can run this Actor through [Apify's MCP server](https://docs.apify.com/platform/integrations/mcp) (`https://mcp.apify.com`). Runs use your own Apify account and are charged at the prices on this page.

- **Actor name:** `vncntlabs/amazon-best-sellers`
- **Server URL with only this tool:** `https://mcp.apify.com?tools=vncntlabs/amazon-best-sellers`
- **Cursor:** add the server to `mcp.json`:

```json
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=vncntlabs/amazon-best-sellers" } } }
```

Example prompt: *"Use the Apify Actor vncntlabs/amazon-best-sellers to get today's top 20 Hot New Releases in Books on amazon.com and summarise the genres and price range."*

To cap the cost of an agent's run, pass `maxTotalChargeUsd` in the run options.

### FAQ

**How often do the charts change?** Amazon updates them about hourly. Schedule the Actor daily or hourly with change tracking to build a rank history.

**Why are Movers & Shakers empty?** Amazon is not showing that chart right now (see Tips). Empty charts are not charged.

**Can I get the top 100?** Yes, set `maxItemsPerList` to 100. Amazon does not show more than 100 per chart; use subcategories to go deeper.

**Is this an official Amazon API?** No. This Actor is not affiliated with or endorsed by Amazon. Amazon is a trademark of Amazon.com, Inc. or its affiliates.

**Questions or a missing marketplace?** Open an issue on the Actor page or email hello@vncntlabs.com.

# Actor input Schema

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

Amazon category slugs, optionally with a node ID, as they appear in list URLs: <code>books</code>, <code>digital-text</code> (Kindle Store), <code>fashion/9056987011</code> (Men's Novelty T-Shirts), <code>toys-and-games</code>, <code>electronics</code>, <code>beauty</code>. You can also paste a full Best Sellers, New Releases or Movers & Shakers URL here.

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

Which charts to read for each category slug. Full URLs keep their own list type.

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

Used for category slugs. Full URLs keep their own marketplace.

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

Optional. Any Amazon Best Sellers (/zgbs/ or /gp/bestsellers/), New Releases or Movers & Shakers URL, for example https://www.amazon.com/gp/new-releases/digital-text/154606011

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

Amazon shows up to 100 products per list (50 per page).

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

Adds the child categories shown in each list's left menu (one level down), for example every Books genre.

## `maxSubcategories` (type: `integer`):

How many subcategories to read for each chart when 'Include subcategories' is on (1-30). Each subcategory is one more chart.

## `enrichDetails` (type: `boolean`):

Adds Best Sellers Rank in every category, brand, categories, specs, description, images, variations and availability for each product. Charged as an enriched product instead of a basic one. Adds 1 to 2 minutes.

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

Remembers each list's ranks in your account and adds previousRank, rankChange and isNewEntry on the next run, plus products that dropped out. Ideal with a daily schedule.

## `monitorId` (type: `string`):

Optional. Keeps separate rank histories for different schedules on the same lists (letters, digits, - and \_).

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

Leave as is: the Actor starts on datacenter proxies and switches to residential ones automatically if Amazon shows a robot check.

## Actor input object example

```json
{
  "categories": [
    "books"
  ],
  "listTypes": [
    "bestsellers",
    "new-releases"
  ],
  "marketplace": "US",
  "maxItemsPerList": 50,
  "includeSubcategories": false,
  "maxSubcategories": 10,
  "enrichDetails": false,
  "trackChanges": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `lists` (type: `string`):

No description

## `all` (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 = {
    "categories": [
        "books"
    ],
    "listTypes": [
        "bestsellers",
        "new-releases"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vncntlabs/amazon-best-sellers").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 = {
    "categories": ["books"],
    "listTypes": [
        "bestsellers",
        "new-releases",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vncntlabs/amazon-best-sellers").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 '{
  "categories": [
    "books"
  ],
  "listTypes": [
    "bestsellers",
    "new-releases"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vncntlabs/amazon-best-sellers --silent --output-dataset

```

## MCP server setup

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

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/KzeGdgfzdVSPf8PnH/builds/WguACCMl0K5RqTrYh/openapi.json
