# Amazon Product Scraper (`mcdowell/amazon-product-scraper`) Actor

Fetch product data from Amazon.com. Get ASINs, descriptions, prices, features, reviews e.t.c

- **URL**: https://apify.com/mcdowell/amazon-product-scraper.md
- **Developed by:** [McDowell](https://apify.com/mcdowell) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 product results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Amazon Product Scraper

**Amazon Product Scraper** (Unofficial Amazon API) is a scraper that extracts product information from Amazon category and search-result pages.

Provide an Amazon **category/search URL or direct Product URL,** select the maximum number of items to scrape, run the scraper and find the results at the Dataset tab.

### Features

- Extract product information from Amazon search/category pages.
- Control the maximum number of products to collect.
- Export scraped data through the Dataset tab.
- Useful for price monitoring, product research, market analysis, competitor intelligence, and e-commerce optimization.
- Supports automated collection of product data at scale, within Amazon's page limitations.

### How It Works

The scraper follows a simple workflow:

- Provide an Amazon URL
- Copy an Amazon category or search results URL and paste it into the scraper input.
- Choose the maximum number of products you want to collect for each search url.
- Start the scrape

The scraper navigates through the available Amazon result pages and extracts product information.

**Review the dataset**

Once the scrape finishes, the collected products are available in the Dataset tab.

**Download the data**

Export the dataset for analysis in your preferred workflow.

### Input

The actor takes in category/search URLs and direct product page URLs. It also takes in filters to control the results total results to be extracted per starting url.

#### Sample input

```json5
{
  "maxSearchPagesPerStartUrl": 6,
  "scrapeProductVariantPrices": true,
  "startUrls": [
    {
      "url": "https://www.amazon.com/s?k=wireless+headphones"
    }
  ],
  "maxItemsPerStartUrl": 100,
  "maxProductVariantsAsSeparateResults": 5,
  "proxyConfig": {
    "useApifyProxy": true
}
```

From the sample input above the scraper will attempt to collect up to 100 products from the available search-result pages. It will also try to get up to 5 variants of each product if available.

#### Amazon's 7-Page Limitation

Amazon search-result pages have a practical limitation that affects scraping.

For many Amazon search queries, only the first 7 pages of results are available to the scraper. This means that requesting a very large number of products does not necessarily mean that the scraper can retrieve an unlimited number of results.

#### What this means for your scraping jobs

To collect a broader product catalogue, consider:

- Using multiple, more specific Amazon category URLs.
- Splitting a broad search into several searches.
- Scraping different product categories/sub categories separately.
- Combining multiple datasets after scraping.

**Important:** The 7-page limitation is an Amazon-side limitation, not an indication that the scraper can always retrieve an unlimited number of pages.

### Why Use Amazon Scraper?

Amazon contains a large amount of structured information about products, including prices, titles, ratings, reviews, availability, and other product attributes.
Collecting this information in a dataset makes it easier to analyze Amazon at scale instead of manually checking individual products.
// TODO Complete this

### Sample Output

```json5
{
  "title": "AULA WIN68 HE Mechanical Gaming Keyboard 60%, Hall Effect Magnetic Switch, Fast Trigger Mode Adjustable Actuation, 8000Hz Polling Rate, RGB Backlit, Wired Black Keyboard for Laptop/PC Gamer",
  "url": "https://www.amazon.com/dp/B0DT43NNNF",
  "asin": "B0DT43NNNF",
  "inStock": true,
  "brand": "AULA",
  "price": {
    "value": 39.99,
    "currency": "$"
  },
  "listPrice": {
    "value": 49.99,
    "currency": "$"
  },
  "shippingPrice": {
    "value": 0.0,
    "currency": "$"
  },
  "stars": 4.5,
  "starsBreakdown": {
    "5 star": "78%",
    "4 star": "10%",
    "3 star": "6%",
    "2 star": "1%",
    "1 star": "5%"
  },
  "reviewsCount": 639,
  "questions": 0,
  "breadCrumbs": "Video Games›PC›Accessories›Gaming Keyboards",
  "thumbnails": "https://m.media-amazon.com/images/I/61uArG8glcL._AC_SY300_SX300_QL70_FMwebp_.jpg",
  "description": "",
  "features": [
    "Fast Trigger Gaming Keyboard: AULA WIN68 HE magnetic gaming keyboard offers an industry-leading 8,000Hz polling rate and 8x faster response time than traditional mechanical keyboard. Combined with ultra-low latency (0.3ms), it ensures your commands take effect instantly, giving you an edge in the game. The fast trigger keyboard is perfect for gamers and coders, greatly enhancing the gaming experience and work efficiency.",
    "Hall Effect Keyboard with Magnetic Switch: Equipped with advanced hall effect magnetic switches, the WIN68 HE black gaming keyboard offers adjustable actuation point(0.02mm-3.44mm), and each key can be personalized to the smallest unit of 0.1 mm, providing an ultra-precise keying experience. In addition, press/reset sensitivity can be individually set via software to match the keystroke habits of different people in different types of games",
    "Customizable Web Driver: The mechanical gaming keyboard is equipped with a professional web driver that allows users to customize RT/SOCD/DKS/MT/TGL functions, key mapping, macro editing, RGB lighting and other settings on windows systems without downloading(This driver does not support MAC, only compatible with Windows system). It provides one-stop management of the keyboard, allowing users to truly experience customization and personalization. Web driver connection: bit.ly/m/AULA",
    "16.8 Million RGB Backlit keyboard: The light up keyboard features 16.8 million colors of RGB lighting effects with south-facing LEDs for a better visual experience. 14 preset lighting effects add a great ambience to your games. Lighting effects and brightness can be easily adjusted via driver or FN and key combinations. The backlight can be turned off if not needed",
    "60% Compact Wired Keyboard: Designed for professional gamers, the 60% gaming keyboard saves up to 40% of desktop space while retaining the arrow keys and basic function keys. FN and key combinations unlock all keyboard commands. The 68-key wired gaming keyboard with detachable USB cable provides gamers with a more stable connection and greatly enhances the gaming experience. The small size and lightweight design make it easier to carry and perfect for business trip"
  ],
  "variants": [
    "B0DT43NNNF",
    "B0F193Z26T",
    "B0F195FB6P",
    "B0DWX8W227",
    "B0FPF778XB",
    "B0FPF5XZF7",
    "B0F19329R8",
    "B0FNR27L3Q"
  ],
  "reviewsLink": "/portal/customer-reviews/B0DT43NNNF/ref=cm_cr_dp_d_show_all_top?_encoding=UTF8&ie=UTF8&reviewerType=all_reviews",
  "delivery": "",
  "fastestDelivery": "",
  "returnPolicy": "FREE 30-day refund/replacement",
  "support": "",
  "variantAttributes": [
    "Color:"
  ],
  "priceVariants": null,
  "seller": {
    "name": "Amazon",
    "id": "",
    "url": "",
    "reviewsCount": null,
    "averageRating": null
  },
  "bestSellerRanks": null,
  "locationText": "Select your address"
}
```

The exact fields available in the output depend on the scraper implementation and the information Amazon makes available on the pages being processed.

#### The cost of scraping Amazon

Scraping costs can vary depending on the specific use case and the amount of data being processed, it’s difficult to provide an accurate estimate upfront. We recommend running a test with a limited sample of input data. This will give you an estimate of the cost per run, which you can then use to calculate the expected cost for the full scrape.

#### Best Practices

Use specific category or search URLs when possible.
Keep individual scraping jobs focused on a particular product segment.

Amazon Scraper turns Amazon search and category pages into structured product datasets.

Its main value is not simply collecting product information—it is making marketplace information searchable, comparable, and analyzable at scale.

You or your business can use the resulting data for:

- Competitive price comparison.
- Competitor monitoring.
- Product discovery.
- Market research.
- Pricing strategy.
- Inventory planning.
- Product positioning.
- Marketing and SEO research.
- Identifying new business opportunities.

Because Amazon can limit accessible search-result pages, scraping should be designed around the 7-page limitation rather than assuming that any requested number of products will always be available.

### Feedback and Feature request

We’re constantly looking for ways to make our Actors faster and more reliable. If you notice a bug or have technical feedback about , we’d love to hear from you—please open an issue and let us know by visiting Actor’s Issues tab.

# Actor input Schema

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

Enter urls of Amazon categories, search pages and specific product URLs.

## `maxItemsPerStartUrl` (type: `integer`):

Enter maximum number of results to be extracted for each input URL provided

## `maxSearchPagesPerStartUrl` (type: `integer`):

Enter the maximum number of search results pages to be scraped for each search URL

## `maxProductVariantsAsSeparateResults` (type: `integer`):

What is the maximum number of product variants you want to scrape per each product, outputted as separate results.

## `scrapeProductVariantPrices` (type: `boolean`):

Extract prices for the product variants

## `proxyConfig` (type: `object`):

Configure proxies to localize results and prevent limiting

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.amazon.com/s?k=stanley+cup"
    }
  ],
  "maxItemsPerStartUrl": 30,
  "maxSearchPagesPerStartUrl": 2,
  "maxProductVariantsAsSeparateResults": 10,
  "scrapeProductVariantPrices": false,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.amazon.com/s?k=stanley+cup"
        }
    ],
    "maxItemsPerStartUrl": 30,
    "maxSearchPagesPerStartUrl": 2,
    "maxProductVariantsAsSeparateResults": 10,
    "scrapeProductVariantPrices": false,
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mcdowell/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 = {
    "startUrls": [{ "url": "https://www.amazon.com/s?k=stanley+cup" }],
    "maxItemsPerStartUrl": 30,
    "maxSearchPagesPerStartUrl": 2,
    "maxProductVariantsAsSeparateResults": 10,
    "scrapeProductVariantPrices": False,
    "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mcdowell/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 '{
  "startUrls": [
    {
      "url": "https://www.amazon.com/s?k=stanley+cup"
    }
  ],
  "maxItemsPerStartUrl": 30,
  "maxSearchPagesPerStartUrl": 2,
  "maxProductVariantsAsSeparateResults": 10,
  "scrapeProductVariantPrices": false,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call mcdowell/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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