# Amazon Product Scraper: Search, Best Sellers & ASINs (`brii3343/amazon-product-scraper`) Actor

Amazon products from searches, categories, Best Sellers and ASINs on 21 marketplaces: price, list price, deals, rating, reviews, bought in past month, badges, coupons. Optional product pages (amazon.com): seller, stock, Best Sellers rank, specs, variants, images. Pay only per product.

- **URL**: https://apify.com/brii3343/amazon-product-scraper.md
- **Developed by:** [Brian Gastaldelli](https://apify.com/brii3343) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 product from a list (amazon.com)s

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 Product Scraper — search, categories, Best Sellers and ASINs

Get Amazon products from **keyword searches, category pages, Best Sellers lists and ASINs**: title, price, list price, discount, rating, number of reviews, **bought in past month**, badges, coupons, sponsored flag, Prime and delivery. Turn on **product details** to also get seller, stock, star breakdown, Best Sellers rank, bullet points, specifications, variants, all images and more from each product page. 21 Amazon marketplaces for lists, amazon.com for product pages.

#### Why this Actor

- **Works on every attempt.** In our tests on amazon.com: **550 requests out of 550** answered, **499 product pages out of 500** read (the last page had no product data: that product was saved from the list, with a `detailsStatus` saying why), 50 searches out of 50.
- **Checked against the product page.** 30 products read by this Actor were compared with the same pages read separately: title, rating, reviews and seller **30/30**, price 30/30 (the deal price Amazon shows by default).
- **Complete Best Sellers lists.** Ranks **1 to 100**, not only the first 30 the page shows before scrolling.
- **Fields other scrapers skip**: "bought in past month", coupons, badges ("Limited time deal", "Amazon's Choice"), sponsored flag, delivery text, list price and discount, star breakdown, variants with their attributes.
- **Fast.** 300 products from lists in 10 seconds; 100 products with full product pages in about 2 minutes.
- **You pay only for products.** Searches with no results, missing products, wrong links and pages Amazon refuses are free status rows.

#### Use cases

- **Price and competitor monitoring**: prices, list prices, deals and coupons of your products and your competitors', every day.
- **Product research for sellers**: what sells ("bought in past month", Best Sellers rank), ratings, reviews and prices in any category.
- **Market and brand analysis**: share of sponsored results, brands and sellers in a search, Prime and Amazon-fulfilled offers.
- **Catalog enrichment and AI pipelines**: bullet points, specifications, images and variants from ASINs.

#### Input

| Field | Description |
|---|---|
| Search keywords | One Amazon search per keyword, on the marketplace below. |
| Amazon links | Links copied from any supported Amazon site: searches, categories (`/s?rh=n:…`, `/b?node=…`), Best Sellers, New Releases, Movers & Shakers, Most Wished For, Gift Ideas, product pages (`/dp/ASIN`). Each link keeps its own site. |
| ASINs | Product codes like `B0DCH8VDXF`, read on the marketplace below. |
| Marketplace | Amazon site for keywords and ASINs: amazon.com (default), .co.uk, .de, .it, .es, .nl, .se, .pl, .com.be, .ie, .ca, .com.mx, .com.br, .com.au, .co.jp, .in, .sg, .ae, .sa, .com.tr, .eg. |
| Max products per source | Default 100. `0` = everything Amazon shows. |
| Sort | Featured, price low to high, price high to low, average review, newest, best sellers (for keywords). |
| Include product details | Off by default. On: each product page is read too (amazon.com). |

Example input:

```json
{
  "searches": ["wireless earbuds", "hdmi cable"],
  "startUrls": [{ "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics" }],
  "asins": ["B0FQFB8FMG"],
  "marketplace": "amazon.com",
  "maxItemsPerSource": 50,
  "sort": "featured",
  "includeDetails": true
}
```

#### Output

One row per product. A product from a search (real output):

```json
{
  "asin": "B0DJGDC3BD",
  "title": "Amazon Fire TV Stick HD (newest model), free & live TV, Alexa Voice Remote, powered by the TV, effortless setup, find shows faster with Alexa+",
  "price": 15.99,
  "listPrice": 39.99,
  "discountPercent": 60,
  "rating": 4.1,
  "reviewsCount": 5699,
  "boughtPastMonth": 10000,
  "isSponsored": false,
  "isPrime": true,
  "badge": "Limited time deal",
  "coupon": null,
  "delivery": "Join Prime to get FREE delivery Tomorrow, Sep 30 Or Non-members get FREE delivery Sun, Oct 4 on $35 of items shipped by Amazon",
  "image": "https://m.media-amazon.com/images/I/610j-wmxRcL._AC_UL320_.jpg",
  "url": "https://www.amazon.com/dp/B0DJGDC3BD",
  "position": 8,
  "page": 1,
  "totalResults": 60000,
  "currency": "USD",
  "marketplace": "amazon.com",
  "source": "https://www.amazon.com/b?node=172282",
  "sourceType": "category",
  "hasDetails": false,
  "scrapedAt": "2026-09-29T08:11:57.624Z"
}
```

Best Sellers rows also have `rank` and `category`. With **Include product details** on, the same row gets the fields of the product page (real output, lists shortened):

```json
{
  "asin": "B08KSY32VR",
  "title": "Highwings 8K@60 HDMI Cable 10FT/3M, Certified 48Gbps 2.1 Ultra High Speed",
  "brand": "Highwings",
  "price": 8.99,
  "listPrice": 9.99,
  "discountPercent": 10,
  "offersCount": 2,
  "lowestOfferPrice": 8.99,
  "rating": 4.7,
  "reviewsCount": 46196,
  "ratingHistogram": { "1": 3, "2": 1, "3": 3, "4": 10, "5": 83 },
  "boughtPastMonth": 10000,
  "availability": "In Stock",
  "inStock": true,
  "seller": "Szsea US",
  "sellerId": "AANLIS3PF0Y1D",
  "shipsFrom": "Amazon",
  "isAmazonFulfilled": true,
  "features": ["Top Technology----8K@60HZ: This 8K Ultra High Speed HDMI Cable uses the most cutting-edge technology, ..."],
  "categories": ["Electronics", "Television & Video"],
  "bestSellersRank": [{ "rank": 1, "category": "HDMI Cables" }],
  "productDetails": { "Connector Type": "HDMI", "Data Transfer Rate": "48 gigabits_per_second", "Item Length": "10 feet", "UPC": "738626545376", "...": "..." },
  "manufacturer": "Highwings",
  "parentAsin": "B08NPJS5DH",
  "variantAttributes": ["Size", "Color"],
  "variants": [{ "asin": "B095W9T9QQ", "attributes": { "Size": "20 feet", "Color": "Grey" } }],
  "images": ["https://m.media-amazon.com/images/I/71FUPPAXcfL._AC_SL1500_.jpg", "..."],
  "videosCount": 6,
  "position": 5,
  "currency": "USD",
  "marketplace": "amazon.com",
  "hasDetails": true
}
```

Other page fields when Amazon shows them: `byline`, `authors` and `format` (books), `description`, `productOverview`, `modelNumber`, `dateFirstAvailable`, `dimensions`, `weight`, `badge`.

Sources that give no products come back as a `status` row, **never charged**:

| status | Meaning |
|---|---|
| `no_results` | Amazon has no products for this search, category or Best Sellers page |
| `not_found` | No product with this ASIN on this marketplace |
| `invalid_input` | Not an ASIN, not an Amazon link, or an Amazon page that is not a list or a product (review pages need a login) |
| `unsupported` | Product pages outside amazon.com, or amazon.fr (see limits) |
| `error` | Amazon did not answer after every retry (rare); try again later |

With product details on, a product whose page cannot be read is still saved from the list, with `detailsStatus` telling why, and charged as a list product.

#### Honest limits

- **Product pages only on amazon.com.** On the other marketplaces you get everything the lists show (title, price, list price, rating, reviews, bought in past month, badges, delivery, image), not the product page.
- **amazon.fr is not supported**: it refuses automated access most of the time, and incomplete results are not what you pay for.
- **Amazon shows a limited number of pages per search** (often 7 to 20). For more products, split a search into more specific keywords or categories.
- Best Sellers pages have at most 100 products (that is what Amazon publishes). Some top-level departments have no Best Sellers list on some sites; you get a `no_results` row.
- Prices are those Amazon shows to a visitor without an account, in the marketplace's currency, delivering to the marketplace's country.
- Reviews text is not included (Amazon requires a login for review pages); you get rating, number of reviews and the star breakdown.

#### Pricing

Pay per event, only for products you get:

- **Product from a list** (`product`): a product from an amazon.com search, category or Best Sellers page.
- **Product from a list, other marketplaces** (`product-intl`): the same from the other 20 Amazon sites, which often need a residential proxy.
- **Product with details** (`product-details`): a product with its product page read (amazon.com), instead of the list event.
- A small start event per run. Status rows and duplicates are free.

Prices per 1,000 events for each Apify plan are in the Pricing tab. The Actor honors your *Maximum cost per run*: it stops when the next product would go over it.

#### Tips

- For daily price tracking, list your ASINs and schedule the Actor: one row per product with the current price, list price, deal and stock.
- For product research, open a Best Sellers or New Releases page on Amazon, copy the link, and turn on product details for "bought in past month", Best Sellers rank and specifications.
- Sponsored results appear in searches as on Amazon; filter them out with `isSponsored`.
- For the same keyword in several countries, add one search link per Amazon site (for example `https://www.amazon.de/s?k=kopfhörer`).

#### Other Actors by the same author

- [Tech Stack Detector](https://apify.com/brii3343/tech-stack-detector): the technologies behind any website.
- [Google Trends API](https://apify.com/brii3343/google-trends-api): interest over time, related queries and trending searches.

# Actor input Schema

## `searches` (type: `array`):

One Amazon search for each keyword, on the marketplace chosen below. Every product of the result pages: title, price, list price, rating, reviews, bought in past month, badges, coupon, sponsored flag, delivery.

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

Links copied from any Amazon website (amazon.com, amazon.co.uk, amazon.de, amazon.co.jp…): search results, category pages (<code>/s?i=…\&rh=n:…</code> or <code>/b?node=…</code>), Best Sellers, New Releases, Movers & Shakers, Most Wished For, Gift Ideas, or product pages (<code>/dp/ASIN</code>). The marketplace is taken from the link.

## `asins` (type: `array`):

Amazon product codes (like <code>B0DCH8VDXF</code>). Each one gives the full product page: price, seller, stock, all images, bullet points, description, specifications, Best Sellers Rank, rating breakdown, variants. Product pages are read on amazon.com.

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

Amazon website used for the search keywords and the ASINs. Links always use their own website. Product pages (details) are read on amazon.com; amazon.fr is not supported (it blocks automated access).

## `maxItemsPerSource` (type: `integer`):

Limit for each keyword, link or Best Sellers list. 0 = everything Amazon shows (search results stop where Amazon stops paging, usually 7 to 20 pages; Best Sellers lists have 100 products).

## `sort` (type: `string`):

Order of the results for the keywords (links keep their own order).

## `includeDetails` (type: `boolean`):

Also read the product page of every product found in searches, categories and Best Sellers lists (amazon.com): seller, stock, all images, bullet points, description, specifications, Best Sellers Rank, rating breakdown, variants. Priced per product with details instead of per product from the list.

## `proxyConfiguration` (type: `object`):

Not needed: amazon.com is read directly (switching to Apify Proxy residential only while Amazon blocks), the other Amazon websites through Apify Proxy residential of their country. Set a proxy here only to force your own.

## Actor input object example

```json
{
  "searches": [
    "wireless earbuds"
  ],
  "startUrls": [
    {
      "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics"
    }
  ],
  "marketplace": "amazon.com",
  "maxItemsPerSource": 20,
  "sort": "featured",
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per product: ASIN, title, brand, price, list price, currency, rating, reviews, bought in past month, badges, coupon, sponsored flag, position or Best Sellers rank; with product pages also seller, stock, images, bullet points, description, specifications, Best Sellers Rank, rating breakdown and variants.

# 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 = {
    "searches": [
        "wireless earbuds"
    ],
    "startUrls": [
        {
            "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics"
        }
    ],
    "maxItemsPerSource": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("brii3343/amazon-product-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 = {
    "searches": ["wireless earbuds"],
    "startUrls": [{ "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics" }],
    "maxItemsPerSource": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("brii3343/amazon-product-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 '{
  "searches": [
    "wireless earbuds"
  ],
  "startUrls": [
    {
      "url": "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics"
    }
  ],
  "maxItemsPerSource": 20
}' |
apify call brii3343/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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