# Amazon Bestsellers Scraper: Top 100 & New Releases (`luzivanlt/amazon-bestsellers-scraper`) Actor

All 100 ranks of Amazon Best Sellers and New Releases, down its subcategories. $1.50 per 1,000 products. 22 stores; price, rating, offers, category path.

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

## Pricing

from $1.05 / 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.
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 Bestsellers Scraper: Top 100 & New Releases

Get all 100 ranks of any Amazon Best Sellers or New Releases list, including
the ranks Amazon loads only as you scroll, and the lists of every subcategory
below it if you want them. Each product comes with its rank, ASIN, title,
price, rating and ratings, other offers, author and format for books, and the
list's full category path. No Amazon account, login or cookies needed.

Tested daily. Latest checks: 100 of 100 ranks of Best Sellers in Electronics
on amazon.com in 8 seconds; 1,300 of 1,300 ranks from 13 lists on 12 Amazon
stores in under a minute; Electronics with its 18 subcategories, 1,900
products, in 77 seconds; and the top 3 of every department from the front
pages of 11 stores, 777 products.

### What does this Actor do?

You give it links to Amazon's Best Sellers or New Releases pages, or just a
store and category names. For each list it reads both pages (ranks 1–50 and
51–100) and saves one row per ranked product, in Amazon's order. With
**Subcategory levels** set, it also reads the list of every subcategory under
it, one level or more down, each with its own top 100. The Best Sellers front
page (amazon.com/gp/bestsellers) reads the top 100 of every department.

Each row comes with:

- the rank, ASIN, link, title and image
- rating and the exact number of ratings
- price as a number and as shown, and the currency (and the high end, when
  Amazon shows a price range)
- for products Amazon sells only through other sellers: how many offers there
  are and the lowest offer price
- for books: the author (with a link to the author's page), the format shown
  (Hardcover, Paperback, Kindle) and how many formats there are
- the list (Best Sellers or New Releases) and its title, the category's name,
  id and link, its full path from the department down, and each parent
  category with its link
- the department, how many levels below your link the list is, the page it was
  on, the store, the link you gave, and when the run read it

### Why use it?

- **All 100 ranks.** Amazon's list page shows 30 products and loads the next
  20 only as you scroll; the Actor reads those too, on both pages, so a list
  gives you ranks 1 to 100, not 60.
- **Every subcategory, as deep as you need.** One link to a department and
  **Subcategory levels** set to 1 or 2 gives you the top 100 of every
  category under it, each row with its category path.
- **Best Sellers and New Releases**, from links or from category names, on
  22 Amazon stores (see *Good to know*).
- **Ready to compare over time.** Every row says when it was read and its
  `ranking_id` names the store, list, category and product, so a daily run
  shows each product's rank moving.
- **Use the data anywhere.** Download as JSON, CSV or Excel, or send it to
  your own tools through Apify's API and integrations.

### How to use it

1. Paste one or more Best Sellers or New Releases pages into **Category
   links**, or pick an **Amazon store** and type **Categories** such as
   `electronics` or `books`.
2. Optionally, set **Subcategory levels**, **Ranks per list** and **Max
   products per link or category**.
3. Click **Start**. When the run ends, open the **Output** tab to view the
   products or download them.

Run it with no input to see a sample: the top 100 Best Sellers in Electronics
on amazon.com, charged as usual.

### Input

| Field                                                         | What it does                                                                                              | Default        |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -------------- |
| **Category links** (`categoryUrls`)                           | Best Sellers or New Releases pages from Amazon; each keeps its own store and list                         | —              |
| **Amazon store** (`marketplace`)                              | The store the categories are read on, such as `amazon.com`, `amazon.de` or `amazon.co.jp`                 | `amazon.com`   |
| **Categories** (`categories`)                                 | Category names, as in the link after `/gp/bestsellers/`: `electronics`, `electronics/281407`; empty = all | —              |
| **Lists** (`listTypes`)                                       | `best_sellers`, `new_releases`, or both, for the categories                                               | `best_sellers` |
| **Subcategory levels** (`subcategoryDepth`)                   | How many levels of subcategories to read below each category (0 to 3)                                     | 0              |
| **Ranks per list** (`maxRank`)                                | Read each list down to this rank (1 to 100)                                                               | 100            |
| **Max products per link or category** (`maxProductsPerStart`) | Stop each link or category after this many products, subcategories included (1 to 20,000)                 | 1,000          |

Give at least one link or one category. Example input:

```json
{
  "categoryUrls": ["https://www.amazon.com/gp/bestsellers/kitchen"],
  "subcategoryDepth": 1,
  "maxRank": 20
}
```

### Output

One row per product and list. An example, with made-up values:

```json
{
  "ranking_id": "amazon.com/bestsellers/electronics/281407/B0EXAMPLE1",
  "rank": 3,
  "asin": "B0EXAMPLE1",
  "title": "Screen Protector for Phone, 3 Pack, Tempered Glass",
  "url": "https://www.amazon.com/dp/B0EXAMPLE1",
  "image_url": "https://images-na.ssl-images-amazon.com/images/I/example._AC_UL300_SR300,200_.jpg",
  "rating": 4.6,
  "ratings_count": 115313,
  "price": 6.98,
  "price_max": null,
  "price_text": "$6.98",
  "currency": "USD",
  "offers_count": null,
  "offers_from_price": null,
  "offers_from_text": null,
  "author": null,
  "author_url": null,
  "format": null,
  "formats_available": null,
  "list_type": "best_sellers",
  "list_title": "Best Sellers in Electronics Accessories & Supplies",
  "category_name": "Accessories & Supplies",
  "category_id": "281407",
  "category_url": "https://www.amazon.com/gp/bestsellers/electronics/281407",
  "category_breadcrumbs": ["Electronics", "Accessories & Supplies"],
  "category_parents": [
    { "name": "Electronics", "url": "https://www.amazon.com/gp/bestsellers/electronics" }
  ],
  "department": "electronics",
  "subcategory_level": 1,
  "page": 1,
  "marketplace": "amazon.com",
  "start_url": "https://www.amazon.com/gp/bestsellers/electronics",
  "scraped_at": "2026-10-31T06:00:00.000Z"
}
```

#### Output fields

- `ranking_id`: the store, list, category and ASIN together; one row each
- `rank`: the product's place in the list, 1 to 100
- `asin`, `title`, `url`, `image_url`: the product, its link and image
- `rating`, `ratings_count`: stars out of 5 and the exact number of ratings
- `price`, `price_max`, `price_text`, `currency`: the price as a number (the
  low end of a range), the high end of a range, the price as shown, and its
  currency
- `offers_count`, `offers_from_price`, `offers_from_text`: when the product
  shows "19 offers from $12.93" instead of a price; the text is the lowest
  offer with its currency sign
- `author`, `author_url`, `format`, `formats_available`: books and media
- `list_type`, `list_title`: `best_sellers` or `new_releases`, and the list's
  title as shown
- `category_name`, `category_id`, `category_url`: the category the list ranks
- `category_breadcrumbs`, `category_parents`: the path from the department
  down, and each parent with its link
- `department`, `subcategory_level`, `page`: the department, how many levels
  below your link, and page 1 (ranks 1–50) or 2 (51–100)
- `marketplace`, `start_url`, `scraped_at`: the store, the link or category
  you gave, and when the run started

### How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

This Actor is priced per product saved:

- **$1.50 per 1,000 products** ($0.0015 a product). A product ranked in two
  lists (a category and its subcategory, or Best Sellers and New Releases) is
  two rows, each charged once per run.
- No start fee, and nothing per list.

So the top 100 of one list costs $0.15. If you set a maximum cost for a run,
the Actor stops when it reaches it and keeps every product saved so far.

### How long does a run take?

About 8 seconds for the top 100 of one list. Electronics on amazon.com with
its 18 subcategories (1,900 products) took 77 seconds, and the top 100 of 13
lists on 12 stores took 57 seconds.

### Good to know

- **Amazon ranks 100 products per list.** A list with fewer products in it
  saves what it has.
- **Prices follow the visitor's location.** Amazon shows prices for the
  visitor's address, so a product may show no price, and `currency` tells you
  which currency a price is in.
- **Stores.** All 22 stores listed under **Amazon store** were read in our
  tests: amazon.com, .ca, .com.mx, .com.br, .co.uk, .de, .fr, .it, .es, .nl,
  .com.be, .ie, .se, .pl, .com.tr, .ae, .sa, .eg, .in, .co.jp, .com.au and
  .sg.
- **Movers & Shakers, Most Wished For and Most Gifted are not supported.**
  Their pages showed "Sorry, there are no … available in this category" on
  every store and category we tried, so links to them are refused.
- **The front page reads every department.** It counts the departments as
  level 0, so **Subcategory levels** 1 adds each department's subcategories.
  About 40 departments of 100 products each is about 4,000 products: raise
  **Max products per link or category** to read them all.
- **Subcategory levels multiply quickly.** A department has 10 to 40
  subcategories, each with up to 100 products: one level under Electronics is
  about 2,000 products. **Max products per link or category** stops it.
- **One list that cannot be read does not stop the run.** The others carry
  on, and the run's status lists the links that could not be read.
- **Check your links first.** A link that is not an Amazon Best Sellers or
  New Releases page stops the run before anything is read, and the message
  names it.
- **This Actor reads the list pages only**, not each product's own page, so
  it has no brand, description, bullet points, full image gallery or reviews
  text.

### More Actors from us

- [Amazon Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/amazon-products-scraper): Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- [Airbnb Scraper: Every Stay, Past the 15-Page Limit](https://apify.com/luzivanlt/airbnb-listings-scraper): Every stay of an Airbnb search, past the 15 pages Airbnb shows, checked against its count.
- [Alibaba Products Scraper: Price Tiers & Suppliers](https://apify.com/luzivanlt/alibaba-products-scraper): Alibaba.com products by keyword or link, with price tiers in US dollars on every row.
- [AliExpress Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/aliexpress-products-scraper): Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- [App Store Reviews Scraper: All Reviews, Not 500](https://apify.com/luzivanlt/app-store-reviews-scraper): Every written App Store review of an app, not just the newest 500.
- [Woolworths Coles ALDI Scraper: AU Grocery Prices](https://apify.com/luzivanlt/au-supermarkets-scraper): Woolworths, Coles and ALDI products for any search in one run, every results page to the end.
- [Bilibili Video Scraper: Search & Channel Videos](https://apify.com/luzivanlt/bilibili-videos-scraper): Bilibili videos from searches or whole channels, each with its full detail page's data.

### Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with `POST /v2/acts/…/runs` and read its dataset):

```text
POST https://api.apify.com/v2/acts/luzivanlt~amazon-bestsellers-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
```

With the sample input as its JSON body:

```json
{
  "categoryUrls": ["https://www.amazon.com/gp/bestsellers/electronics"],
  "marketplace": "amazon.com",
  "listTypes": ["best_sellers"],
  "subcategoryDepth": 0,
  "maxRank": 100,
  "maxProductsPerStart": 1000
}
```

Its inputs, in the order of the input form:

| Input                                                     | What it takes                                                                                                                                                                                                                                                             | Default            |
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| `categoryUrls` (Category links)                           | Best Sellers or New Releases pages copied from Amazon, one per line, from any store listed under Amazon store: https://www.amazon.com/gp/bestsellers/electronics, a /Best-Sellers-…/zgbs/… link, or https://www.amazon.com/gp/new-releases/books (the https:// optional). | —                  |
| `marketplace` (Amazon store)                              | The Amazon store the categories below are read on, amazon.com by default.                                                                                                                                                                                                 | `"amazon.com"`     |
| `categories` (Categories)                                 | Categories to read without copying links, as the part of the link after /gp/bestsellers/: a department (electronics, books, kitchen) or a department and a category number (electronics/281407).                                                                          | —                  |
| `listTypes` (Lists)                                       | Which of Amazon's lists to read for each category above: Best Sellers, New Releases, or both (each list is its own top 100).                                                                                                                                              | `["best_sellers"]` |
| `subcategoryDepth` (Subcategory levels)                   | How many levels of subcategories to read below each category, each with its own top 100: 0 reads only the category you gave, 1 adds its subcategories, 2 their subcategories too.                                                                                         | `0`                |
| `maxRank` (Ranks per list)                                | Read each list down to this rank.                                                                                                                                                                                                                                         | `100`              |
| `maxProductsPerStart` (Max products per link or category) | Stop each link or category after this many products, its subcategories included, and go on to the next.                                                                                                                                                                   | `1000`             |

Apify's MCP server, `https://mcp.apify.com`, lists it as `luzivanlt/amazon-bestsellers-scraper`. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:

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

The client signs in with OAuth, or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }`.

Charged per product delivered; the sample input above costs at most $3.00.

### FAQ

**Do I need an Amazon account or cookies?**
No. The Actor reads what anyone can see on Amazon's Best Sellers pages.

**Can I track ranks over time?**
Yes. Run it on a schedule; every row has `scraped_at` and `ranking_id`, so
you can line up the same product in the same list across runs.

**Can I run it from my own code, on a schedule, or with other apps?**
Yes. Like any Apify Actor, you can start it through the Apify API, run it on a
schedule, and connect it to other apps with Apify's integrations and webhooks.

### Is it legal to scrape Amazon?

This Actor reads only what anyone can see on Amazon's Best Sellers pages
without logging in. Check Amazon's terms and the laws that apply to you before
you use the data. If you are unsure, ask a lawyer.

### Support

Found a problem or missing a feature? Open an issue on the **Issues** tab and
include the run's link.

***

This Actor is not affiliated with, endorsed by or sponsored by Amazon.

# Changelog

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

# Actor input Schema

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

Best Sellers or New Releases pages copied from Amazon, one per line, from any store listed under Amazon store: https://www.amazon.com/gp/bestsellers/electronics, a /Best-Sellers-…/zgbs/… link, or https://www.amazon.com/gp/new-releases/books (the https:// optional). A link keeps its own store and list. The Best Sellers front page (https://www.amazon.com/gp/bestsellers) reads the top list of every department. Movers & Shakers, Most Wished For and Most Gifted links are refused. Example: https://www.amazon.com/gp/bestsellers/electronics

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

The Amazon store the categories below are read on, amazon.com by default. Category links keep their own store. Prices follow the visitor's location, and each product's currency says which currency its price is in. Example: amazon.de

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

Categories to read without copying links, as the part of the link after /gp/bestsellers/: a department (electronics, books, kitchen) or a department and a category number (electronics/281407). An empty line reads every department. Amazon store and Lists apply to them. Example: electronics

## `listTypes` (type: `array`):

Which of Amazon's lists to read for each category above: Best Sellers, New Releases, or both (each list is its own top 100). Category links keep their own list. Example: Best Sellers and New Releases. Default: Best Sellers.

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

How many levels of subcategories to read below each category, each with its own top 100: 0 reads only the category you gave, 1 adds its subcategories, 2 their subcategories too. The front page counts its departments as level 0. A department has 10 to 40 subcategories, so each level multiplies the products. Example: 1. Default 0, at most 3.

## `maxRank` (type: `integer`):

Read each list down to this rank. Amazon ranks 100 products per list, 50 on each of its two pages: a limit of 50 or less reads page 1 only, which is faster. Example: 10 for the top ten of every list. Default 100.

## `maxProductsPerStart` (type: `integer`):

Stop each link or category after this many products, its subcategories included, and go on to the next. A list gives up to 100 products, so set it higher when you read subcategories. Example: 2000. Default 1,000, at most 20,000.

## Actor input object example

```json
{
  "categoryUrls": [
    "https://www.amazon.com/gp/bestsellers/electronics"
  ],
  "marketplace": "amazon.com",
  "listTypes": [
    "best_sellers"
  ],
  "subcategoryDepth": 0,
  "maxRank": 100,
  "maxProductsPerStart": 1000
}
```

# Actor output Schema

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

Every ranked product the run saved, one row per product and list.

## `allFields` (type: `string`):

The same rows with every field.

## `runReport` (type: `string`):

What happened to each input: items saved, nothing found, refused by the site, stopped at your limit, or the error.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("luzivanlt/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"] }

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

```

## MCP server setup

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