# Amazon Best Sellers Scraper (Ranks, Prices, Ratings) (`webdatatools/amazon-bestsellers-scraper`) Actor

Scrape Amazon Best Sellers category lists: rank, ASIN, product title, price, rating and rating count, with the category name. Works for 19 Amazon marketplaces. No login.

- **URL**: https://apify.com/webdatatools/amazon-bestsellers-scraper.md
- **Developed by:** [Murat Uzun](https://apify.com/webdatatools) (community)
- **Categories:** E-commerce, Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 best-seller items

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 reads Amazon Best Sellers category lists. Each row is one ranked product: rank, ASIN, title, price, rating, rating count and the category name. Give it a Best Sellers URL (for example `…/Best-Sellers-Electronics/zgbs/electronics`) and it returns up to 100 items per list (Amazon's own limit, 2 pages). It works on 19 Amazon marketplaces and needs no login.

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

| Field | Type | Meaning |
|---|---|---|
| rank | number | Position in the list (from the `#n` badge) |
| asin | string | Amazon ASIN |
| title | string | Product title on the list card |
| url | string | Product page, `https://<domain>/dp/<ASIN>` |
| price | number | Price shown on the card (null when not shown) |
| currency | string | ISO code for the marketplace |
| rating | number | Stars, 0 to 5 |
| ratingCount | number | Number of ratings on the card |
| categoryName | string | Category, e.g. `Electronics` |
| marketplace | string | Marketplace code, e.g. `com` |
| categoryUrl | string | The list URL that produced the row |
| page | number | List page (1 or 2) |

### How to use Amazon Best Sellers Scraper

1. Paste one or more Amazon Best Sellers URLs into "Best Sellers category URLs".
2. Choose the marketplace (used only when a URL has no domain).
3. Set the maximum items per category (up to 100).
4. Run it and download the dataset, or call the Actor through the API.

### Example input

```json
{
    "categoryUrls": ["https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics"],
    "maxItemsPerCategory": 60
}
```

### Example output

Real run, 22 Oct 2026, amazon.com, "Best Sellers in Electronics", first two of 60 rows:

```json
[
  {
    "rank": 1,
    "asin": "B08JHCVHTY",
    "title": "blink plus plan with monthly auto-renewal",
    "url": "https://www.amazon.com/dp/B08JHCVHTY",
    "price": 11.99,
    "currency": "USD",
    "rating": 4.4,
    "ratingCount": 281365,
    "categoryName": "Electronics",
    "marketplace": "com",
    "categoryUrl": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics",
    "page": 1
  },
  {
    "rank": 2,
    "asin": "B0DCH8VDXF",
    "title": "Apple EarPods Headphones with USB-C Plug, Wired Ear Buds with Built-in Remote to Control Music, Phone Calls, and Volume",
    "url": "https://www.amazon.com/dp/B0DCH8VDXF",
    "price": 19,
    "currency": "USD",
    "rating": 4.5,
    "ratingCount": 19337,
    "categoryName": "Electronics",
    "marketplace": "com",
    "categoryUrl": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics",
    "page": 1
  }
]
```

### Input parameters

- **Best Sellers category URLs**: one or more Best Sellers list URLs. A URL keeps its own domain.
- **Amazon marketplace**: used for URLs without a domain.
- **Max items per category**: 1 to 100 (default 100).
- **Proxy mode**: `never` (default) uses direct requests only. `auto` adds a Residential proxy only when Amazon blocks the direct request. `always` uses Residential from the start.
- **Save debug HTML**: stores the first list page for troubleshooting.

### Pricing

Pay per item: **$4.00 per 1,000 items** (FREE tier list price). Start fee: $0.00005 per run.

Measured platform cost (run 22 Oct 2026): 60 items cost $0.00061 in total, about $0.01 per 1,000 items in compute.

### Amazon Best Sellers Scraper vs. alternatives

The leading Amazon Best Sellers Actor on the Apify Store (junglee, 487 users in 30 days) lists $0.0059 per item on its FREE tier. This Actor lists $0.004 per item. Compare on your own list before you choose.

### Using Amazon Best Sellers Scraper with AI agents

Agents can call the Actor through the Apify MCP server or the API with a category URL and receive the ranked rows as JSON.

### FAQ

**Does it need an Amazon account?** No.

**Can it return more than 100 items per list?** No. Amazon shows at most 100 items per Best Sellers list across two pages. For more, use several category lists.

**Why is a price or rating null?** Amazon does not always show these on the card. Missing values are `null`, never estimated.

**What about blocks?** Amazon sometimes answers with a robot check. The Actor retries with waits and, if proxy mode allows it, with a Residential proxy. Lists that still fail are logged in the ERRORS record and not charged.

**Limitations.** Verified in the cloud: amazon.com, Electronics list, 60 items (direct requests). Other marketplaces use the same page layout but have not been run in the cloud. The ratingCount is read from the rating row; it is `null` when Amazon does not show it on the card.

### Related Actors

- Amazon Product Scraper (ASIN or URL: price, BSR, stock, seller, images)
- Amazon Search Scraper (keyword results with sponsored flag)

### Support

Open an issue or leave a review on the Actor page. Include the list URL so a bad result can be reproduced.

# Actor input Schema

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

Amazon Best Sellers pages, e.g. `https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics`. A URL keeps its own domain. Each list gives up to 100 items.

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

Used when a URL has no domain (for example a bare path such as `Best-Sellers-Electronics/zgbs/electronics`).

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

Amazon lists up to 100 best sellers per category (2 pages).

## `saveDebugHtml` (type: `boolean`):

Store the first fetched list page in the key-value store (troubleshooting only).

## `proxyMode` (type: `string`):

never (default): direct only, so every charged row is a direct result. auto: direct first, Residential proxy only if Amazon blocks (costs more per page). always: Residential from the start.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics"
  ],
  "marketplace": "com",
  "maxItemsPerCategory": 100,
  "saveDebugHtml": false,
  "proxyMode": "never"
}
```

# Actor output Schema

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

All best sellers from this run.

# 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"
    ]
};

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

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

```

## MCP server setup

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