# Amazon Best Sellers Scraper - Top 100 Rankings by Category (`convertfleetdotonline/amazon-bestsellers-scraper`) Actor

Scrape the Amazon Best Sellers categories and extract details on top 100 most popular items on Amazon. Download product name, price, URL, and thumbnail image. Best used on .com, .co.uk, .de, .fr, .es, and .it domains.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Amazon Bestsellers Scraper

Scrape the **Amazon Best Sellers** categories and extract details on the **top 100 most popular items** on Amazon. Download product name, price, URL, and thumbnail image. Best used on `.com`, `.co.uk`, `.de`, `.fr`, `.es`, and `.it` domains. Download your data in various formats: HTML table, JSON, CSV, Excel, and more.

### What does Amazon Bestsellers Scraper do?

- 🏆 Scrapes any [Amazon Best Sellers](https://www.amazon.com/Best-Sellers/zgbs/) category — Books, Electronics, Toys, Beauty, you name it
- 💯 Gets the **full top 100** for each category (Amazon lazy-loads half of every list — this scraper scrolls and paginates so you don't miss items 31–100)
- 🌍 Works across Amazon marketplaces: amazon.com, .co.uk, .de, .fr, .es, .it, and others
- 🗂 Optionally crawls **subcategories** to any depth (level 2 covers roughly 550 lists = ~55,000 products)
- 🔁 Automatically detects Amazon captchas and rotates proxy sessions to get past blocking

### Output

One dataset record per bestseller item:

| Field | Description |
| --- | --- |
| `rank` | Position in the Best Sellers list (1–100) |
| `name` | Product name |
| `price` | Displayed price, e.g. `$14.99` |
| `priceValue` / `currency` | Parsed numeric price and currency symbol |
| `stars` | Average star rating, e.g. `4.7` |
| `reviewsCount` | Number of ratings |
| `byline` | Author / brand line when present |
| `productType` | e.g. `Hardcover`, `Paperback` |
| `asin` | Amazon product ID |
| `url` | Canonical product URL |
| `thumbnail` | Highest-resolution product image available in the list |
| `category` / `categoryUrl` | The Best Sellers list the item came from |
| `domain` | Amazon marketplace, e.g. `amazon.com` |

Export everything as JSON, CSV, Excel, XML, or an HTML table straight from the run's **Dataset** tab or via the [Apify API](https://docs.apify.com/api/v2#/reference/datasets).

### Input

```json
{
    "categoryUrls": ["https://www.amazon.com/Best-Sellers-Books/zgbs/books/"],
    "maxItemsPerStartUrl": 100,
    "depthOfCrawl": 1,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

- **categoryUrls** — one or more Best Sellers category URLs. The URL has to contain `Best-Sellers`, `best-sellers`, `bestsellers`, or `zgbs`.
- **maxItemsPerStartUrl** — cap on results per start URL (Amazon shows at most 100 per category).
- **depthOfCrawl** — `1` scrapes just the categories you entered; `2` also scrapes each direct subcategory; `3` goes one level deeper. Each level multiplies the page count ~10–20×.
- **language** — force a display language where the marketplace supports it.
- **proxyConfiguration** — Apify Proxy settings. Amazon blocks many datacenter IPs with captchas; **residential** proxies are the most reliable choice if your plan includes them.

### Tips

- Enter a *specific* category URL (e.g. `.../zgbs/books/`) to get its full top 100. The Best Sellers *homepage* (`.../Best-Sellers/zgbs/`) only shows short preview carousels — combine it with `depthOfCrawl: 2` to fan out into every department instead.
- Prices are shown in the currency Amazon serves to the proxy's location — use proxies from the marketplace's country for local prices.

### FAQ

**Is it legal to scrape Amazon Best Sellers?** The scraper only collects publicly available product listings (no personal data). Still, make sure your use complies with applicable laws and Amazon's terms in your jurisdiction.

**Why do I get fewer than 100 items?** Some categories simply list fewer products; unavailable items are skipped. If runs end early with captcha errors, switch the proxy configuration to residential proxies.

# Actor input Schema

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

One or more Amazon Best Sellers category URLs. The URL has to contain <code>Best-Sellers</code>, <code>best-sellers</code>, <code>bestsellers</code> or <code>zgbs</code>. Works on amazon.com, .co.uk, .de, .fr, .es, .it and other Amazon domains. If you enter a top-level category, its subcategories can also be scraped — see the crawl depth option.

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

Maximum number of results to scrape per start URL (including its subcategories). Note that Amazon has a hard limit of 100 bestsellers per category.

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

1 scrapes only the categories you entered (top 100 each). 2 also scrapes each of their direct subcategories, and so on. Careful: each extra level multiplies the number of pages by roughly 10-20x.

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

Language to use on Amazon. Each Amazon domain supports a different set of languages; if the chosen language is not supported by the domain, Amazon falls back to the domain default.

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

Routes requests through Apify Proxy. Amazon blocks some datacenter IPs with a captcha; residential proxies are the most reliable if your plan includes them. The scraper automatically rotates sessions when it hits a captcha.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://www.amazon.com/Best-Sellers-Books/zgbs/books/"
  ],
  "maxItemsPerStartUrl": 100,
  "depthOfCrawl": 1,
  "language": "default",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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-Books/zgbs/books/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("convertfleetdotonline/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-Books/zgbs/books/"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("convertfleetdotonline/amazon-bestsellers-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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-Books/zgbs/books/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call convertfleetdotonline/amazon-bestsellers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=convertfleetdotonline/amazon-bestsellers-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Amazon Best Sellers Scraper - Top 100 Rankings by Category",
        "description": "Scrape the Amazon Best Sellers categories and extract details on top 100 most popular items on Amazon. Download product name, price, URL, and thumbnail image. Best used on .com, .co.uk, .de, .fr, .es, and .it domains.",
        "version": "0.1",
        "x-build-id": "LwImC0xeF4CQaIhrk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/convertfleetdotonline~amazon-bestsellers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-convertfleetdotonline-amazon-bestsellers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/convertfleetdotonline~amazon-bestsellers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-convertfleetdotonline-amazon-bestsellers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/convertfleetdotonline~amazon-bestsellers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-convertfleetdotonline-amazon-bestsellers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "categoryUrls"
                ],
                "properties": {
                    "categoryUrls": {
                        "title": "Amazon Best Sellers category URLs",
                        "type": "array",
                        "description": "One or more Amazon Best Sellers category URLs. The URL has to contain <code>Best-Sellers</code>, <code>best-sellers</code>, <code>bestsellers</code> or <code>zgbs</code>. Works on amazon.com, .co.uk, .de, .fr, .es, .it and other Amazon domains. If you enter a top-level category, its subcategories can also be scraped — see the crawl depth option.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItemsPerStartUrl": {
                        "title": "Max results (per start URL)",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of results to scrape per start URL (including its subcategories). Note that Amazon has a hard limit of 100 bestsellers per category.",
                        "default": 100
                    },
                    "depthOfCrawl": {
                        "title": "How many subcategory levels do you want to scrape?",
                        "minimum": 1,
                        "maximum": 3,
                        "type": "integer",
                        "description": "1 scrapes only the categories you entered (top 100 each). 2 also scrapes each of their direct subcategories, and so on. Careful: each extra level multiplies the number of pages by roughly 10-20x.",
                        "default": 1
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "default",
                            "en",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "nl",
                            "pl",
                            "pt",
                            "sv",
                            "tr",
                            "cs",
                            "da",
                            "ar",
                            "he",
                            "hi",
                            "ja",
                            "ko",
                            "zh_CN",
                            "zh_TW"
                        ],
                        "type": "string",
                        "description": "Language to use on Amazon. Each Amazon domain supports a different set of languages; if the chosen language is not supported by the domain, Amazon falls back to the domain default.",
                        "default": "default"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Routes requests through Apify Proxy. Amazon blocks some datacenter IPs with a captcha; residential proxies are the most reliable if your plan includes them. The scraper automatically rotates sessions when it hits a captcha.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
