# Amazon Product Scraper: search, details, Best Sellers, 22 sites (`pikoulas/amazon`) Actor

Scrape Amazon search results, product pages and Best Sellers lists on 22 marketplaces (US, UK, DE, FR, IT, ES, CA, JP, IN, AU...) by keyword, URL or ASIN: prices, ratings, reviews count, sponsored flag, and with details bullets, images, histogram, variants, seller, top reviews. No browser.

- **URL**: https://apify.com/pikoulas/amazon.md
- **Developed by:** [Spyridon Pikoulas](https://apify.com/pikoulas) (community)
- **Categories:** E-commerce, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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

## Amazon Product Scraper

Scrape products from Amazon without an account or a browser:

- **Marketplaces:** 22 of them. United States, United Kingdom, Canada, Mexico, Brazil, Germany,
  France, Italy, Spain, the Netherlands, Belgium, Ireland, Sweden, Poland, Turkey, the UAE, Saudi
  Arabia, Egypt, India, Japan, Australia and Singapore.
- **Search:** keywords, with Amazon's sort orders and a price range.
- **Search and category URLs:** paste a search from the site, and the filters you set there come
  with it. A category page (`/b?node=...`) gives that category's products.
- **Best Sellers and New Releases:** any list (`/gp/bestsellers/electronics`, `/zgbs/...`), its
  top 100 in order with their rank.
- **Products:** any product by its URL (`/dp/...`, `/gp/product/...`) or ASIN.

Every product from a search comes with its ASIN, title, price, list price, currency, rating,
reviews count, image, sponsored flag, Prime badge, badges ("Amazon's Choice", "Overall Pick"),
"bought in past month" and its position in the results. With details on, each also comes with its
product page: brand, availability, bullet points, description, all images at full size, the rating
histogram, the category path, the specifications, the variants and their ASINs, the seller, Amazon's
"Customers say" summary where the marketplace has one, and the 8 to 13 top reviews the page shows.

It is fast: 2,290 search products from 9 searches and lists on Amazon UK and France took 49
seconds, and 160 products with details on 4 marketplaces a minute. It costs **$1 per 1,000
products**, or **$2 per 1,000 with details**.

### What people use it for

- **Price monitoring:** your products and your competitors' on every marketplace, with list prices
  and discounts.
- **Product research:** what sells in a category, from the Best Sellers ranks, the reviews counts
  and the "bought in past month" figures.
- **Ad and search tracking:** where a product ranks for a keyword, and who pays for the sponsored
  places.
- **AI and LLM data:** product descriptions, specifications and reviews for catalogues, comparisons
  and sentiment.

### How to scrape Amazon

1. Click **Try for free**; Apify's free plan covers a first run.
2. Enter **Search terms** or **Amazon URLs or ASINs**, pick the marketplace, and set how many products you want.
3. Click **Start**, then download the results as JSON, CSV, Excel or HTML, or read them through
   the API.

An input with more options:

```json
{
  "searchTerms": ["air fryer", "robot vacuum"],
  "marketplace": "us",
  "maxItemsPerSearch": 200,
  "sortBy": "reviews",
  "minPrice": 50,
  "includeDetails": true,
  "urls": [
    "https://www.amazon.de/s?k=wasserkocher",
    "https://www.amazon.com/gp/bestsellers/electronics",
    "https://www.amazon.co.jp/dp/B0H1W2NG3L",
    "B0BSHF7WHW"
  ]
}
```

Each search term runs on the marketplace given, with the sort order and price range; a URL keeps
its own marketplace and filters. An ASIN on its own is looked up on the marketplace given. Products
asked for by URL or ASIN always come with their details. Turn on `includeDetails` to open the page
of every product found by a search or list too.

### Output

```json
{
  "type": "product",
  "asin": "B0D78N984B",
  "url": "https://www.amazon.de/dp/B0D78N984B",
  "title": "Amazon Basics Kettle 1.7 L, 2200 W, BPA-Free, 360° Base, Automatic Shut-Off, Removable Limescale Filter, Matte Black",
  "brand": "Amazon Basics",
  "price": 15.75,
  "listPrice": 22.05,
  "currency": "EUR",
  "rating": 4.4,
  "reviewsCount": 858,
  "image": "https://m.media-amazon.com/images/I/713j3187kfL.jpg",
  "sponsored": false,
  "prime": false,
  "badges": [],
  "boughtInPastMonth": "1K+ bought in past month",
  "marketplace": "www.amazon.de",
  "position": 11,
  "page": 1,
  "searchQuery": "https://www.amazon.de/s?k=wasserkocher",
  "parentAsin": "B0F9Q12TQN",
  "byline": "Visit the Amazon Basics Store",
  "availability": "In stock",
  "ratingHistogram": {"5": 73, "4": 13, "3": 4, "2": 2, "1": 8},
  "features": [
    "Large capacity: 1.7 litre electric kettle made of BPA-free plastic (inside) with elegant matte black finish; ideal for tea, coffee and hot drinks",
    "Fast heating: 2200 W/240 V for quick preparation, ideal for everyday use"
  ],
  "images": ["https://m.media-amazon.com/images/I/713j3187kfL._AC_SL1500_.jpg", "https://m.media-amazon.com/images/I/71x4FTkqNAL._AC_SL1500_.jpg"],
  "categories": ["Home & Kitchen", "Small Kitchen Appliances", "Kettles & Hot Water Dispensers", "Electric Kettles"],
  "details": {"Brand": "Amazon Basics", "Capacity": "1.7 litres", "Material": "Plastic", "Colour": "Matte Black"},
  "variantAttributes": {"style": "Plastic"},
  "variants": [{"asin": "B08TS4QF2Y", "style": "Stainless steel, digital"}, {"asin": "B0D78N984B", "style": "Plastic"}],
  "seller": "Amazon",
  "sellerId": "A3JWKAKR8XB7XF",
  "shipsFrom": "Amazon",
  "customersSay": "Customers like the functionality, price, and design of the electric water boiler. ...",
  "topReviews": [
    {
      "id": "R1LMMMGTJFJL7G",
      "author": "Claudia",
      "rating": 5.0,
      "title": "Schnell heißes Wasser, gut, günstig",
      "date": "Reviewed in Germany on 18 July 2026",
      "variant": "Style Name: Plastic",
      "verified": true,
      "text": "Kein Eigengeruch, ist in kurzer Zeit voll mit heißen Wasser. Heizt also sehr gut. ...",
      "helpfulVotes": 2,
      "images": []
    }
  ]
}
```

A product also has `subtitle` (the rest of a long title, where Amazon splits it) and `description`
where the page has one. A product from a Best Sellers list has `rank` and `listName` in place of
`position` and `page`. Without details, a product has the fields up to `searchQuery`.

### Use it as an API

One call runs it and returns the results as JSON (for runs under 5 minutes; longer ones start a
run and read its dataset). Apify's Python and JavaScript clients, and its Make, Zapier and n8n
integrations, work the same way.

```bash
curl -X POST "https://api.apify.com/v2/acts/pikoulas~amazon/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["wireless earbuds"], "maxItemsPerSearch": 10, "urls": ["https://www.amazon.com/gp/bestsellers/electronics"]}'
```

AI agents can call it as a tool through Apify's MCP server: `https://mcp.apify.com?tools=pikoulas/amazon`.

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

You pay **$0.001 per product**, which is $1 per 1,000, or **$0.002 per product with details**, $2
per 1,000. Runs that go through Apify's residential proxy also pay its traffic, $0.0012 per 100 KB:
a search product is about 8 KB, so about $0.10 per 1,000, but a product page is 400 to 550 KB, so
details through residential proxy add $5 to $6.50 per 1,000. There are no monthly fees.

### Good to know

- Amazon shows 7 to 20 pages of a search, 300 to 1,000 products, and 100 of a Best Sellers list.
  For more, split a search by price range or category.
- Pages come in English where the marketplace has it (Germany, Japan, Spain and others do). Reviews
  are in the language they were written in.
- Prices and the Prime badge are those shown to a visitor from the run's country. A product that
  doesn't ship there may show no price: for every price, use residential proxy in the
  marketplace's country.
- Signed out, Amazon shows only the top reviews of a product, on its page. Its full review pages
  need an account.
- A product found by several search terms is given once per run and marketplace.

### FAQ

#### Is it legal to scrape Amazon?

It collects only what Amazon shows publicly, without logging in. Scraping public data is
generally legal, but personal data is protected by laws such as the GDPR and the CCPA, and
Amazon's terms may limit how you use what you collect. If you're unsure, ask a lawyer;
Apify's [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/) is a good start.

#### Something missing or not working?

Open an issue on the **Issues** tab with the input you used, or ask there for a field you need.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords, as you would type them into Amazon's search box. Each is searched on the marketplace below, with the sort and price filters.

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

The Amazon site to search and to look ASINs up on. URLs carry their own.

## `urls` (type: `array`):

Search URLs (amazon.com/s?k=...) with any filters set on the site, category pages (amazon.com/b?node=...), Best Sellers and New Releases lists (amazon.com/gp/bestsellers/electronics), product URLs (amazon.com/dp/...), or ASINs. Products by URL or ASIN always come with their details.

## `maxItemsPerSearch` (type: `integer`):

Per search term or URL. Amazon shows 7 to 20 pages of a search (about 300 to 1,000 products), and 100 products of a Best Sellers list.

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

Open each product's page for its brand, availability, bullet points, description, all images, rating histogram, categories, specifications, variants, seller and the reviews it shows. Charged as a product with details; off gives the search cards only, cheaper and several times faster.

## `sortBy` (type: `string`):

The order of the search results.

## `minPrice` (type: `integer`):

In the marketplace's currency, for search terms.

## `maxPrice` (type: `integer`):

In the marketplace's currency, for search terms.

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

Not needed for most runs. Amazon shows prices only for what ships to the visitor's country: for every price, use residential proxy in the marketplace's country (it adds its traffic to the cost, most for details). On the Apify platform, a run Amazon refuses switches to residential proxy by itself.

## Actor input object example

```json
{
  "searchTerms": [
    "wireless earbuds"
  ],
  "marketplace": "us",
  "maxItemsPerSearch": 20,
  "includeDetails": false,
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `products` (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 = {
    "searchTerms": [
        "wireless earbuds"
    ],
    "maxItemsPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("pikoulas/amazon").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 = {
    "searchTerms": ["wireless earbuds"],
    "maxItemsPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("pikoulas/amazon").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 '{
  "searchTerms": [
    "wireless earbuds"
  ],
  "maxItemsPerSearch": 20
}' |
apify call pikoulas/amazon --silent --output-dataset

```

## MCP server setup

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

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/aGWeGJqWFXnfxQske/builds/VeYtb73tMoX9jzQjj/openapi.json
