# Amazon Best Sellers Scraper: Top 100 Rank & Price (`jaaylee/amazon-bestsellers-scraper`) Actor

Amazon Best Sellers scraper for any category or subcategory. Get the top 100 rank list with ASIN, title, price, rating, reviews and image, plus New Releases, optional subcategory crawl and delivery ZIP (no extra fee). $1 per 1,000 results. Export or use the API.

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

## Pricing

from $0.70 / 1,000 results

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 is Amazon Best Sellers Scraper?

**Amazon Best Sellers Scraper** extracts the **Amazon Best Sellers top 100** — and the **Hot New Releases** top 100 —
for any category or subcategory on amazon.com. For every ranked product you get the **rank**, ASIN, title, price,
rating, number of ratings and image. It can also crawl **all direct subcategories** in one run, and show prices for a
**US delivery ZIP code** at no extra cost.

Use it for **product research**, **trend spotting**, **Best Sellers Rank tracking**, **category analysis** and
**competitor monitoring**. Run it in Apify Console, on a schedule, or from Python, JavaScript, Make, Zapier, n8n or an
AI agent (MCP).

#### Why this Amazon Best Sellers scraper

- 🏆 **Full top 100, not just the first 30.** Amazon renders 30 products per page and loads the rest later; this Actor
  loads all 50 per page, so you get every rank from 1 to 100.
- 🌳 **Subcategories in one click.** Turn on **Also scrape subcategories** to get the top list of every direct
  subcategory (for example all 18 Electronics subcategories).
- 🆕 **Best Sellers and New Releases** from the same input.
- 💸 **$1.00 per 1,000 results.** Blocked pages are free and retried automatically.
- ⚡ **Fast and light:** plain HTTP, no browser. A full top 100 takes about 2 page loads.

### What Amazon Best Sellers data can you extract?

| Group | Fields |
|---|---|
| List | `listType` (bestsellers / new-releases), `category`, `categoryUrl`, `rank` |
| Product | `asin`, `url`, `productPath`, `title`, `image` |
| Price | `price`, `priceText`, `currency` |
| Reputation | `rating`, `ratingsCount` |
| Run | `deliveryLocation`, `complete`, `scrapedAt` |

### How to scrape Amazon Best Sellers

1. Click **Try for free** and open the Actor input.
2. Enter one or more **Categories** — a category slug such as `electronics`, `kitchen`, `beauty` or `toys-and-games`,
   or any Best Sellers / New Releases URL from amazon.com (subcategories work too).
3. Choose **List for slugs** (Best Sellers or New Releases) and **Top N per category** (1–100).
4. Optional: turn on **Also scrape subcategories**, and enter a **Delivery ZIP code**.
5. Click **Start** and download the results as JSON, CSV or Excel, or read them via the API.

#### Input example

```json
{
  "categories": ["electronics", "https://www.amazon.com/gp/bestsellers/kitchen/289913"],
  "listType": "bestsellers",
  "maxItemsPerCategory": 100,
  "includeSubcategories": false
}
```

#### Output example

```json
{
  "rank": 2,
  "asin": "B0FQFB8FMG",
  "url": "https://www.amazon.com/dp/B0FQFB8FMG",
  "title": "Apple AirPods Pro 3 Wireless Earbuds with Active Noise Cancellation | Live Translation, Heart Rate Sensing, Hearing Aid Feature, Bluetooth Headphones, Spatial Audio, USB-C Charging",
  "price": 199.0,
  "priceText": "$199.00",
  "currency": "USD",
  "rating": 4.4,
  "ratingsCount": 16280,
  "image": "https://images-na.ssl-images-amazon.com/images/I/61solmQSSlL._AC_UL300_SR300,200_.jpg",
  "productPath": "/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG",
  "rankChangePercent": null,
  "listType": "bestsellers",
  "category": "Electronics",
  "deliveryLocation": "New York 10001",
  "complete": true,
  "categoryUrl": "https://www.amazon.com/gp/bestsellers/electronics",
  "scrapedAt": "2026-10-11T09:00:00+00:00"
}
```

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

**$1.00 per 1,000 results** on the Free plan. Lower prices apply on higher Apify plans (see the pricing panel). Blocked
pages are free. If a product on the list could not be fully loaded, it is saved with its rank and ASIN but not charged.

| You scrape | You pay (Free plan) |
|---|---|
| Top 100 of one category | $0.10 |
| Top 100 of 10 categories | $1.00 |
| Top 10 of every Electronics subcategory (~18) | ~$0.20 |

### Amazon Best Sellers by category and subcategory

Every Amazon department has its own Best Sellers list, and each subcategory has another one (for example Electronics →
Headphones & Earbuds → Earbud Headphones). Paste any of these URLs, or use the slug for a department. With **Also scrape
subcategories** the Actor follows the subcategory links of each category one level down, and every result keeps the
`categoryUrl` and `category` name it came from.

### Use cases

- **Product research** — find what sells in a niche and compare prices, ratings and review counts.
- **Trend spotting** — track Hot New Releases to catch products before they become best sellers.
- **Best Sellers Rank tracking** — schedule a daily run and chart rank changes over time.
- **Category analysis** — map the best sellers of every subcategory in one run.
- **Enrich the list** — pass the ASINs to [Amazon ASIN Scraper](https://apify.com/jaaylee/amazon-asin-product-details)
  for full details (Best Sellers Rank in every category, stock, delivery date, specs, variants).

### Use the Amazon Best Sellers API

Python ([apify-client](https://docs.apify.com/api/client/python)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("jaaylee/amazon-bestsellers-scraper").call(
    run_input={"categories": ["electronics"], "maxItemsPerCategory": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["rank"], item["asin"], item["price"], item["title"][:60])
```

Save a daily rank snapshot to CSV:

```python
import csv, datetime

with open("bestsellers_history.csv", "a", newline="") as f:
    w = csv.writer(f)
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        w.writerow([datetime.date.today(), item["category"], item["rank"], item["asin"], item["price"]])
```

JavaScript / Node.js ([apify-client](https://docs.apify.com/api/client/js)):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('jaaylee/amazon-bestsellers-scraper').call({
    categories: ['electronics'],
    listType: 'new-releases',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((i) => console.log(i.rank, i.asin, i.title));
```

cURL (synchronous run that returns the results):

```bash
curl -X POST "https://api.apify.com/v2/acts/jaaylee~amazon-bestsellers-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"categories": ["electronics"], "maxItemsPerCategory": 10}'
```

### Integrations: Google Sheets, Make, Zapier, n8n, webhooks and schedules

- **Schedules:** run daily from Apify Console → Schedules to follow rank changes.
- **Google Sheets:** export each run to a sheet with the Apify Google Sheets integration.
- **Make, Zapier, n8n:** start runs and read results with the official Apify apps and nodes.
- **Webhooks:** get notified when a run finishes and process the results in your system.

### Use with AI agents (MCP)

This Actor works with the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). An AI agent can find it
with a query like "Amazon best sellers", read its input schema and call it to get the top products of a category.

### More Amazon scrapers by the same developer

- [Amazon ASIN Scraper](https://apify.com/jaaylee/amazon-asin-product-details) — full product details by ASIN: price,
  BSR, stock, delivery date by ZIP, variants, specs, images.
- [Amazon Search Scraper](https://apify.com/jaaylee/amazon-search-scraper) — search results for any keyword with rank,
  price, "bought in past month" and badges.

### Tips for Amazon Best Sellers research

- **Go one level deeper.** Department lists (like Electronics) are dominated by a few giant brands. Subcategory lists
  (like Earbud Headphones) show the real competition in a niche — use **Also scrape subcategories** with a small
  **Top N per category** (10–20) to scan a whole department cheaply.
- **Compare Best Sellers with New Releases.** A product that appears in New Releases and then climbs into Best Sellers
  is a trend; run both lists for the same category on a schedule.
- **Track ranks daily.** Ranks move every hour. A daily schedule with the same input gives you a clean rank history;
  join runs on `asin` and `category`.
- **Use price and review count together.** Many reviews plus a low rank means an established product; few reviews and
  a high rank means a fast riser worth watching.
- **Cap the cost.** Set **Max results in total** or a maximum charge per run; the Actor stops cleanly when it is reached.
- **Monitor with failure alerts.** For scheduled tasks, turn on **Fail run on low data quality** so that a run with
  mostly blocked pages is marked as failed and triggers your Apify notifications.

### Limitations

- **Amazon.com only** for now. Other marketplaces are on the roadmap.
- **Best Sellers and New Releases** are supported. Movers & Shakers, Most Wished For and Gift Ideas lists are rendered
  by JavaScript on Amazon and are not supported yet.
- The department overview page (`/gp/bestsellers` without a category) is not a ranked list — use a department slug.
- CAPTCHAs are never solved; blocked pages are retried on fresh sessions and, if still blocked, skipped for free.

### FAQ

#### Is it legal to scrape Amazon Best Sellers?

This Actor only reads publicly visible list pages without logging in and does not collect personal data. You are
responsible for using the data in line with applicable laws and Amazon's terms. If in doubt, consult a lawyer.

#### How often does Amazon update the Best Sellers list?

Amazon updates Best Sellers lists hourly. Schedule the Actor daily (or hourly) to build a rank history.

#### Where do I find a category slug or URL?

Open amazon.com → Best Sellers, click a department and subcategories, and copy the URL from the address bar. For
departments you can also use the slug from the URL, such as `electronics`, `kitchen` or `toys-and-games`.

#### Why is a product saved without title or price?

Rarely, Amazon does not return the second half of a page. The rank and ASIN are still saved, but those records are
marked `complete: false` and not charged.

#### Found a bug or need a field?

Open an issue on the Issues tab with the category URL and what you expected.

# Actor input Schema

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

Amazon.com Best Sellers or New Releases category URLs (e.g. https://www.amazon.com/gp/bestsellers/electronics/172541) or category slugs (e.g. electronics, kitchen, beauty, toys-and-games). One per line.

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

Which list to use for category slugs. Full URLs keep their own list type.

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

How many ranks to return per category (Amazon lists the top 100).

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

Also scrape the direct subcategories of each category (one level down). Each subcategory returns its own top list.

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

Optional. Prices are shown as a shopper in this US ZIP code sees them. Included at no extra cost.

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

Optional. Stop after this many results across all categories (useful to cap cost).

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

How many list pages are fetched in parallel.

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

Primary proxy. The default Apify datacenter proxy works for most list pages.

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

If a page stays blocked after 3 attempts on the primary proxy, retry it up to 2 more times through US residential proxies. Blocked pages are never charged either way.

## `failOnLowQuality` (type: `boolean`):

For monitoring tasks: mark the run as failed when fewer than 80% of pages succeed or key fields are missing.

## Actor input object example

```json
{
  "categories": [
    "electronics"
  ],
  "listType": "bestsellers",
  "maxItemsPerCategory": 100,
  "includeSubcategories": false,
  "zipCode": "10001",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": true,
  "failOnLowQuality": false
}
```

# Actor output Schema

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

No description

## `files` (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": [
        "electronics"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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