# Amazon Best Sellers Scraper (`socialdataapi/amazon-bestsellers-scraper`) Actor

Amazon Bestsellers Scraper — Extract Amazon bestseller data including product names, rankings, prices, ratings, reviews, ASINs, categories, images, availability, and product URLs. Useful for product research, market analysis, competitor tracking, and e-commerce insights.

- **URL**: https://apify.com/socialdataapi/amazon-bestsellers-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Scraper — Rank, Price, Rating, Ratings Count, ASIN

Amazon Best Sellers Scraper extracts the ranked products from Amazon Best Sellers category pages on any Amazon marketplace. For each product you get its rank, name, price with currency, star rating, ratings count, offer count, ASIN and category, for **all 100 ranks of a category**. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a price monitoring pipeline. No Amazon account or cookies needed. Start with one category, then add every department and marketplace you sell in.

![Amazon Best Sellers Scraper: scrape data as JSON](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/c-amazon-best-sellers-hero.webp)

***

### What data can I extract with Amazon Best Sellers Scraper?

Using this Amazon Best Sellers API, you will be able to extract the following Amazon best sellers data:

| 🏆 Rank on the list | 🛒 Product name | 🆔 ASIN | 💲 Price and currency symbol |
|---|---|---|---|
| ⭐ Star rating | 🗣️ Ratings count | 🏷️ Number of offers (if shown) | 🔗 Product link |
| 🖼️ Thumbnail image | 📁 Category name | 📰 Category heading | 🌳 Subcategory names and links |
| 🌐 Category page URL | 📥 Input URL the row came from | | |

***

### How to use Amazon Best Sellers Scraper

Sellers, analysts and AI builders paste one or more Best Sellers category URLs and get the ranked product list of each one as structured rows in a single run.

**Copy to your AI assistant:**

```text
Amazon Best Sellers Scraper (Apify Actor ID: socialdataapi/amazon-bestsellers-scraper, https://apify.com/socialdataapi/amazon-bestsellers-scraper) is an Apify Actor that returns the ranked products of Amazon Best Sellers category pages as structured JSON: rank, product name, ASIN, price with currency symbol, star rating, ratings count, offer count, product link, thumbnail, category name and heading, and the category's subcategory links. Use it whenever someone needs Amazon best seller data without cookies, a login, or a browser - niche research before sourcing, tracking which products climb or fall in a category, or comparing prices across marketplaces. Inputs: categoryUrls (array of strings, Best Sellers category URLs that contain best-sellers, bestsellers or zgbs, any Amazon marketplace, required), maxResults (integer 1-500, products per category URL including subcategory rows, default 100), subcategoryDepth (integer, 1 = main list only, 2 or more = also the first page of every subcategory one level deep, default 2), language (string, browser language sent to Amazon: ""|"cs"|"da"|"de"|"en"|"es"|"fr"|"nl"|"pl"|"pt"|"sv"|"tr"|"he"|"ar"|"mrta"|"hi"|"bn"|"ta"|"te"|"kn"|"ml"|"ko"|"zh_CN"|"zh_TW"|"ja", default none), proxyConfiguration (object, Apify proxy settings, default direct connection). Every row is one product, billed as one result event. Amazon lists up to 100 ranked products per category (two pages of 50), so the main list of one category returns at most 100 rows; a subcategory adds up to 50 more until maxResults is reached.
```

#### Amazon Best Sellers Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at the Apify MCP server with this Actor preloaded as a tool, and it can run the Actor on its own. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/amazon-bestsellers-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Amazon Best Sellers Scraper](https://apify.com/socialdataapi/amazon-bestsellers-scraper) in the Apify Store.
3. Paste the Amazon Best Sellers category URL, for example `https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/`.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Amazon Best Sellers Scraper to bulk

Add as many category URLs as you need to the category URLs list: every URL is scraped at the same time, and each one can mix marketplaces, so amazon.com, amazon.de and amazon.co.jp can run together. A recorded run with 15 marketplaces in one input returned 1,498 products in 41.8 seconds. To scrape amazon best sellers for a whole department, keep subcategories on and raise the max results setting. For a daily snapshot of the amazon top 100 best sellers in your niche, save the input as a task and put it on an Apify schedule.

***

### ✨ Features

Amazon Best Sellers Scraper fetches clean, structured best-selling products from Amazon ⚡. It's ideal for niche research, price monitoring across marketplaces, rank tracking over time, and any workflow that needs amazon product ranking data without copying it by hand. As an amazon best seller rank scraper, it reads each product's rank from the list itself.

It extracts, per product:

- **Rank** – the product's place on the Best Sellers list, as Amazon numbers it
- **Product name** – the product title, including books and Kindle titles
- **Price and currency** – the shown price as a number, with the symbol exactly as displayed ($, €, £, US$, R$, kr)
- **Star rating** and **ratings count** – customer feedback at a glance
- **Number of offers** – how many sellers offer the product, when Amazon shows it
- **ASIN and product link** – to match the product with your own catalog
- **Category and subcategory context** – heading, category URL and the menu of subcategories

⚡ Prices, ratings and counts are read in each marketplace's own number format (1.299,00 € or ￥3,366), so non-English marketplaces return complete rows.

***

### Use cases 💡

- **Dropshipper** — shortlist high-ranked products with large ratings counts before sourcing.
- **Pricing analyst** — compare prices and offer counts across a category's 100 ranks.
- **Market researcher** — schedule runs and diff each ASIN's rank to spot climbers.
- **Category manager** — map a department's subcategories from one category URL.
- **Marketplace expansion team** — compare the same category on amazon.de, .fr and .co.jp.
- **AI engineer** — feed names, prices and ratings into a RAG index for a shopping agent.

Building an AI agent? [Connect Amazon Best Sellers Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **The whole list, fast.** A recorded run returned all 100 ranked products of amazon.com's Electronics list in 10.3 seconds; the earlier version of this Actor returned 60 rows from the same list in 65.7 seconds.
- **The numbers behind each product.** A recorded row for the #2 Electronics best seller came back with a price of $16.79, 16 offers, a 4.5 star rating and 18,483 ratings.
- **16 marketplaces checked field by field.** Rank, price, currency, rating, ratings count, offer count and title were compared with the live pages on amazon.com, .co.uk, .de, .fr, .es, .it, .nl, .se, .pl, .com.tr, .co.jp, .in, .ca, .com.au, .com.mx and .com.br.

***

### ⬇️ Input

![Amazon Best Sellers Scraper input fields](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/c-amazon-best-sellers-input.webp)

The Actor accepts a list of Amazon Best Sellers category URLs, one or many; the category URLs field is the only required one. A URL must contain `best-sellers`, `bestsellers` or `zgbs`; other URLs are skipped.

Accepted URL formats:

- `https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/`
- `https://www.amazon.de/gp/bestsellers/ce-de/`
- `https://www.amazon.co.jp/gp/bestsellers/electronics/`
- subcategory pages such as `https://www.amazon.com/Best-Sellers-Electronics-Camera-Photo-Products/zgbs/electronics/502394/`

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `categoryUrls` | Yes | array | Amazon Best Sellers category page URLs, any marketplace. All URLs run at the same time. | `["https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"]` |
| `maxResults` | No | integer | Maximum products per category URL, subcategory rows included. 1–500, default 100. One list holds up to 100 ranked products. | `100` |
| `subcategoryDepth` | No | integer | 1 = main category only; 2 or more = also the first page (up to 50 products) of each subcategory, one level deep. Minimum 1, default 2. | `2` |
| `language` | No | string | Browser language sent to Amazon. Allowed: "" (none), cs, da, de, en, es, fr, nl, pl, pt, sv, tr, he, ar, mrta, hi, bn, ta, te, kn, ml, ko, zh_CN, zh_TW, ja. Amazon uses it when the marketplace offers that language. No default. | `"en"` |
| `proxyConfiguration` | No | object | Proxy settings; default is a direct connection. With your own proxy URLs only the first is used. Apify Residential is recommended. | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}` |

#### Free plan limits

Users on the Apify free plan can fetch up to 20 products per run (all category URLs together) and 200 products per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

```json
{
  "categoryUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
    "https://www.amazon.de/gp/bestsellers/ce-de/"
  ],
  "maxResults": 100,
  "subcategoryDepth": 2,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

This exact input was run on 2026-10-01 and returned 200 products (100 per category URL) in 9.8 seconds.

***

### ⬆️ Output

![Amazon Best Sellers Scraper output: example JSON fields](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/c-amazon-best-sellers-output.webp)

Every product is one typed, normalized JSON item with the same 14 fields on every run, and you can export amazon best sellers to CSV, JSON (default) or Excel. There are no summary or error rows; a value Amazon does not show on the card, such as the offer count, is null.

#### Example output

```json
{
  "name": "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/Apple-EarPods-Headphones-Built-Control/dp/B0DCH8VDXF/ref=zg_bs_g_electronics_d_sccl_2/147-7336307-1715031?psc=1",
  "asin": "B0DCH8VDXF",
  "position": 2,
  "price": {
    "value": 16.79,
    "currency": "$"
  },
  "numberOfOffers": 16,
  "stars": 4.5,
  "reviewsCount": 18483,
  "thumbnailUrl": "https://images-na.ssl-images-amazon.com/images/I/513OSdW4elL._AC_UL300_SR300,200_.jpg",
  "categoryName": "Electronics",
  "categoryFullName": "Best Sellers in Electronics",
  "subcategories": [
    {
      "categoryName": "Accessories & Supplies",
      "categoryUrl": "https://www.amazon.com/Best-Sellers-Electronics-Electronics-Accessories-Supplies/zgbs/electronics/281407/ref=zg_bs_nav_electronics_1"
    },
    {
      "categoryName": "Camera & Photo",
      "categoryUrl": "https://www.amazon.com/Best-Sellers-Electronics-Camera-Photo-Products/zgbs/electronics/502394/ref=zg_bs_nav_electronics_1"
    }
  ],
  "categoryUrl": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
  "input": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
}
```

***

### How does it work?

The Actor reads the same public Best Sellers pages any visitor sees, over plain HTTP, with no browser and no Amazon account. It collects every ranked product of each page, so a category gives all 100 ranks Amazon lists, and it stops as soon as the list ends. Requests go out directly or through the proxy you choose. When a category page comes back blocked or empty, the Actor waits a short random pause, retries on a fresh connection and then through an Apify Residential proxy, so a temporary block does not end up as an empty result. It returns only publicly visible data, and every row keeps the same 14 fields whatever the marketplace or language, because prices, ratings and counts are read in each marketplace's own number format.

***

### How do you integrate Amazon Best Sellers Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### MCP integration for AI agents

Register the Apify MCP server once with this Actor as a tool, and your agent can call it with your category URLs.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/amazon-bestsellers-scraper"
```

This registers this Actor as a tool your agent can call directly. The same server URL works in Claude Code, Cursor and Windsurf.

#### No-code tools (n8n, Make, LangChain)

- **n8n**: add the Apify node, choose "Run an Actor", pick this Actor and paste your input JSON; the next node receives the dataset items.
- **Make**: use the Apify app's "Run an Actor" module, then "Get Dataset Items" to pass every product row to Google Sheets, Airtable or a database.
- **LangChain**: run the Actor, then load its dataset with `ApifyDatasetLoader` from `langchain-apify` to turn each product into a document for your chain or vector store.

***

### Is it legal to scrape Amazon data?

Scraping publicly available product data from Amazon is generally lawful, as long as you respect the site's terms and applicable law. Amazon Best Sellers Scraper returns only publicly available data — what any user sees without logging in: product names, prices, ranks and ratings, which is product data rather than personal data. GDPR: scraping public data is generally permissible, but storing and using it must comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Amazon Best Sellers Scraper return?

It returns the rank, product name, price with currency, star rating and ratings count for every product, plus the offer count, ASIN, product link, thumbnail and category details. See [the data fields section](#what-data-can-i-extract-with-amazon-best-sellers-scraper) for the full list.

#### Does Amazon Best Sellers Scraper require an Amazon account or login?

No. Only public Best Sellers data is extracted, and no Amazon credentials, cookies or API keys are needed.

#### How fast does Amazon Best Sellers Scraper run?

A recorded run returned the full 100-product list of one category in 10.3 seconds, and 15 marketplaces at once returned 1,498 products in 41.8 seconds. Data is fetched live from Amazon on every run, not from a cache.

#### What happens if a category is blocked or doesn't exist?

A URL without `best-sellers`, `bestsellers` or `zgbs` is skipped before scraping and named in the log. A category page that stays blocked or empty after four connection attempts is logged as skipped and the run continues with the other URLs; no error rows are added to the dataset, so in code you simply get fewer rows for that input URL.

#### Can I scrape multiple Amazon best sellers lists at once?

Yes. Put every list in the category URLs field: they run at the same time, across any mix of marketplaces, and each row carries the input URL it came from, so you can group results as amazon best sellers by category.

#### Does Amazon Best Sellers Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Amazon Best Sellers Scraper is available as an MCP tool through the Apify MCP server. Register it with `claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/amazon-bestsellers-scraper"` in Claude Code, Cursor or Windsurf and the agent gets this Actor as a ready-to-call tool. Any agent that can call an HTTP endpoint can use the Apify REST API directly.

#### Does Amazon Best Sellers Scraper return data in a format LLMs can use directly?

Yes. Rows are typed, normalized JSON with consistent field names: no HTML parsing, no selectors. Pass them straight to an LLM, index them into a vector store, or feed them to an agent tool with no transformation step.

#### What happens when Amazon changes its layout or updates its anti-bot system?

The Actor is maintained, and when Amazon changes its pages the Actor is updated so your calls keep returning the same JSON schema with no changes on your end. Until then, a blocked page is detected and retried on a fresh connection and a residential proxy instead of being saved as an empty result.

#### Can I use Amazon Best Sellers Scraper without managing proxies or browser infrastructure?

Yes. Connection retries and the switch to a residential proxy on blocked pages happen on the Actor's side, and no browser is used at all. You send one request and get structured JSON back.

#### Which Amazon best sellers fields work best for AI training data and RAG indexing?

For RAG, the product name, category heading and subcategory names carry the most text. For training data, the rank, price, star rating, ratings count and offer count are numbers or null, never free text, so no normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know through the Issues tab of this Actor in Apify Console, and include the category URL and marketplace so the problem can be reproduced. Reports go straight into fixing this amazon bestsellers scraper and its amazon bestseller list extractor.

# Actor input Schema

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

📋 One or more Amazon Best Sellers category page URLs. Each URL must contain best-sellers, bestsellers or zgbs (for example https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ or https://www.amazon.de/gp/bestsellers/ce-de/); other URLs are skipped. Works on any Amazon marketplace with a Best Sellers section. All URLs are scraped at the same time.

## `maxResults` (type: `integer`):

📈 Maximum number of products per category URL, subcategory rows included. One Best Sellers list holds up to 100 ranked products. Free plan: up to 20 products per run (all category URLs together) and 200 per month; paid plans have no limit.

## `subcategoryDepth` (type: `integer`):

1️⃣ = main category only. 2️⃣ or more = after the main list, also scrape the first page (up to 50 products) of each subcategory in the category's menu, one level deep, until Max results is reached. Default: 2.

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

🗣️ Language to request from Amazon. Amazon shows the page in that language only when the marketplace offers it and accepts the request; otherwise the marketplace's default language is used. Product names and category labels come back in the language Amazon shows.

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

🔒 Proxy settings. Default is no proxy. With Apify Proxy a fresh proxy IP is used on each new attempt; with your own proxy URLs only the first one is used. If a category page comes back blocked or empty, the scraper retries on a fresh connection and then through an Apify Residential proxy (also when no proxy is selected). Apify Residential proxy is recommended for reliable results.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
  ],
  "maxResults": 10,
  "subcategoryDepth": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the Actor's default dataset.

# 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/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

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

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

```

## MCP server setup

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