# Amazon Product & Price Scraper - Search, ASIN, BSR & Sellers (`admirala/amazon-product-scraper`) Actor

Scrape Amazon products by keyword, category URL or ASIN on .com, .de, .co.uk, .nl, .fr, .it and .es: price, list price, discount, rating, review count, Best Sellers Rank, seller, images and bullet points. $0.0045 per product.

- **URL**: https://apify.com/admirala/amazon-product-scraper.md
- **Developed by:** [Ja doei](https://apify.com/admirala) (community)
- **Categories:** E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 & Price Scraper - Search, ASIN, BSR & Sellers

> ✅ **Tested daily** with its default input (Apify's automated QA plus our own smoke test before every release).

**Amazon product scraper without the Product Advertising API.** Give it search keywords, category or search-result URLs, or a list of ASINs and get clean JSON for every product: title, brand, current price and currency, list price and discount, star rating and review count, Best Sellers Rank with category, availability, seller and ships-from, bullet points, all image URLs, breadcrumbs and the product information table. Works on **amazon.com, amazon.de, amazon.co.uk, amazon.nl, amazon.fr, amazon.it and amazon.es**.

**$0.0045 per product** with full details, or **$0.0005 per product** for search-result data only. Lower on higher Apify plans.

### What you can scrape

- **Keyword search**: the products Amazon shows for any keyword, in Amazon's own order, with organic position
- **Category and search URLs**: any result page with your own filters (price range, brand, Prime, sort order), browse nodes and Best Sellers pages
- **ASIN lists**: look up specific products by ASIN or product URL, across marketplaces in one run
- **Price monitoring**: run it on a schedule with the same ASINs and compare `price`, `listPrice`, `inStock` and `bestSellersRank` over time

### Why this scraper

- **Price, list price and discount** for every product, plus `priceType`: the Buy Box price, or the lowest offer when no seller wins the Buy Box
- **Best Sellers Rank** as a number with its category, and every sub-category rank in `bestSellersRanks`
- **Seller and ships-from**: e.g. sold by a brand store, fulfilled by Amazon
- **Prices in the store's own currency**: if a European store hides the price for the visitor's location, the page is fetched again from an IP in that store's country
- **Light and fast**: only the HTML document is loaded (no images, scripts or styles) and a product page is cut off as soon as all fields are in. 100 products take about 2.5 minutes
- **Blocking handled for you**: captcha and error pages are detected and retried on a fresh IP, with residential proxy as a fallback. Proxy cost is included in the price
- **Pay only for results**: failed lookups (unknown ASIN, page that stays blocked) are free; duplicates across keywords are delivered and charged once

### Input

| Field | Default | Description |
|---|---|---|
| `searchQueries` | – | Keywords to search |
| `categoryUrls` | – | Search, category, browse-node or Best Sellers URLs (marketplace taken from the URL) |
| `asins` | – | ASINs or product URLs |
| `domain` | `amazon.com` | Marketplace for keywords and bare ASINs: `amazon.com`, `amazon.de`, `amazon.co.uk`, `amazon.nl`, `amazon.fr`, `amazon.it`, `amazon.es` |
| `maxItemsPerQuery` | 20 | Products per keyword or URL (next pages are followed automatically) |
| `scrapeProductDetails` | true | false = search-result data only ($0.0005 per product, much faster) |
| `includeSponsored` | false | Also return sponsored placements (flagged `isSponsored`) |

Example:

```json
{
  "searchQueries": ["wireless mouse", "usb c charger"],
  "domain": "amazon.com",
  "maxItemsPerQuery": 50,
  "asins": ["B004YAVF8I", "https://www.amazon.de/dp/B0BTJD6LCL"]
}
```

### Output

Product with full details (input `asins: ["https://www.amazon.co.uk/dp/B0833NW6SN"]`, lists shortened):

```json
{
  "asin": "B0833NW6SN",
  "marketplace": "amazon.co.uk",
  "title": "Russell Hobbs Honeycomb Electric 1.7L Cordless Kettle (Fast Boil 3KW, Black premium plastic, ...) 26051",
  "brand": "Russell Hobbs",
  "price": 23.0,
  "currency": "GBP",
  "priceType": "buybox",
  "listPrice": 28.0,
  "discountPercent": 18,
  "rating": 4.6,
  "reviewsCount": 30473,
  "bestSellersRank": 116,
  "bestSellersCategory": "Home & Kitchen",
  "bestSellersRanks": [{"rank": 116, "category": "Home & Kitchen"}, {"rank": 1, "category": "Electric Kettles"}],
  "availability": "In stock",
  "inStock": true,
  "soldBy": "Amazon",
  "shipsFrom": "Amazon",
  "offersCount": 10,
  "features": ["Textured Design - With a honeycomb-textured finish on premium black plastic, ..."],
  "categories": ["Home & Kitchen", "Kitchen & Home Appliances", "Small Kitchen Appliances", "Kettles & Hot Water Dispensers", "Electric Kettles"],
  "mainImage": "https://m.media-amazon.com/images/I/61pbAcHat3L._AC_SL1500_.jpg",
  "images": ["https://m.media-amazon.com/images/I/61pbAcHat3L._AC_SL1500_.jpg", "https://m.media-amazon.com/images/I/71AUvWWn8hL._AC_SL1500_.jpg"],
  "details": {"Brand Name": "Russell Hobbs", "Country of Origin": "China"},
  "url": "https://www.amazon.co.uk/dp/B0833NW6SN",
  "scrapedAt": "2026-10-26T15:31:12+00:00"
}
```

Products found through a keyword or URL also get `position`, `searchQuery`, `isSponsored`, `isPrime`, `badge` and `boughtPastMonth`. With `scrapeProductDetails: false` you get `asin`, `title`, `url`, `price`, `currency`, `listPrice`, `rating`, `reviewsCount`, `boughtPastMonth`, `isPrime`, `isSponsored`, `badge`, `thumbnail`, `position` and `searchQuery`.

Fields are empty when Amazon does not show them for that product (some product pages have no Best Sellers Rank, unavailable products have no price). `rating` and `reviewsCount` are Amazon's aggregate values.

### Pricing (pay per event)

- **$0.0045 per product** with full details; $0.003825 on Silver, $0.00315 on Gold and above
- **$0.0005 per product** from search results only (`scrapeProductDetails: false`); $0.000425 on Silver, $0.00035 on Gold and above
- If a product page stays blocked after all retries, you get its search-result data at the $0.0005 rate (with `detailsError`)
- Inputs that fail (unknown ASIN, unsupported URL) are free

So 1,000 products with full details cost $4.50 on the free plan. Set `maxItemsPerQuery` or a maximum cost per run to cap spending.

### What this Actor does not collect

Only public product data. No review texts, no reviewer names or profiles, no customer data, no login and no purchases. Seller fields contain the business name Amazon displays. Make sure your use of the data follows Amazon's terms and applicable law.

### Use with AI agents (MCP)

This Actor can be used as a tool by AI agents (Claude, Cursor, VS Code, other MCP clients) through the official [Apify MCP server](https://docs.apify.com/platform/integrations/mcp):

- Add only this Actor as a tool: `https://mcp.apify.com?tools=admirala/amazon-product-scraper` (sign in with OAuth or an Apify API token).
- Or connect `https://mcp.apify.com` and let the agent find it with `search-actors` (e.g. "amazon product price scraper"), read the input schema with `fetch-actor-details` and run it with `call-actor`.

Example input an agent can pass:

```json
{
  "searchQueries": ["noise cancelling headphones"],
  "domain": "amazon.de",
  "maxItemsPerQuery": 10
}
```

Cost per call: $0.0045 per product returned ($0.0005 with `scrapeProductDetails: false`). Results come back as dataset items (`get-dataset-items`).

### FAQ

**Do I need an Amazon API key or seller account?**
No. The Actor reads the public product pages that any shopper sees.

**How do I track prices of my own list of products?**
Put the ASINs or product URLs in `asins` and schedule the Actor (daily or hourly). Each run returns the current `price`, `listPrice`, `inStock` and `bestSellersRank`; compare runs or send them to a spreadsheet with an Apify integration.

**How do I scrape a whole category?**
Open the category or filtered search on Amazon, copy the URL from the address bar into `categoryUrls` and set `maxItemsPerQuery`. Amazon shows at most about 7 pages per search, so split large categories with price or brand filters.

**Which marketplaces are supported?**
amazon.com, amazon.de, amazon.co.uk, amazon.nl, amazon.fr, amazon.it and amazon.es. Prices are in the store's own currency. On amazon.fr, search pages are currently often refused for automated requests; ASINs and product URLs on amazon.fr work.

**Can I get the reviews?**
This Actor returns the aggregate rating and the number of ratings only. It does not collect review texts or reviewer names.

**Why is `price` empty for some products?**
The product is unavailable, or Amazon shows no price on the page (e.g. it cannot be shipped to that country). When no seller wins the Buy Box, the lowest offer is returned with `priceType: "lowestOffer"`.

### Related actors

- [Website Change Monitor - Page Diff Tracker (CSS selector)](https://apify.com/admirala/website-change-monitor-diff)
- [Remove Duplicates from Datasets, CSV & JSON - Smart Dedupe](https://apify.com/admirala/smart-dedupe)
- [Website to Markdown for LLM & RAG - Clean Page Text](https://apify.com/admirala/webpage-to-markdown-llm)

### More examples

Ready-to-run Python, curl and MCP examples with real sample output: https://github.com/AdmiraalA/apify-scrapers-examples

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on Amazon, one per line. Each keyword returns up to 'Max products per search / category' products in Amazon's own order. Example: \["wireless mouse", "usb c charger"].

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

Amazon result-page URLs: a search URL with filters (e.g. https://www.amazon.com/s?k=laptop\&rh=p_72%3A1248879011), a category/browse URL (/s?i=...\&rh=n%3A..., /b?node=...) or a Best Sellers page. The marketplace is taken from the URL.

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

Products to look up directly: 10-character ASINs (B0... or ISBN-10) or product URLs (/dp/, /gp/product/). ASINs without a URL use the marketplace selected below. Example: \["B004YAVF8I", "https://www.amazon.de/dp/B07PJV3JPR"].

## `domain` (type: `string`):

Amazon store used for search keywords and bare ASINs. Prices are returned in that store's currency. Note: amazon.fr currently challenges most automated search requests; ASINs and product URLs on amazon.fr work.

## `maxItemsPerQuery` (type: `integer`):

Maximum number of products per search keyword or category URL (Amazon shows about 16 to 60 per page; more pages are followed automatically). You pay per product, so this caps the cost.

## `scrapeProductDetails` (type: `boolean`):

true = open every product page: brand, Best Sellers Rank, seller and ships-from, availability, all images, bullet points, breadcrumbs and the product information table ($0.0045 per product). false = only what the search result shows: title, price, list price, rating, review count, Prime, badge, 'bought in past month' and thumbnail ($0.0005 per product, much faster).

## `includeSponsored` (type: `boolean`):

Also return sponsored (paid) placements from search pages. They are flagged with isSponsored=true. Off = organic results only, so 'position' is the organic rank.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless mouse"
  ],
  "domain": "amazon.com",
  "maxItemsPerQuery": 10,
  "scrapeProductDetails": true,
  "includeSponsored": false
}
```

# Actor output Schema

## `results` (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 = {
    "searchQueries": [
        "wireless mouse"
    ],
    "maxItemsPerQuery": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("admirala/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 = {
    "searchQueries": ["wireless mouse"],
    "maxItemsPerQuery": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("admirala/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 '{
  "searchQueries": [
    "wireless mouse"
  ],
  "maxItemsPerQuery": 10
}' |
apify call admirala/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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