# Amazon Best Sellers Rank Tracker: BSR & Top 100 (`deepmine/amazon-best-sellers-rank-tracker`) Actor

Amazon best sellers rank tracker: the top 100 ranks of any Best Sellers, New Releases, Movers & Shakers, Most Wished For or Gift Ideas list, with ASIN, price, rating, reviews and subcategories, on any Amazon marketplace. Schedule it to track Amazon bestsellers over time. No login.

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

## Pricing

from $0.22 / 1,000 ranked 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 Rank Tracker: BSR & Top 100

An Amazon best sellers rank tracker for every ranked list Amazon has: Best Sellers, New Releases, Movers & Shakers,
Most Wished For and Gift Ideas, in any category and on any Amazon marketplace. Each list gives its top 100 products in
rank order with ASIN, title, price, rating, reviews and image, as the list shows them. Schedule it daily and every
run adds a dated snapshot of the ranks, so you can chart how a product, a brand or a competitor moves through the
Amazon bestsellers. Lists only, so it's fast and cheap. No login, no cookies, no browser.

| position | title | price | stars | reviewsCount | listName | asin |
|---|---|---|---|---|---|---|
| 1 | blink plus plan with monthly auto-renewal | $11.99 | 4.4 | 281,265 | Electronics | B08JHCVHTY |
| 2 | Apple EarPods Headphones with USB-C Plug, Wired Ear Buds wit… | $19.00 | 4.5 | 19,206 | Electronics | B0DCH8VDXF |
| 3 | Apple AirTag (2nd Generation): Tracker for Keychain, Wallet,… | $24.00 | 4.6 | 12,075 | Electronics | B0GJTFXNRX |
| 4 | Apple AirPods Pro 3 Wireless Earbuds with Active Noise Cance… | $199.00 | 4.4 | 16,710 | Electronics | B0FQFB8FMG |
| 5 | Amazon Fire TV Stick 4K Plus with AI-powered Fire TV Search,… | $69.99 | 4.6 | 115,523 | Electronics | B0F7Z4QZTT |

<sub>Collected by this Actor from Best Sellers in Electronics on 2026-10-19 (platform runs: 100 ranks in 6-7 s at
256 MB; 10 categories x 100 ranks in 51 s).</sub>

**$0.29 per 1,000 products** on the Starter plan ($0.35 Free, $0.25 Scale, $0.22 Business, Platinum and Diamond).
Ranking rows are free and there is no start fee. The prefilled run (100 products: the top 100 Best Sellers in
Electronics) costs about $0.03 on Starter.

### What you can track

- **Every chart**: Best Sellers, New Releases, Movers & Shakers, Most Wished For and Gift Ideas, ranks 1-100.
- **Any category and marketplace**: paste a list URL in its modern (`amazon.com/zgbs/electronics`) or older
  (`amazon.com/gp/bestsellers/books`) form, from amazon.com, .co.uk, .de, .fr, .it, .es, .ca, .co.jp, .in, .com.au
  and 13 more. Or type just the category (`electronics`, `books/4`) and pick the marketplace and chart.
- **Subcategories**: with **🗂️ Subcategory levels** at 2, Electronics also gives Headphones, Camera & Photo and its
  other subcategories, each with its own top 100; 3 goes one level deeper. **🗂️ Max lists** caps how many lists the
  subcategories bring the run to. Each row says its level and its parent list.
- **Movers & Shakers**: each product's sales rank, its rank 24 hours before and the change in percent, when the list
  shows them.
- **Rank history**: every row has `scrapedAt`. Schedule the Actor (daily or hourly) and append the runs' datasets:
  the same ASIN in the same list gives one point per run.
- **Rankings across lists**: a product that several lists rank is one row, charged once, and the free **📑 Rankings**
  dataset keeps its rank in every list.

Need the full product page (features, specs, every Best Sellers Rank, seller, delivery, Prime, badges, variants, seller
offers)? Our **Amazon Best Sellers Scraper** reads the same lists with full details.

### How to use it

1. Paste **🔗 Best seller lists** (URLs, one per line) or type categories such as `electronics`.
2. Keep **📊 Products per list** at 100 for the full list, or lower it for the top N.
3. Press **Start**. Rows stream into the dataset in rank order, list by list.
4. To track ranks over time, save the input as a task and give it a schedule.

Saved inputs of junglee/amazon-bestsellers run as they are: `categoryUrls`, `maxItemsPerStartUrl` and `depthOfCrawl`
work the same way (`detailedInformation`, `language` and `useCaptchaSolver` aren't needed: the run summary says so).
`startUrls` and the Amazon Scraper's `categoryOrProductUrls` work too. Product and search URLs aren't lists: the run
summary names them, and our Amazon Scraper reads them.

### Pricing

You pay per product in the dataset, once per product per run however many lists rank it, at your Apify plan's price
(see the Pricing tab). Ranking rows, failed lists and the run summary are never charged, and there is no start fee. A
run stops at your spending limit without reading pages it can't deliver.

### Output

**🏆 Ranks** (the default dataset): one row per product, the same keys on every row; anything the list doesn't show is
`null`. Views: **🏆 Ranks**, **📈 Rank tracking** (every number, for charts over time) and **🗂️ Lists**.

| Key | What it is |
|---|---|
| position, pageNumber | The rank in the list, and the list page (1: ranks 1-50, 2: 51-100) |
| thumbnailImage, title | The picture and title the list shows |
| asin, url | Amazon's id and the product page |
| price, priceValue, currency | Price as the list shows it ($19.00), as a number, ISO currency |
| stars, reviewsCount | Average rating and number of ratings |
| offersCount | The card's offer count ("15 offers from"), when it shows one (see Limits: set **🌐 Deliver to country** to get it on most cards) |
| salesRank, previousSalesRank, salesRankChangePercent | Movers & Shakers: the sales rank now, 24 hours before (null: unranked), and the change in percent (negative: a fall) |
| listType, listName, listFullName, listUrl | The list: Best Sellers in Electronics, its URL |
| depth, parentListUrl | 1: a list you gave; 2: its subcategory (and that list's parent)... |
| subcategories, subcategoryUrls | The list's subcategories and their lists |
| marketplace, unNormalizedProductUrl, input, scrapedAt | Provenance, the link as the list gives it, and time (UTC) |

**📑 Rankings** (free, a second dataset): one row per list and product, so a product that two lists rank keeps both
ranks; the product row stays where it was found first, and each ranking row says which list that is. Its keys:
position, thumbnailImage, title, asin, listType, listName, listFullName, listUrl, pageNumber, depth, parentListUrl,
isProductRowList, productListUrl, productPosition, productUrl, listedAsin (when the list's ASIN opens another
product's page), marketplace, input, scrapedAt.

**🧾 Run summary** (the OUTPUT record): per list its status, depth and parent list, products delivered, ranking rows,
products an earlier list already delivered (with their rank), failures; calls and traffic.

#### Field map for junglee/amazon-bestsellers and amazon-scraper/amazon-bestsellers-scraper users

`name` → `title`, `thumbnailUrl` / `image` → `thumbnailImage`, `link` → `unNormalizedProductUrl`, `categoryName` /
`categoryFullName` (`category`) / `categoryUrl` → `listName` / `listFullName` / `listUrl`, `numberOfOffers` →
`offersCount`, `price {value, currency}` → `price`, `priceValue`, `currency`; `position`, `asin`, `url`, `stars`,
`reviewsCount`, `input` keep their names and `subcategories` → `subcategories` + `subcategoryUrls`. Failed lists go to
the run summary, not into your rows.

### Limits

- Amazon ranks 100 products per list; a list with fewer gives what it has. Amazon sometimes shows a Movers & Shakers
  list empty ("no movers and shakers available in this category"): the run summary says so and nothing is charged.
- The row holds what the list shows: no Prime, badges, seller or specs (the Amazon Best Sellers Scraper has them).
- **Offer counts**: delivering in the marketplace's own country (the default: US prices on amazon.com), Amazon's list
  shows the featured price and an offer count ("1 offer from") only on the few cards without one. With **🌐 Deliver to
  country** set to another country (e.g. `DE` on amazon.com), most cards show "15 offers from $17.87": `offersCount`
  is that count and the price is the lowest offer that ships there. Browser-based scrapers that report
  `numberOfOffers` on most products read that international view.
- Rows are read from Amazon's English pages; titles keep the language the seller wrote them in.

### FAQ

**Do I need proxies?** No: the default Apify datacenter proxy works for Amazon lists. A page Amazon refuses is asked
again on another IP.

**Why did a product come out once when two lists rank it?** You pay once per product per run. The Rankings dataset has
a row for each list that ranks it, with that list's rank.

**What if a run is interrupted?** Resurrect it: products already in the dataset are never pushed or charged again, and
ranking rows already written aren't written twice.

### Your feedback

Found a bug, or a list you need? Open an issue on the Issues tab and we'll answer within two days. If the data helped
you, a short review on this page helps other users find the Actor.

# Actor input Schema

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

Any Best Sellers, New Releases, Movers & Shakers, Most Wished For or Gift Ideas list URL, one per line, on any Amazon site. Or just a category (electronics, books/4), read on the marketplace and chart below.

## `maxItemsPerStartUrl` (type: `integer`):

Top N ranks of each list (Amazon ranks 100). A product several lists rank is charged once; the free Rankings dataset keeps every rank.

## `depthOfCrawl` (type: `integer`):

1 = only the lists you give. 2 = also each list's subcategories (Electronics → Headphones, Camera & Photo...), 3 = their subcategories too, and so on, up to Max lists.

## `domain` (type: `string`):

The Amazon site a category typed without a URL is read on. URLs keep their own site. Pick one, or type a host such as amazon.de or www.amazon.de.

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

Which ranked list a category typed without a URL is read from.

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

With Subcategory levels above 1: no more subcategories are added once the run has this many lists (the lists you give are always read).

## `zipCode` (type: `string`):

Read the lists' prices for this postcode, e.g. 10001 (amazon.com) or 10115 (amazon.de). Empty = each marketplace's capital; amazon.com uses the proxy's US location. The run stops if Amazon rejects it.

## `countryCode` (type: `string`):

Two-letter country to deliver to, for international prices, e.g. DE on amazon.com. Empty = the marketplace's own country. Not used with a postcode. In another country most list cards show their offer count and lowest offer ('15 offers from $17.87').

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

Leave as is: Apify datacenter proxies work for Amazon lists. Residential is replaced by datacenter (it costs more per page than a row earns).

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

Same as Best seller lists (for API callers used to startUrls).

## `categoryOrProductUrls` (type: `array`):

Same as Best seller lists (the Amazon Scraper's key).

## `detailedInformation` (type: `boolean`):

Kept for saved junglee/amazon-bestsellers inputs: this Actor reads the lists only (the Amazon Best Sellers Scraper reads full details). True is noted in the run summary.

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

Engine setting.

## `language` (type: `string`):

Kept for saved junglee/amazon-bestsellers inputs: rows are read from Amazon's English pages.

## `useCaptchaSolver` (type: `boolean`):

Kept for saved junglee/amazon-bestsellers inputs: not needed (a refused page is retried on a new IP).

## Actor input object example

```json
{
  "categoryUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
  ],
  "maxItemsPerStartUrl": 100,
  "depthOfCrawl": 1,
  "domain": "www.amazon.com",
  "listType": "bestsellers",
  "maxCategories": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 12
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `rankingsUrl` (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 = {
    "categoryUrls": [
        "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
    ],
    "maxItemsPerStartUrl": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/amazon-best-sellers-rank-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 = {
    "categoryUrls": ["https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"],
    "maxItemsPerStartUrl": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/amazon-best-sellers-rank-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 '{
  "categoryUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
  ],
  "maxItemsPerStartUrl": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/amazon-best-sellers-rank-tracker --silent --output-dataset

```

## MCP server setup

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