# Amazon Best Sellers Scraper — Category Rankings (`logiover/amazon-bestsellers-scraper`) Actor

Scrape Amazon Best Sellers, New Releases, Movers & Shakers, Most Wished For and Gift Ideas charts for any category. Returns rank, ASIN, title, price, rating and review count across 19 marketplaces. No API key.

- **URL**: https://apify.com/logiover/amazon-bestsellers-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Features:** Limited permissions
- **Stats:** 25 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 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

## Amazon Best Sellers Scraper — Category Rankings & ASIN Data

Scrape Amazon's ranked charts for any category and export them to CSV, JSON or Excel: **Best Sellers, New Releases, Movers & Shakers, Most Wished For and Gift Ideas** — with rank, ASIN, title, price, star rating and review count, across **19 Amazon marketplaces**.

No Amazon API key. No login.

***

### Search results tell you what Amazon shows. Charts tell you what sells.

A keyword search returns whatever the ranking algorithm decides to surface for that query, sponsored placements included. A Best Sellers chart is ordered by actual sales rank.

The five charts answer different questions:

| Chart | What it reveals |
|---|---|
| **Best Sellers** | What is selling right now, ranked 1–100 |
| **New Releases** | Recent launches already gaining traction |
| **Movers & Shakers** | Biggest *rank gains* in 24 hours — products taking off before they are established |
| **Most Wished For** | Demand that has not converted yet — a leading indicator |
| **Gift Ideas** | What is actually being bought for others, which peaks seasonally |

**Movers & Shakers** is the sharpest of the five for spotting a trend early: it ranks by change, not by position.

***

### What this Actor extracts

| Field | Type | Description |
|---|---|---|
| `rank` | integer | Position in the chart, read from the badge Amazon prints on the card |
| `asin` | string | Amazon's product identifier |
| `title` | string | Product title |
| `url` | string | Product detail page |
| `price` | number | Price as a number |
| `priceText` | string | Price as Amazon renders it |
| `currency` | string | Currency of the marketplace |
| `rating` | number | Average star rating out of 5 |
| `reviewCount` | integer | Number of ratings |
| `imageUrl` | string | Product thumbnail |
| `category` | string | Chart category slug |
| `listType` | string | Which of the five charts |
| `marketplace` | string | Amazon storefront |
| `page` | integer | Chart page (1 or 2) |
| `scrapedAt` | string | UTC timestamp of extraction |

`rank` is read from the printed badge rather than inferred from grid order, so the number stays correct even when the layout reflows or a card is missing.

***

### Input

```json
{
  "categories": ["electronics", "kitchen", "toys-and-games", "pet-supplies"],
  "listType": "bestsellers",
  "marketplace": "US",
  "maxResults": 2000
}
```

| Input | Default | Notes |
|---|---|---|
| `categories` | one default category | Slugs as they appear in a Best Sellers URL. A full chart URL works too. |
| `listType` | `bestsellers` | `bestsellers`, `newReleases`, `moversAndShakers`, `mostWishedFor`, `giftIdeas`. |
| `marketplace` | `US` | One of 19 storefronts. |
| `maxPagesPerCategory` | 2 | Amazon caps each chart at 100 products over two pages. |
| `maxResults` | 500 | Global cap. `0` = unlimited. |

**Nothing is required.** Run it with empty input (`{}`) and it scrapes a default busy category so you can see the output shape first.

#### Common category slugs

`electronics` · `books` · `kitchen` · `toys-and-games` · `sporting-goods` · `beauty` · `pet-supplies` · `office-products` · `home-garden` · `automotive` · `videogames` · `baby-products` · `tools` · `appliances` · `musical-instruments` · `arts-crafts` · `industrial` · `fashion`

***

### Output sample

```json
{
  "rank": 2,
  "asin": "B0DCH8VDXF",
  "title": "Apple EarPods Headphones with USB-C Plug",
  "url": "https://www.amazon.com/dp/B0DCH8VDXF",
  "price": 19,
  "priceText": "$19.00",
  "currency": "USD",
  "rating": 4.6,
  "reviewCount": 16321,
  "category": "electronics",
  "listType": "bestsellers",
  "marketplace": "US",
  "scrapedAt": "2026-08-06T18:25:00.000Z"
}
```

***

### Use cases

#### Product sourcing for private label

Scan many categories at once and look for charts where the top ranks are cheap and lightly reviewed. High rank with few reviews means demand exists and no incumbent has locked it in.

#### Trend detection

Run **Movers & Shakers** daily against a set of categories and diff the results. A product appearing near the top two days running is a trend forming, not noise.

#### Competitive rank tracking

Track your own ASINs' `rank` over time per category and marketplace. Because `rank` is read from the page, the series is directly comparable across runs.

#### Seasonal planning

**Gift Ideas** and **Most Wished For** move ahead of the buying season. Scraping them through Q4 shows demand building before it shows up in Best Sellers.

#### Cross-market expansion research

The same category ranks differently in each of the 19 storefronts. Comparing `electronics` in `US`, `DE` and `JP` tells you where a product has room before you commit inventory.

***

### Integrating the results

**HTTP**

```bash
curl "https://api.apify.com/v2/acts/logiover~amazon-bestsellers-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"categories":["electronics"],"listType":"moversAndShakers"}'
```

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/amazon-bestsellers-scraper").call(
    run_input={
        "categories": ["electronics", "kitchen", "pet-supplies"],
        "listType": "moversAndShakers",
        "maxResults": 1000,
    }
)
for p in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(p["rank"], p["title"], p["price"], p["rating"])
```

Schedule it daily in Apify and push the output to Google Sheets, Airtable or a database through the built-in integrations, or read it from an AI agent over MCP.

***

### Frequently asked questions

#### How many products can one run return?

A single test run returned **1,140 products across twenty categories**, with rank and price on 100% of rows and ratings on 99%. Each chart is capped by Amazon at 100 products, so scale comes from scraping more categories and more marketplaces rather than deeper pagination.

#### Why is `maxPagesPerCategory` limited to 2?

Because Amazon publishes only 100 products per chart, split across two pages of 50. Asking for more pages would return nothing.

#### What is the difference between Best Sellers and Movers & Shakers?

Best Sellers ranks by current sales volume, so it is dominated by established products. Movers & Shakers ranks by *change* in sales rank over 24 hours, which surfaces products accelerating right now — the useful signal if you are hunting trends rather than confirming them.

#### Can I get full product details for the ASINs in a chart?

Yes. Take the `asin` values and feed them into the **Amazon Product Detail Scraper** for specs, description, seller, Best Sellers Rank and full-size images.

#### Is scraping Amazon legal?

This Actor reads publicly available chart pages, does not log in, and collects no personal data. How you use the output is your responsibility; review Amazon's terms and your local rules before redistributing data commercially.

***

### Related Actors

- **Amazon Product Detail Scraper** — full record for any ASIN in the chart.
- **Amazon Scraper (Product Search)** — keyword-level search rather than category charts, with sponsored-placement flags.

A natural pipeline: **charts here → take the ASINs → enrich with the detail Actor → compare against keyword search rank.**

***

### Pricing

Pay per result — one charge per ranked product returned, plus a negligible flat fee when a run starts. No subscription, no minimum.

***

*This Actor uses publicly available data. Amazon is a trademark of Amazon.com, Inc. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Amazon.*

***

\*Maintained: last verified 2026-11-14 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

***

### Related scrapers

Other Actors from the same collection:

- [Amazon](https://apify.com/logiover/amazon-product-scraper)
- [Subito.it](https://apify.com/logiover/subito-it-property-scraper)
- [Wikipedia Category](https://apify.com/logiover/wikipedia-category-scraper)
- [Fiverr](https://apify.com/logiover/fiverr-scraper)

### How much Amazon Best Sellers data can you extract in one run?

A single run returned **30 rows** in 13 seconds on the example input. That example is deliberately narrow; the result limit and the input list are both yours to widen. That is roughly **138 rows a minute**.

There is no hard ceiling built into this Actor. What bounds a run is the result limit you set, the breadth of the input you give it, and how much Amazon Best Sellers itself publishes. Because billing is per result, a wider run costs proportionally more and a narrow one costs almost nothing — so it is worth starting small and scaling once the output looks right.

### Amazon Best Sellers scraping — frequently asked questions

#### Do I need a Amazon Best Sellers API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

#### How do I export Amazon Best Sellers data to CSV, Excel, JSON or Google Sheets?

Open the **Storage** tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

#### Can I schedule this Amazon Best Sellers scraper to run daily or hourly?

Yes. Use the **Schedules** tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the rows you care about really do change that fast.

#### How many rows can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

#### Is scraping Amazon Best Sellers legal?

This Actor collects only information that Amazon Best Sellers publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

#### What happens if Amazon Best Sellers blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run **fails with the reason** instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

#### Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

### 🤖 AI Agents, MCP & RAG Integration

**Amazon Best Sellers Scraper** works natively as an on-demand data tool for AI assistants and autonomous workflows.

Connect this Actor directly to **Apify AI**, **Claude Desktop**, **Cursor**, **VS Code**, **Windsurf**, **LangChain**, or **LlamaIndex** via the official **Apify MCP Server** — no custom wrapper code needed:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=logiover/amazon-bestsellers-scraper"
    }
  }
}
```

- **Schema-typed inputs & outputs:** Clean JSON records with explicit `.actor/input_schema.json` and `.actor/output_schema.json` definitions so LLM agents infer parameters and parse fields accurately without HTML noise.
- **Bounded & predictable runs:** Built-in volume caps and pay-per-result budget guards prevent runaway agent tool loops.
- **RAG & automation ready:** Stream run datasets straight into vector stores, n8n, Make, Zapier, or webhook pipelines.

### 💬 Support, Issues & Reviews

- **Bug reports & target-site changes:** Hit an unexpected empty result or selector change? [Open a ticket in the Issues tab](https://apify.com/logiover/amazon-bestsellers-scraper/issues) with your **Run ID** or sample input — we actively monitor issues and ship fixes fast.
- **Feature & field requests:** Need an additional data attribute or filter? [Request it in the Issues tab](https://apify.com/logiover/amazon-bestsellers-scraper/issues).
- **Enjoying this Actor?** If it saved you engineering time, please consider leaving an honest [review on Apify Store](https://apify.com/logiover/amazon-bestsellers-scraper/reviews) or bookmarking [logiover/amazon-bestsellers-scraper](https://apify.com/logiover/amazon-bestsellers-scraper) — organic developer feedback helps others discover reliable tools and keeps maintenance prioritized.

### 📝 Changelog

#### 2026-11-14

- Verified live production health run (2026-11-14): extracted **60** structured records in **9.1s** with valid schema output.
- Hardened internal proxy stall fallback and pay-per-event dataset instance budget protection.

#### 2026-11-11

- Added reliable terminal run status telemetry and structured Apify AI / MCP Server (`mcp.apify.com`) tool configuration.
- Added direct Issues & Reviews support links and refreshed live maintenance verification.

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.

#### 2026-10-15

- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Runs with a short timeout (API and AI-agent calls) now finish inside it with what they collected, instead of being cut off.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.
- The default used when the field is left out for `maxResults` is now 2,769 (was 500).

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 15 columns returned, 100.0% of cells populated.
- Run reliability reviewed: 99.2% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.

#### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

#### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

#### 2026-08-06

- First release.
- Scrapes five Amazon charts — Best Sellers, New Releases, Movers & Shakers, Most Wished For, Gift Ideas — for any category across 19 marketplaces.
- Rank is read from the badge Amazon prints on the card rather than inferred from grid order.
- Prices, ratings, review counts and rank stored as numbers.
- TLS-impersonating client over residential proxy with a fresh exit IP per attempt and exponential backoff.
- Empty input scrapes a default category instead of erroring, bounded by `maxResults` (default 500).

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/amazon-bestsellers-scraper/changelog.md

# Actor input Schema

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

Category slugs as they appear in a Best Sellers URL, e.g. 'electronics', 'books', 'kitchen', 'toys-and-games'. A full chart URL works too. Leave EMPTY to scrape a default busy category.

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

Which Amazon chart to read. 'Movers & Shakers' is the one that surfaces products gaining rank fastest.

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

Which Amazon storefront to read the chart from.

## `maxPagesPerCategory` (type: `integer`):

Amazon caps each chart at 100 products over two pages of 50.

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

Global cap for the run. 0 = unlimited.

## Actor input object example

```json
{
  "categories": [
    "electronics"
  ],
  "listType": "bestsellers",
  "marketplace": "US",
  "maxPagesPerCategory": 2,
  "maxResults": 346
}
```

# Actor output Schema

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

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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"
    ],
    "listType": "bestsellers",
    "marketplace": "US",
    "maxResults": 346
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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"],
    "listType": "bestsellers",
    "marketplace": "US",
    "maxResults": 346,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/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"
  ],
  "listType": "bestsellers",
  "marketplace": "US",
  "maxResults": 346
}' |
apify call logiover/amazon-bestsellers-scraper --silent --output-dataset

```

## MCP server setup

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