# Amazon Best Sellers Scraper - Top 100 Rankings & Prices (`fabrikit/amazon-bestsellers-scraper`) Actor

Scrape Amazon Best Sellers and New Releases lists: the top 100 products of any category with rank, ASIN, title, price, rating, review count, image and category path. Works on amazon.com, .co.uk, .de, .es, .com.mx and more; optional subcategory crawl; no login.

- **URL**: https://apify.com/fabrikit/amazon-bestsellers-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** E-commerce, Automation, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 ranked product scrapeds

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 Scraper — Top 100 Rankings & Prices

**Amazon Best Sellers Scraper extracts the ranked product lists from amazon.com** and the other Amazon marketplaces: the Best Sellers top 100 of any category or subcategory, and the Hot New Releases lists. Every row is one ranked product with its position, ASIN, title, price, star rating, number of ratings, image and the category it was ranked in. No login, no browser, no API key, and you pay per product saved.

It is the ranking-focused companion of our [Amazon Product Scraper](https://apify.com/fabrikit/amazon-product-scraper), which searches by keyword and opens product pages. Use this Actor when the question is "what sells best in this category right now", and the other one when you need the full product sheet of specific ASINs.

### What data does it return?

| Field | Example | Notes |
|---|---|---|
| `rank` | `1` | position in the list (1–100) |
| `asin`, `url` | `B08JHCVHTY`, `https://www.amazon.com/dp/B08JHCVHTY` | canonical product link |
| `title` | `blink plus plan with monthly auto-renewal` | as shown on the list |
| `price`, `currency`, `priceText` | `11.99`, `USD`, `$11.99` | number + ISO code + the text Amazon displays (New Releases may show `18 offers from $114.81`) |
| `rating`, `reviewsCount` | `4.4`, `281265` | average stars and number of ratings |
| `imageUrl`, `thumbnailUrl` | `…/I/31YHGbJsldL.png` | full-size image and the list thumbnail |
| `listType` | `bestsellers` or `new-releases` | |
| `category`, `categoryPath` | `Headphones`, `Electronics > Headphones` | name and breadcrumb of the list |
| `categoryUrl`, `page` | `https://www.amazon.com/gp/bestsellers/electronics/172541`, `2` | the list the product was found on; page 1 = ranks 1–50, page 2 = 51–100 |
| `domain`, `country` | `amazon.com`, `US` | marketplace |
| `scrapedAt` | `2026-10-19T23:26:11.003Z` | ISO 8601, UTC |

Numbers are real numbers (not strings), so you can sort and filter directly in CSV, Excel or your database.

### Use cases

- **Product research and sourcing** — see the top 100 of a niche (`Headphones`, `Toys & Games > Puzzles`) with prices and review counts in one table, and compare marketplaces (US vs. Mexico vs. Spain).
- **Rank tracking** — schedule a daily run on the lists that matter to your brand and watch your ASINs (and your competitors') move; `rank`, `page` and `scrapedAt` give you a clean time series.
- **New Releases monitoring** — the Hot New Releases list shows which new products are already selling; a weekly run per category is an early-trend feed.
- **Market dashboards and AI agents** — plain JSON with stable field names, easy to pipe into Google Sheets, a BI tool or an LLM pipeline ("which products in the top 100 have fewer than 500 ratings?").
- **Enrichment** — take the ASINs from the ranking and send them to the [Amazon Product Scraper](https://apify.com/fabrikit/amazon-product-scraper) for bullets, images, variants and seller.

### How to use it

1. Paste one or more **Best Sellers or New Releases URLs** — any form Amazon shows works: `https://www.amazon.com/gp/bestsellers/electronics`, `https://www.amazon.com/Best-Sellers-Electronics-Headphones-Earbuds/zgbs/electronics/172541`, `https://www.amazon.com/gp/new-releases/toys-and-games`. Short category paths such as `electronics/172541` are also accepted and resolved on the selected **Marketplace** with the selected **List type**.
2. Set **Max products** (total). Each list has at most 100 products in 2 pages of 50; **Pages per list** = 1 gives the top 50 only.
3. Optional: **Also scrape direct subcategories** reads the rankings of every child category of each list (Electronics → Headphones, Cameras, …). On the department hub URL (`https://www.amazon.com/gp/bestsellers`) this means every department.
4. Run it and export the dataset as JSON, CSV or Excel, or read it through the API.

#### Input example: top 100 of two lists

```json
{
  "categoryUrls": [
    "https://www.amazon.com/gp/bestsellers/electronics/172541",
    "https://www.amazon.com/gp/new-releases/toys-and-games"
  ],
  "maxItems": 200
}
```

#### Input example: short paths on another marketplace

```json
{
  "categoryUrls": ["electronics", "kitchen"],
  "domain": "amazon.com.mx",
  "listType": "bestsellers",
  "maxItems": 200,
  "maxPagesPerList": 2
}
```

#### Input example: a whole department tree, top 50 each

```json
{
  "categoryUrls": ["https://www.amazon.com/gp/bestsellers/electronics"],
  "includeSubcategories": true,
  "maxPagesPerList": 1,
  "maxItems": 1000
}
```

### Output example

A real record from a local test run on 19 October 2026:

```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",
  "priceText": "$11.99",
  "rating": 4.4,
  "reviewsCount": 281265,
  "imageUrl": "https://images-na.ssl-images-amazon.com/images/I/31YHGbJsldL.png",
  "thumbnailUrl": "https://images-na.ssl-images-amazon.com/images/I/31YHGbJsldL._AC_UL300_SR300,200_.png",
  "listType": "bestsellers",
  "category": "Electronics",
  "categoryPath": "Electronics",
  "categoryUrl": "https://www.amazon.com/gp/bestsellers/electronics",
  "page": 1,
  "domain": "amazon.com",
  "country": "US",
  "scrapedAt": "2026-10-19T23:26:11.003Z"
}
```

A `SUMMARY` record in the key-value store lists the pages fetched per list, how many products each list gave, the proxy rung used and any errors.

### Pricing

Pay per event: you are charged for each ranked product saved to the dataset, proxy included. See the Pricing tab for current prices; paid Apify plans get lower rates.

A product that appears in two lists (e.g. Electronics and Headphones) is one row per list, because its rank is different in each. If you set a maximum cost per run, the Actor stops cleanly when it is reached.

### How it compares

- **Amazon's own pages**: the Best Sellers page renders 30 products and loads the rest as you scroll; copying 100 ranks by hand across many categories does not scale. This Actor reads both halves of each page and both pages of each list, so you get the complete top 100.
- **Other Best Sellers scrapers in the Store**: this one returns the category breadcrumb and the full-size image URL, and accepts short category paths and whole department trees.
- **Limits**: Amazon publishes at most 100 products per list, and only Best Sellers and New Releases are available at the moment — the Movers & Shakers and Most Wished For pages were served empty by Amazon when this Actor was built, so URLs of those lists are rejected with a clear message rather than returning nothing.

### Integrations

Run it from the Apify API, the JavaScript or Python client, or on a schedule in Apify Console. Send the dataset to Google Sheets, Airtable, n8n, Make, Zapier or a webhook. AI agents (Claude, ChatGPT, Cursor and other MCP clients) can call it through the Apify MCP server, for example "get the top 50 best sellers in amazon.de Küche".

### FAQ

**Is it legal to scrape Amazon Best Sellers?** The Actor reads public product listings that Amazon shows to any visitor: product names, prices, ratings and ranks. No personal data is collected (there are no reviewer or seller names on these lists). You are responsible for using the data in line with the law and Amazon's terms in your jurisdiction. This is not legal advice.

**Do I need a proxy?** No setup is needed. The run starts on Apify datacenter proxies with a browser-like fingerprint; when Amazon answers with a captcha or bot check, the session and fingerprint are rotated (Chrome → Safari → Firefox) and, after repeated blocks, the run moves to Apify residential proxies of the marketplace's country. European stores (UK, Germany, France, Italy) show more bot checks than amazon.com.

**Why did a list come back empty?** Category paths differ per marketplace: `electronics` exists on amazon.com and amazon.es, but Germany uses `ce-de`. Copy the URL from the marketplace's own Best Sellers page. An empty list is reported in the log and in `SUMMARY.errors`; the run never finishes "succeeded" with zero rows without saying why.

**Can I get the Best Sellers Rank of a specific product?** That number lives on the product page: use the [Amazon Product Scraper](https://apify.com/fabrikit/amazon-product-scraper) with product details on. This Actor gives you the lists themselves.

**Which marketplaces work?** amazon.com, .ca, .com.mx, .com.br, .es, .co.uk, .de, .fr, .it, .nl, .com.au, .in and .co.jp are accepted. Prices come in the marketplace's currency (`currency`).

**How fast is it?** One list of 100 products takes about 2–4 seconds (4 requests). A department with its subcategories runs sequentially to stay polite with Amazon.

### Changelog

- **2026-10-19** — First version: Best Sellers and Hot New Releases lists, department hub, subcategory crawl, 13 marketplaces, full top 100 per list (both page halves), pay per product.

### En español

**Amazon Best Sellers Scraper** extrae las listas de productos más vendidos (Best Sellers, top 100 por categoría o subcategoría) y los nuevos lanzamientos más vendidos (Hot New Releases) de Amazon: amazon.com, .com.mx, .es, .com.br, .co.uk, .de y más. Cada fila es un producto con su posición, ASIN, título, precio en la moneda del sitio, valoración, cantidad de reseñas, imagen y la categoría de la lista (con su ruta, p. ej. `Electronics > Headphones`). Acepta URLs completas o rutas cortas como `electronics/172541`, puede recorrer las subcategorías de una categoría y lee las dos mitades de cada página, así que entrega el top 100 completo. Sin login ni navegador. Se cobra por cada producto guardado, con proxy incluido. Consulta la pestaña Pricing para ver los precios actuales; los planes de pago de Apify tienen tarifas más bajas. Para la ficha completa de un ASIN (viñetas, imágenes, variantes, vendedor, ranking individual) usa nuestro [Amazon Product Scraper](https://apify.com/fabrikit/amazon-product-scraper).

# Actor input Schema

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

One list per entry. Accepts full Amazon URLs (https://www.amazon.com/gp/bestsellers/electronics, https://www.amazon.de/Bestseller-Zoo/zgbs/..., https://www.amazon.com/gp/new-releases/toys-and-games) or short category paths (electronics, electronics/172541) that are resolved on the selected marketplace. The department hub (https://www.amazon.com/gp/bestsellers) is accepted too.

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

Which ranking to open when an entry is a short category path (full URLs keep their own list type).

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

Amazon store used for short category paths. Full URLs keep their own store. European stores (UK, DE, FR, IT) show more bot checks and usually need residential proxies.

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

Stop after this many ranked products in total (all lists together). Each list has at most 100 products.

## `maxPagesPerList` (type: `integer`):

Amazon splits every ranking into 2 pages of 50 products. Use 1 for the top 50 only.

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

After each list, also read the rankings of its direct subcategories (for example Electronics -> Headphones, Cameras...). On the department hub this means every department. Products are counted towards Max products.

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

Apify datacenter proxies are used first; after repeated bot checks the run switches to residential proxies of the marketplace's country on its own.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://www.amazon.com/gp/bestsellers/electronics"
  ],
  "listType": "bestsellers",
  "domain": "amazon.com",
  "maxItems": 20,
  "maxPagesPerList": 2,
  "includeSubcategories": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All ranked products collected during the run (one row per product and list)

# 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/gp/bestsellers/electronics"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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