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

Scrapes the top 100 products of any Amazon Best Sellers or New Releases list — rank, ASIN, title, local price, rating, reviews and category — for any department or subcategory on 23 Amazon stores, priced as a shopper in that country sees them.

- **URL**: https://apify.com/mina_safwat/amazon-best-sellers-scraper.md
- **Developed by:** [Mina](https://apify.com/mina_safwat) (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

$2.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/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

### What does Amazon Best Sellers Scraper do?

**Amazon Best Sellers Scraper** turns Amazon's ranking lists into clean data:
the **rank, ASIN, title, price, currency, star rating, review count, image and
category** of every product in a **Best Sellers** or **New Releases** list. It
reads **any department or subcategory** on **23 Amazon stores**, up to the
**top 100** of each list, which is all Amazon ranks, and every price is the one
a **shopper in that store's own country** sees (VAT included where the country
charges it).

Try it with the prefilled list: open the Actor, click **Start**, and the top 50
of [Amazon's Electronics Best Sellers](https://www.amazon.com/gp/bestsellers/electronics)
arrive in about ten seconds. Because it runs on the Apify platform, you also get
API access, scheduled runs (track the ranking every day), integrations (Google
Sheets, Make, Zapier, webhooks), run monitoring, and automatic retries through
Apify Proxy when Amazon is slow to answer.

### Why scrape Amazon Best Sellers?

- **Product research**: see what sells best right now in any niche, down to the
  smallest subcategory, before you source or launch a product.
- **Rank tracking**: schedule a daily run and follow how your products and your
  competitors' move up and down the list.
- **Price monitoring**: compare the local prices of the top sellers across
  categories and across Amazon stores, each in its own currency.
- **Trend spotting**: New Releases shows which new products climb fastest;
  the book lists show which authors and formats lead.
- **Market and investment reports**: build datasets of the best-selling brands
  and products per country for analysis or AI models.

### How to scrape Amazon Best Sellers

1. Open a list on Amazon, such as [Best Sellers in Electronics](https://www.amazon.com/gp/bestsellers/electronics),
   and click your way down to any subcategory you like.
2. Copy the address bar and paste it into **Amazon list links**, one link per line.
   Links from different stores and different list types can be mixed.
3. Set **Max products per list** (1 to 100).
4. Click **Start**, then download the results when the run finishes.

To get the top products of **every department** at once, paste the
all-departments page, such as `https://www.amazon.com/gp/bestsellers`: the Actor
reads the list of each department it shows (about 40 on amazon.com).

### Input

Everything is set on the Input tab. In JSON, the input looks like this:

```json
{
    "list_urls": [
        "https://www.amazon.com/gp/bestsellers/electronics",
        "https://www.amazon.com/Best-Sellers-Electronics-Earbud-Headphones/zgbs/electronics/12097478011",
        "https://www.amazon.co.uk/gp/new-releases/kitchen",
        "amazon.de/gp/bestsellers/ce-de"
    ],
    "max_items_per_list": 100
}
```

| Field | What it does |
|---|---|
| `list_urls` | Links to Best Sellers (`/gp/bestsellers/…` or `/…/zgbs/…`) or New Releases (`/gp/new-releases/…`) lists. Department and subcategory pages both work, with or without `https://`. API callers can also send `{"url": "…"}` objects. Movers & Shakers, Most Wished For and Gift Ideas links are accepted too, but Amazon currently shows those lists empty (see the FAQ). |
| `max_items_per_list` | How many of the top ranks to save per list, best first. Default: 100, the most Amazon ranks. |
| `proxy_configuration` | Optional; leave it empty. The Actor tries the cheapest connection first and switches to Apify's datacenter and then residential proxies by itself when Amazon refuses. |

Supported stores: amazon.com, amazon.ca, amazon.com.mx, amazon.com.br,
amazon.co.uk, amazon.ie, amazon.de, amazon.fr, amazon.it, amazon.es, amazon.nl,
amazon.com.be, amazon.se, amazon.pl, amazon.com.tr, amazon.ae, amazon.sa,
amazon.eg, amazon.in, amazon.sg, amazon.com.au, amazon.co.jp and amazon.co.za.

### Output

Each ranked product becomes one row. Here are two real rows, from the
Electronics Best Sellers and the Books New Releases on amazon.com:

```json
{
    "rank": 5,
    "asin": "B09B8V1LZ3",
    "title": "Amazon Echo Dot (newest model) - Vibrant sounding speaker, Designed for Alexa+, Great for bedrooms, dining rooms and offices, Charcoal",
    "url": "https://www.amazon.com/dp/B09B8V1LZ3",
    "image": "https://images-na.ssl-images-amazon.com/images/I/71hNp8d9WvL.jpg",
    "price": 79.99,
    "currency": "USD",
    "rating": 4.7,
    "review_count": 200686,
    "list_type": "best_sellers",
    "category": "Electronics",
    "category_path": "Electronics",
    "category_id": "electronics",
    "marketplace": "amazon.com",
    "list_url": "https://www.amazon.com/gp/bestsellers/electronics",
    "scraped_at": "2026-10-10T07:25:00+00:00"
}
```

```json
{
    "rank": 1,
    "asin": "1464249644",
    "title": "The Witch (Deluxe Edition)",
    "url": "https://www.amazon.com/dp/1464249644",
    "image": "https://images-na.ssl-images-amazon.com/images/I/71HHi8R74IL.jpg",
    "price": 20.98,
    "currency": "USD",
    "rating": 4.5,
    "review_count": 1731,
    "byline": "Freida McFadden",
    "format": "Hardcover",
    "list_type": "new_releases",
    "category": "Books",
    "category_path": "Books",
    "category_id": "books",
    "marketplace": "amazon.com",
    "list_url": "https://www.amazon.com/gp/new-releases/books",
    "scraped_at": "2026-10-10T07:25:30+00:00"
}
```

The Output tab shows the products as a table. You can download the dataset in
various formats such as JSON, HTML, CSV, or Excel.

### Data fields

| Field | Description |
|---|---|
| `rank` | The product's rank in the list, 1 to 100. |
| `asin` | Amazon's product ID (an ISBN for many books). |
| `title` | The full product name. |
| `url` | Clean link to the product page. |
| `image` | The product photo at full size. |
| `price` | The price shown on the list to a shopper in the store's country (see below), as a number. When a product has no featured offer, Amazon shows the lowest offer ("2 offers from $22.56") and that is the price saved. Empty when Amazon shows no price. |
| `price_max` | Only when Amazon shows a price range: the top of the range (`price` is then the bottom). |
| `currency` | ISO code of the price, such as `USD`, `EUR` or `JPY`. Prices are always asked for in the store's own currency. |
| `rating` | Average star rating, out of 5. |
| `review_count` | Number of ratings. |
| `byline` | Only when Amazon shows one: the author, artist or app developer. |
| `format` | Only when Amazon shows one: `Paperback`, `Hardcover`, `Kindle Edition`, `Audio CD` and so on. |
| `sales_rank`, `sales_rank_24h_ago`, `rank_change_percent` | Movers & Shakers rows only: the product's sales rank now and 24 hours ago, and the change in percent. |
| `list_type` | `best_sellers`, `new_releases`, `movers_shakers`, `most_wished_for` or `gift_ideas`. |
| `category` | The category's name, such as `Earbud Headphones`. |
| `category_path` | The path from the department down, such as `Electronics > Headphones > Earbud Headphones`. |
| `category_id` | Amazon's ID of the category (a browse node number, or the department's name such as `electronics`). |
| `marketplace` | The Amazon store, such as `amazon.co.uk`. |
| `list_url` | The list the product was ranked in. |
| `scraped_at` | When the row was saved (UTC, ISO 8601). |

#### Which prices you get

Amazon prices a list for the visitor's delivery address: a visitor from
abroad sees export prices, without VAT or from a seller that ships abroad. So
the Actor reads every store as a local shopper. Once per run and store it sets
Amazon's own **Deliver to** location to a central place in that country, and it
saves a page only when the page's "Deliver to" line shows that place:

| Store | Delivery location |
|---|---|
| amazon.com | New York 10001 |
| amazon.ca | Toronto M5V 3L9 |
| amazon.com.mx | Mexico City 06000 |
| amazon.com.br | São Paulo 01310-100 |
| amazon.co.uk | London SW1A 1AA |
| amazon.ie | Dublin D02 X285 |
| amazon.de | Berlin 10115 |
| amazon.fr | Paris 75001 |
| amazon.it | Rome 00185 |
| amazon.es | Madrid 28001 |
| amazon.nl | the Netherlands (Amazon's default address there) |
| amazon.se | Stockholm 111 22 |
| amazon.pl | Warsaw 00-001 |
| amazon.com.tr | Istanbul 34000 |
| amazon.ae | Dubai |
| amazon.sa | Riyadh |
| amazon.eg | Cairo |
| amazon.in | New Delhi 110001 |
| amazon.sg | Singapore 018989 |
| amazon.com.au | Sydney 2000 |
| amazon.co.jp | Tokyo 100-0001 |
| amazon.com.be, amazon.co.za | Amazon's own local default (Brussels, Johannesburg); these stores let only signed-in shoppers choose |

### How much does it cost to scrape Amazon Best Sellers?

You pay per product saved, so a list of 100 products costs 100 results; see the
**Pricing** tab for the exact price. Lists that give nothing (an empty list, a
category that does not exist, a link that is not a list) are never charged.
The Actor needs only plain web requests, no browser, so a 100-product list takes
a few seconds and the prefilled run of 50 products finishes in about 10 seconds.

Mind the all-departments link: on amazon.com it reads about 40 department lists,
so with **Max products per list** at 100 it saves about 4,000 products. Lower the
limit (for example to 10) to get just the top of each department.

### Tips

- **Subcategories** give the most focused lists: click down the department tree
  on the left of any Amazon list and copy the address of the level you want.
- **Several stores in one run**: paste links from amazon.com, amazon.de and
  amazon.co.jp together; each row says which store it came from.
- **Track ranks over time**: save the input as a task and schedule it daily, then
  compare `rank` per `asin` between runs.
- **Only need the top 10?** Set **Max products per list** to 10: the run reads
  less and finishes faster.
- Text comes as Amazon shows it. Product titles are often in the store's own
  language (German titles on amazon.de, Japanese on amazon.co.jp and so on).
  Category names are in English on most stores, but amazon.com.br, .com.mx, .pl
  and .com.tr show the whole page, category names included, in Portuguese,
  Spanish, Polish or Turkish.

### FAQ, disclaimers and support

**Why are my Movers & Shakers, Most Wished For or Gift Ideas lists empty?**
As of October 2026 Amazon shows these three lists empty in every category we
tried on amazon.com, .co.uk, .de, .in and .co.jp, with messages such as "Sorry,
there are no movers and shakers available in this category", and no longer links
to them from the Best Sellers pages. The Actor still accepts their links and
reads them whenever Amazon fills them again. Until then such a link saves
nothing, costs nothing, and its row in the `FAILED_INPUTS` record quotes
Amazon's message.

**What happens to links that give nothing?** They are listed with the reason in
the `FAILED_INPUTS` record of the run's key-value store, and the run's status
message says how many there were. A run fails only when Amazon refused every
list it was given.

**Why does a list have fewer than 100 products?** Some categories rank fewer
products, and Amazon occasionally leaves out a product it cannot show. When part
of a list could not be loaded, the run's status message and `FAILED_INPUTS` say
which ranks are missing.

**Is it legal to scrape Amazon?** The Actor reads only public lists that anyone
can open without logging in, at a modest pace, and it saves product data, not
personal data (Amazon's robots.txt has no rule against these ranking pages for
general visitors). You are responsible for how you use the data and for
following Amazon's terms and the laws that apply to you; consult your lawyer if
you are unsure.

**Something is wrong or missing?** Open an issue on the **Issues** tab and we
will look into it. If you need a custom Amazon dataset or a different
marketplace, ask there too.

# Actor input Schema

## `list_urls` (type: `array`):

Links to Amazon Best Sellers or New Releases lists, one per line, for a department or any subcategory, on any of 23 Amazon stores (amazon.com, .co.uk, .de, .fr, .it, .es, .nl, .se, .pl, .com.be, .ie, .com.tr, .ca, .com.mx, .com.br, .com.au, .co.jp, .sg, .in, .ae, .sa, .eg, .co.za). Open the list on Amazon and copy the address bar, for example https://www.amazon.co.uk/gp/new-releases/kitchen. A link to the all-departments page (https://www.amazon.com/gp/bestsellers) reads the list of every department it shows. Movers & Shakers, Most Wished For and Gift Ideas links are accepted too, but Amazon currently shows those three lists empty, so only Best Sellers and New Releases have products.

## `max_items_per_list` (type: `integer`):

Saves the top ranks of each list, best first. Amazon ranks at most 100 products per list, over two pages of 50.

## `proxy_configuration` (type: `object`):

Leave this empty: the Actor tries the cheapest way first and switches to Apify's datacenter and then residential proxies by itself when Amazon refuses. Choose a proxy here only to use it for every request.

## Actor input object example

```json
{
  "list_urls": [
    "https://www.amazon.com/gp/bestsellers/electronics"
  ],
  "max_items_per_list": 50,
  "proxy_configuration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "list_urls": [
        "https://www.amazon.com/gp/bestsellers/electronics"
    ],
    "max_items_per_list": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/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 = {
    "list_urls": ["https://www.amazon.com/gp/bestsellers/electronics"],
    "max_items_per_list": 50,
}

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

```

## MCP server setup

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