# Amazon Best Sellers Scraper: Top 100, Prices & Ratings (`serenido/amazon-best-sellers`) Actor

Top 100 products of any Amazon Best Sellers or New Releases list on 21 Amazon sites: rank, ASIN, title, price, stars, ratings count, author and format for books, offers, image. Subcategories too. No login.

- **URL**: https://apify.com/serenido/amazon-best-sellers.md
- **Developed by:** [Serenido](https://apify.com/serenido) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 product saveds

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

> ⭐ If this tool saves you time, please leave a quick review on this page. It helps other people find it. Found a problem? Open an issue in the Issues tab and we'll fix it fast.

### What does Amazon Best Sellers Scraper do?

Paste any Amazon Best Sellers link and get the full top 100, one clean row per product: rank, ASIN, title, price, star rating, number of ratings, image and link. Books also get the author and the format (Hardcover, Paperback, Kindle Edition). Works for New Releases, Movers & Shakers, Most Wished For and Gift Ideas too, on 21 Amazon sites, for whole departments or any subcategory. Download as Excel, CSV or JSON, or use the API.

No login, no browser, no cookies from you.

### Why this one?

- **The full top 100.** Amazon shows 30 products when a page opens and loads the rest while you scroll. This tool loads all of them, then page 2, so you get ranks 1 to 100, in order.
- **Local prices on 21 Amazon sites.** Each site is read through an IP of its own country, so prices come in the local currency (GBP on amazon.co.uk, EUR on amazon.de, JPY on amazon.co.jp...). A page that shows converted prices is loaded again.
- **Star rating and ratings count on every row**, plus "3 offers from $12.99" offers, the author and format for books, and points on amazon.co.jp.
- **Whole category trees.** Give a department and set **Subcategory levels** to 1, 2 or 3 to get the top 100 of every subcategory under it. The all-departments link (`/gp/bestsellers`) loads every department.
- **Free rows for problems.** Empty lists, categories Amazon does not have, bad links and pages that could not be loaded come back as rows with a `status` and a message. **They are not charged.**
- **Tested.** 21 Amazon sites, 33,690 rows checked one by one (rank order, prices, currency, links), and compared by hand with real browser screenshots of amazon.com, amazon.co.uk and amazon.co.jp: same ranks, titles, prices and ratings counts. One run loaded 120 Electronics subcategories (11,646 products) in under 7 minutes.

### What data do you get?

| Group | Fields |
|---|---|
| Product | rank, asin, title, image, url |
| Price | price, priceMax (price ranges), priceText, currency, offerCount ("3 offers from"), priceNote (when Amazon hides the price) |
| Reviews | rating, ratingsCount |
| Books | author, format, formatsAvailable |
| Extras | points (amazon.co.jp), salesRank, salesRank24hAgo, salesRankChangePercent (Movers & Shakers) |
| List | listType, listName, category, categoryPath, categoryId, categoryUrl, marketplace, page |
| Run | status, input, message, scrapedAt |

### How much does it cost?

You pay per ranked product saved with `status: "ok"`. Check the **Pricing** tab for the current price. Proxies and platform costs are included. Problem rows are free.

### How to use it

1. Open an Amazon Best Sellers page in your browser, go to the department or subcategory you want and copy the link. Paste it into **Amazon list links**, one per line. Links from any of the 21 sites work, also New Releases, Movers & Shakers, Most Wished For and Gift Ideas links.
2. Or type department names into **Or category names** (`kitchen`, `electronics`, `books`, `toys-and-games`, or `kitchen/289668` for a subcategory) and pick the Amazon site and the list.
3. Optional: set **Products per list** (up to 100) and **Subcategory levels**.
4. Click **Start**. Download the results or connect them to Google Sheets, Make, Zapier or your app. To follow a list over time, schedule the run daily.

### Input example

```json
{
  "startUrls": [
    "https://www.amazon.com/gp/bestsellers/kitchen",
    "https://www.amazon.co.uk/gp/new-releases/books",
    "https://www.amazon.com/Best-Sellers-Kitchen-Dining-Bakeware/zgbs/kitchen/289668"
  ],
  "maxItemsPerCategory": 100,
  "subcategoryDepth": 0
}
```

### Output example

A real row from the amazon.com Kitchen & Dining list:

```json
{
  "status": "ok",
  "rank": 1,
  "asin": "B0BZYCJK89",
  "title": "Owala FreeSip Stainless Steel Water Bottle 24 oz Denim",
  "price": 29.99,
  "priceText": "$29.99",
  "currency": "USD",
  "rating": 4.6,
  "ratingsCount": 143795,
  "image": "https://images-na.ssl-images-amazon.com/images/I/61Gvw0-b0eL._AC_UL900_SR900,600_.jpg",
  "url": "https://www.amazon.com/dp/B0BZYCJK89",
  "listType": "bestsellers",
  "listName": "Best Sellers",
  "category": "Kitchen & Dining",
  "categoryPath": "Kitchen & Dining",
  "categoryId": "kitchen",
  "categoryUrl": "https://www.amazon.com/gp/bestsellers/kitchen",
  "marketplace": "US",
  "page": 1,
  "scrapedAt": "2026-10-28T22:31:13Z"
}
```

A book from the Books list adds `"author": "Sarah J. Maas"`, `"format": "Hardcover"` and `"formatsAvailable": 5`.

A list Amazon shows as empty looks like this, and costs nothing:

```json
{"status": "list_empty", "listName": "Movers & Shakers", "marketplace": "US", "categoryUrl": "https://www.amazon.com/gp/movers-and-shakers/kitchen", "message": "Amazon shows no products in this list right now: \"Sorry, there are no movers and shakers available in this category. Please check back later.\""}
```

### Status values

| status | Meaning | Charged |
|---|---|---|
| ok | A ranked product | Yes |
| list_empty | Amazon shows no products in this list right now (also its answer for a department name it does not know) | No |
| not_found | Amazon has no list page at this link | No |
| invalid_link | Not an Amazon list link or category name | No |
| failed | Amazon refused every try. Run it again later | No |

### Good to know

- **Missing prices are Amazon's.** About 3 in 100 products show no price on the list itself (for example "MSRP: Click for details", or no offer right now). `price` is then empty, and `priceNote` says why when Amazon gives a reason.
- **Rank numbers are Amazon's own.** Now and then Amazon skips a number (one list had ranks 1 to 49 and 51 to 99). Smaller categories can have fewer than 100 products.
- **Movers & Shakers, Most Wished For and Gift Ideas** were empty on amazon.com and amazon.co.uk when this tool was tested (October 2026): Amazon's own page says "Sorry, there are no ... available". Those rows are free.
- **Department names differ by site.** `electronics` works on most sites, but amazon.de uses other names. If a typed name comes back empty, copy the link from the site instead.
- **Prices** are what a logged-out visitor in that country sees at `scrapedAt`. Deals can change during the day.
- **Proxy:** keep the default. amazon.com uses datacenter IPs, other sites use residential IPs of their own country.

### Use cases

- **Product research:** find what sells right now in any category and country, with prices and review counts.
- **Trend tracking:** schedule daily runs and follow ranks and prices over time, or watch New Releases.
- **Dropshipping and sourcing:** compare Amazon's best sellers with AliExpress, 1688 or TikTok Shop prices.
- **Book and Kindle charts:** authors, formats and prices of the top books.
- **Market and competitor reports:** whole category trees in one run.
- **Black Friday and holiday shopping:** see what climbs into the top 100 before and during Black Friday, Cyber Monday and Christmas.

### Black Friday, Cyber Monday and Christmas

Amazon ranks its best sellers by sales and says the lists are "updated frequently". To follow them through the season:

1. Pick the lists you care about, for example Toys & Games, Electronics or Beauty, on one or more of the 21 Amazon sites.
2. Schedule a run every day (or every few hours) from early November to Cyber Monday, and again before Christmas.
3. Compare the runs by `asin` and `rank`: new products in the top 100, products moving up, and prices on each day.

Good for Christmas gift ideas, holiday stock planning, and seeing which products sell best on Black Friday in each country. Each row shows the price Amazon showed at `scrapedAt`. This tool reads the best seller lists, not Amazon's Today's Deals page.

### Is it legal?

It collects only public list information that Amazon shows to any logged-out visitor. It does not log in, solve captchas or collect personal data. Check that your use follows Amazon's terms and the law where you are.

### More tools for sellers and dropshippers

- **[AliExpress Product Details Scraper](https://apify.com/serenido/aliexpress-product-details)**: price, every variant with stock, and the shipping cost to your country for AliExpress products.
- **[TikTok Shop Product Details Scraper](https://apify.com/serenido/tiktok-shop-product-details)**: price, sold count, rating and every variant with stock for TikTok Shop products.
- **[1688 Product Details Scraper](https://apify.com/serenido/1688-product-details)**: factory prices on 1688.com, the Chinese wholesale site, in English with USD prices.

# Actor input Schema

## `startUrls` (type: `array`):

One per line. Any Amazon Best Sellers, New Releases, Movers & Shakers, Most Wished For or Gift Ideas link, from any of the 21 supported Amazon sites, for a department or a subcategory. Examples: https://www.amazon.com/gp/bestsellers/kitchen, https://www.amazon.co.uk/gp/new-releases/books, https://www.amazon.com/Best-Sellers-Kitchen-Dining-Bakeware/zgbs/kitchen/289668. The link https://www.amazon.com/gp/bestsellers (all departments) loads every department's list.

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

Instead of links: a department as Amazon writes it in its links (kitchen, electronics, books, toys-and-games, beauty...) or department/number for a subcategory (kitchen/289668). Uses the Amazon site and list chosen below.

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

Only used for category names. Links keep their own Amazon site.

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

Only used for category names. Links keep their own list.

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

How many ranked products to save from each list. Amazon shows up to 100.

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

0 = only the lists you give. 1 = also every subcategory one level down (Kitchen & Dining -> Bakeware, Cookware...). 2 or 3 = deeper. Each subcategory is its own top 100.

## `maxCategories` (type: `integer`):

Stop adding lists (departments and subcategories) after this many.

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

Stop after this many products in the whole run.

## `maxConcurrency` (type: `integer`):

How many lists load at the same time.

## `proxy` (type: `object`):

Keep the default: amazon.com uses datacenter IPs, other Amazon sites use residential IPs of their own country, so prices come in the local currency. Your own proxy URLs are used for every site if you add them.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.amazon.com/gp/bestsellers/kitchen"
  ],
  "marketplace": "US",
  "listType": "bestsellers",
  "maxItemsPerCategory": 100,
  "subcategoryDepth": 0,
  "maxCategories": 200,
  "maxItems": 100000,
  "maxConcurrency": 5,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `all` (type: `string`):

No description

# 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 = {
    "startUrls": [
        "https://www.amazon.com/gp/bestsellers/kitchen"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("serenido/amazon-best-sellers").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 = {
    "startUrls": ["https://www.amazon.com/gp/bestsellers/kitchen"],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("serenido/amazon-best-sellers").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 '{
  "startUrls": [
    "https://www.amazon.com/gp/bestsellers/kitchen"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call serenido/amazon-best-sellers --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,serenido/amazon-best-sellers"
        }
    }
}
```

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/AkeX84L6mmtr8SIq8/builds/EyXpniuOl6AgjaLUm/openapi.json
