# Amazon Product Scraper - Search, Prices, Ratings & Details (`fabrikit/amazon-product-scraper`) Actor

Amazon product scraper: search by keyword or category URL (US, CA, MX, BR, ES...) and get ASIN, title, price, list price, rating, reviews, bestseller rank, images, bullets, variants and seller. No login. From US$1.50 per 1,000 products.

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

## Pricing

from $1.50 / 1,000 product scrapeds

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 Amazon search results, category listings and product pages into clean JSON: ASIN, title, price, list price, discount, rating, review count, "bought in past month", bestseller rank, images, feature bullets, specifications, variant ASINs and the buy-box seller. No login, no browser, no API key.

**From US$1.50 per 1,000 products.**

### What you can do

- Search by **keyword** (one search per keyword) or paste any **search / category URL** (`/s?k=...`, `/s?rh=n:...`, `/b?node=...`) and page through up to 20 result pages.
- Fetch specific products by **ASIN** or product URL.
- Turn on **Product details** to open each product page and add brand, bestseller rank(s), breadcrumb category, up to ~7 high resolution images, feature bullets, specifications table, variant ASINs, seller name and ships-from.
- Filter by price range and sort (price, reviews, newest). Choose the marketplace: US, Canada, Mexico, Brazil, Spain, UK, Germany, France, Italy, Netherlands, Australia, India, Japan.

### Input example

```json
{
  "searchQueries": ["laptop stand", "wireless earbuds"],
  "marketplace": "amazon.com",
  "maxItems": 100,
  "maxPagesPerQuery": 5,
  "includeDetails": true,
  "sortBy": "review-rank",
  "minPrice": 10,
  "maxPrice": 60,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output example (with product details)

```json
{
  "asin": "B0BT9MG6VT",
  "url": "https://www.amazon.com/dp/B0BT9MG6VT",
  "title": "BESIGN LSX6N Laptop Stand, Ergonomic Adjustable Notebook Riser...",
  "brand": "BESIGN",
  "price": 23.74,
  "currency": "USD",
  "listPrice": 24.99,
  "discountPercent": 5,
  "rating": 4.7,
  "reviewsCount": 2902,
  "boughtPastMonth": "1K+",
  "availability": "In Stock",
  "inStock": true,
  "bestsellerRank": 41,
  "bestsellerCategory": "Laptop Stands",
  "category": "Electronics > Computers & Accessories > Laptop Accessories > Stands",
  "images": ["https://m.media-amazon.com/images/I/61o5DJi-MtL._AC_SL1500_.jpg"],
  "features": ["Broad Compatibility: ...", "Ergonomic Design: ..."],
  "specifications": { "Item Weight": "1000 g", "Color": "Black" },
  "variationAsins": ["B0B8RT78YS", "B0BT9LWNNY"],
  "sellerName": "BESIGN",
  "shipsFrom": "Amazon",
  "fulfilledByAmazon": true,
  "marketplace": "amazon.com",
  "searchQuery": "laptop stand",
  "searchPage": 1,
  "position": 3
}
```

Search-only runs return the card data: asin, title, price, list price, rating, reviews, bought-past-month, sponsored/Prime flags, badge and thumbnail. Fields not available are `null`.

### Pricing (pay per event)

| Event | Price | When |
|---|---|---|
| Product scraped (`product-result`) | US$1.50 / 1,000 | every product saved to the dataset |
| Product details (`product-details`) | US$5.00 / 1,000 | extra, only for products enriched with their product page |

A run of 1,000 products with details costs US$3.00. Set a maximum charge per run and the actor stops cleanly when it is reached.

### FAQ

**Does it need a proxy?** Amazon challenges datacenter IPs often. The actor starts on datacenter proxies and switches to residential automatically after repeated blocks; it detects captcha / bot-check pages, never tries to solve them and retries on a fresh IP.

**Why did a marketplace fail with "Amazon blocked the request"?** Some stores (UK, Germany, France, Italy) apply stronger bot protection. Use residential proxies (`apifyProxyGroups: ["RESIDENTIAL"]`) and retry. The run fails loudly instead of returning an empty dataset.

**How many results per search?** 16-60 per page depending on the store; Amazon usually stops after 7-20 pages, so split big jobs into several keywords or category URLs with price ranges.

**Which seller data is collected?** Only the storefront / trading name shown in the buy box. No personal contact data is collected.

**Are prices in the local currency?** Yes, in the currency of the selected marketplace (`currency` field), independent of the proxy country.

### Use cases

Price monitoring and repricing, competitor catalogues, bestseller-rank tracking, product research and dropshipping sourcing, MAP compliance, lead lists of brands selling in a niche, enrichment of ASIN lists.

### Responsible use

Collects publicly visible product information only. You are responsible for complying with Amazon's terms and applicable law for your use of the data.

### En español

Extrae resultados de búsqueda, categorías y fichas de producto de Amazon (EE. UU., Canadá, México, Brasil, España, Reino Unido, Alemania y más): ASIN, título, precio, precio de lista, valoración, reseñas, ranking de más vendidos, imágenes, características, especificaciones, variantes y vendedor. Sin login ni navegador. Desde US$1.50 por 1.000 productos (+ US$1.50 por 1.000 si activas el detalle de producto). Si Amazon bloquea las IP de datacenter, el actor cambia solo a proxy residencial.

# Actor input Schema

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

One search per entry, like typing it in the Amazon search box (for example: laptop stand, wireless earbuds).

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

Amazon search result, category (/s?rh=..., /b?node=...) or product (/dp/ASIN) URLs. The marketplace is taken from each URL.

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

Product ASINs to fetch directly (10 characters, for example B0BT9MG6VT). Each one is returned with full product details.

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

Amazon store used for keyword searches and ASINs. Some stores (amazon.co.uk, .de, .fr, .it) show stronger bot protection and need residential proxies.

## `maxItems` (type: `integer`):

Stop after this many products in total (across all searches).

## `maxPagesPerQuery` (type: `integer`):

Result pages to read per keyword or URL. Amazon shows 16-60 products per page and usually stops after 7-20 pages.

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

Open every product page to add brand, bestseller rank, bullets, images, specifications, variants and seller. Billed as an extra event per product and slower.

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

Keep results marked as sponsored ads. Off by default so you get organic listings.

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

Sort order for keyword and category searches.

## `minPrice` (type: `number`):

Only products priced at or above this amount (marketplace currency). Leave empty for no limit.

## `maxPrice` (type: `number`):

Only products priced at or below this amount (marketplace currency). Leave empty for no limit.

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

Amazon blocks datacenter IPs often. The actor starts on datacenter proxies and switches to RESIDENTIAL automatically after repeated blocks.

## Actor input object example

```json
{
  "searchQueries": [
    "laptop stand"
  ],
  "marketplace": "amazon.com",
  "maxItems": 30,
  "maxPagesPerQuery": 3,
  "includeDetails": false,
  "includeSponsored": false,
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All products collected during the run

# 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": [
        "laptop stand"
    ],
    "maxItems": 30,
    "maxPagesPerQuery": 3,
    "includeDetails": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/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": ["laptop stand"],
    "maxItems": 30,
    "maxPagesPerQuery": 3,
    "includeDetails": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/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": [
    "laptop stand"
  ],
  "maxItems": 30,
  "maxPagesPerQuery": 3,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabrikit/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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