# Amazon Best Sellers Scraper (`schnellscrapers/amazon-best-sellers-scraper`) Actor

Extract ranked Amazon Best Sellers products with rank, ASIN, title, price, rating, review count, image, and product URL. Filter by rating or price for market research and scheduled trend snapshots. Direct category pages keep runs lightweight.

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

## Pricing

$1.00 / 1,000 products

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### What does Amazon Best Sellers Scraper do?

Amazon Best Sellers Scraper turns Amazon category ranking pages into one clean dataset row per product. It returns the rank, ASIN, title, displayed price, currency, rating, review count, image URL, category, and direct product URL for seller research, product discovery, and scheduled trend snapshots.

The actor reads the ranked category page you provide and stops at your product and page limits. It does not open every product detail page, request seller offers, or expand variants, which keeps a category snapshot small and easy to run on a schedule.

### What data can you extract from Amazon Best Sellers?

- Ranking — `rank`, `category`, `marketplace`, and `sourceUrl`
- Product identity — `asin`, `title`, and `productUrl`
- Market signals — `price`, `currency`, `rating`, and `reviewCount`
- Catalog media — `imageUrl` and `scrapedAt`

Prices and ratings are the values shown on the supplied marketplace page. Products without a visible price, image, or rating keep that field as `null` rather than being guessed.

### How to use Amazon Best Sellers Scraper

1. Open the actor and go to the Input tab.
2. Add one or more Amazon Best Sellers category URLs, such as `https://www.amazon.com/gp/bestsellers/beauty/`.
3. Set the maximum products and pages per category. Use the rating or price filters when you need a narrower list.
4. Click Run. The actor follows Amazon's Next page link only up to your page limit.
5. Open the Dataset tab and download JSON, CSV, Excel, or use the dataset API.

### How much does Amazon Best Sellers Scraper cost?

Pricing is pay per emitted product, from `$1.00 / 1,000 products`, with no monthly actor fee. A product that fails validation, is duplicated by ASIN, or is removed by your rating/price filters is not written and is not billed. There is no separate actor-specific free tier; set `maxItems` to 10 for a small test run using your Apify account credits.

The default run reads one category page and usually returns about 30 products. Increase `maxPagesPerCategory` only when you need deeper ranks, because each extra page adds another source request.

### Input

`categoryUrls` is required and accepts one or more full Amazon Best Sellers category URLs. `maxItems` caps the complete run, while `maxItemsPerCategory` and `maxPagesPerCategory` control each source list. `minRating` and `maxPrice` filter records before they reach the dataset. The price filter uses the marketplace currency shown on the page.

```json
{
  "categoryUrls": [
    { "url": "https://www.amazon.com/gp/bestsellers/beauty/" },
    { "url": "https://www.amazon.co.uk/gp/bestsellers/books/" }
  ],
  "maxItems": 50,
  "maxItemsPerCategory": 30,
  "maxPagesPerCategory": 1,
  "minRating": 4,
  "maxPrice": 25
}
```

### Output

Each dataset row is a ranked product snapshot. `productUrl` links to the ASIN's Amazon page, and `sourceUrl` identifies the category list that supplied the rank.

```json
{
  "rank": 1,
  "asin": "B09541P9WH",
  "title": "Amazon Basics Double-Tipped Cotton Swabs for Personal Hygiene and Baby Care, Cotton, Versatile, Baby Safe, 500 Count",
  "price": 2.66,
  "currency": "USD",
  "rating": 4.7,
  "reviewCount": 79150,
  "productUrl": "https://www.amazon.com/dp/B09541P9WH",
  "imageUrl": "https://images-na.ssl-images-amazon.com/images/I/613il0ooZ1L._AC_UL600_SR600,400_.jpg",
  "category": "Beauty & Personal Care",
  "marketplace": "www.amazon.com",
  "sourceUrl": "https://www.amazon.com/gp/bestsellers/beauty/",
  "scrapedAt": "2026-08-08T16:38:12.560Z"
}
```

### Integrations

Use the Apify API to start a run and read the default dataset from Python or Node.js. Scheduled runs can build a daily rank and price history; webhooks can pass completed datasets to Make, n8n, Zapier, Google Sheets, or a warehouse.

### Related actors

- [Amazon Scraper](https://apify.com/junglee/free-amazon-product-scraper) — use it when you need broader product pages, reviews, or descriptions.
- [Amazon ASINs Scraper](https://apify.com/junglee/amazon-asins-scraper) — use it when you need ASIN discovery and related product data.
- [Amazon Bestsellers Scraper](https://apify.com/junglee/amazon-bestsellers) — compare with a top-100 bestseller list workflow.

### FAQ

#### How does Amazon Best Sellers Scraper work?

It fetches the Amazon Best Sellers HTML page supplied in `categoryUrls` and reads each ranked product card. The actor follows a page's Next page link only within `maxPagesPerCategory`, deduplicates ASINs, applies filters, validates the row, and then writes it to the dataset.

#### Can I use Amazon Best Sellers Scraper as an API?

Yes. Start the actor through the Apify API, wait for the run to finish, and read `defaultDatasetId` using the dataset items endpoint. The API tab on the actor page provides ready-to-run cURL, Python, and JavaScript examples.

#### Can I use Amazon Best Sellers Scraper in Python or Node.js?

Yes. Use `apify-client` to start the actor and iterate over the resulting dataset.

```js
const run = await client.actor("YOUR_USERNAME/amazon-best-sellers-scraper").call({
  categoryUrls: [{ url: "https://www.amazon.com/gp/bestsellers/beauty/" }],
  maxItems: 30
});
```

#### What does this actor access?

It accesses the public Amazon Best Sellers category pages you provide. It does not require an Amazon login or an Amazon API key. Marketplace pages can show different prices, currencies, rankings, or available fields.

#### Is it legal to scrape Amazon Best Sellers pages?

The actor reads publicly visible category data, but you are responsible for checking the rules, contracts, and laws that apply to your use case and location. Do not use it to collect private or sensitive information.

#### Why is a price or rating sometimes null?

Amazon does not display every field on every category card. The actor preserves a missing value as `null` and does not make a second product-page request to fill it.

### Your feedback

If a category page stops parsing correctly or you need another ranked-list field, report it through the actor's Issues tab with the source URL and marketplace. Feature requests for additional list types or filters are welcome.

# Actor input Schema

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

Paste Amazon Best Sellers category URLs such as `https://www.amazon.com/gp/bestsellers/beauty/`. Use one or more URLs from supported Amazon marketplaces.

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

Stop after this many products across all category URLs. Set a small cap for a quick price and rank snapshot.

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

Maximum products to emit from each category URL. The first page usually contains about 30 ranked products.

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

Follow Amazon's Next page link up to this many pages per category. Each extra page adds another source request.

## `minRating` (type: `number`):

Keep products with this star rating or higher. Use 0 to keep every ranked product.

## `maxPrice` (type: `number`):

Keep products at or below this displayed price in the marketplace currency. Use 0 to disable the filter; products without a visible price are excluded when a limit is set.

## `dryRun` (type: `boolean`):

Match filters and validate records without writing dataset items. Logs report selected products and written products.

## Actor input object example

```json
{
  "categoryUrls": [
    {
      "url": "https://www.amazon.com/gp/bestsellers/beauty/"
    }
  ],
  "maxItems": 100,
  "maxItemsPerCategory": 30,
  "maxPagesPerCategory": 1,
  "minRating": 0,
  "maxPrice": 0,
  "dryRun": false
}
```

# Actor output Schema

## `records` (type: `string`):

Default dataset of Best Sellers products with rank, ASIN, title, price, rating, review count, image, category, marketplace, and source URL.

# 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": [
        {
            "url": "https://www.amazon.com/gp/bestsellers/beauty/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("schnellscrapers/amazon-best-sellers-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": [{ "url": "https://www.amazon.com/gp/bestsellers/beauty/" }] }

# Run the Actor and wait for it to finish
run = client.actor("schnellscrapers/amazon-best-sellers-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": [
    {
      "url": "https://www.amazon.com/gp/bestsellers/beauty/"
    }
  ]
}' |
apify call schnellscrapers/amazon-best-sellers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,schnellscrapers/amazon-best-sellers-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/kvMCervremFKN13zz/builds/hvTHLhddMC4vLJyUs/openapi.json
