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

Scrape amazon.com by keyword, ASIN or URL: price, list price, rating, reviews, seller, Best Sellers Rank, images, variants. $1 per 1,000 results, proxies included.

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

## Pricing

from $1.00 / 1,000 search results

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

**Amazon Product Scraper** extracts **amazon.com product data** as clean JSON: search results by **keyword** and full product pages by **ASIN or URL**, with price, list price, rating, review count, seller, Best Sellers Rank, images, variants and specs.
**Search results cost $1.00 per 1,000 and full product pages $4.00 per 1,000**, with platform usage and proxies included, so there's nothing to configure.
Prices are pinned to a US delivery ZIP (default 10001), so runs are comparable day to day. A missing price is `null`, never 0, and you pay only for results delivered.
To try it, enter a keyword such as `wireless earbuds` and click **Start**.

### What can you do with Amazon product data?

- **Track prices and deals.** Schedule a daily run on your ASINs or keywords and watch price, list price, stock and Prime-only deals change.
- **Research a market or niche.** Pull every product for a keyword with rating, review count, "bought in past month", badges and Best Sellers Rank.
- **Monitor sellers and the buy box.** See who holds the featured offer, their seller ID, and whether Amazon ships it.
- **Build catalogs and feed AI agents.** Get structured specs, bullet points, descriptions, full-size images and variant ASINs.

### Which mode should I use?

| Mode | Input | What each result contains | Price |
|---|---|---|---|
| **Search results** (default) | `searchQueries` or search URLs | ASIN, title, brand (on grid layouts), price, list price, rating, reviews, "bought in past month", badge, sponsored flag, thumbnail, position | **$1.00 / 1,000** |
| **Full product details** | `asins`, product URLs, or searches with `scrapeProductDetails: true` | Everything a product page shows: brand or authors, price, list price, seller and seller ID, ships from, availability, Best Sellers Rank, categories, bullet points, description, all images, variants, parent ASIN, full spec table | **$4.00 / 1,000** |

**Rule of thumb:** use search results when you need many products and their prices and ratings. Use full product details when you need seller, stock, rank, specs or images, or when you already know the ASINs. ASINs and product URLs always return full product details.

### How do I scrape Amazon products?

1. Enter **search keywords**, **ASINs** or **amazon.com URLs**.
2. Turn on **full product details** if you need seller, stock, rank or specs.
3. Set **Max results** to cap the run, and click **Start**.
4. Download the results as JSON, CSV, Excel or HTML, or fetch them through the API.

### Input examples

**Scan a keyword (search results):**

```json
{
    "searchQueries": ["wireless earbuds"],
    "maxItems": 500
}
```

**Track prices of specific products (full details by ASIN):**

```json
{
    "asins": ["B0BTYCRJSS", "B088NRLMPV"],
    "maxItems": 2
}
```

**Full details for every product in a search:**

```json
{
    "searchQueries": ["usb c cable"],
    "scrapeProductDetails": true,
    "maxItems": 100
}
```

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array of strings | — | Keywords, exactly as typed into Amazon's search bar. |
| `asins` | array of strings | — | 10-character Amazon product IDs, e.g. `B0BTYCRJSS`. Always full product details. |
| `startUrls` | array of `{ "url": … }` | — | amazon.com search URLs (`/s?k=…`) or product URLs (`/dp/ASIN`). Other URL types are skipped. |
| `scrapeProductDetails` | boolean | `false` | Open each product found by search for full details ($4.00 / 1,000 instead of $1.00 / 1,000). |
| `maxItems` | integer | `100` | Exact cap on results returned. Products you list by ASIN or URL are always returned first. |
| `maxPagesPerQuery` | integer (1–20) | `7` | Search pages per keyword. Amazon shows 16–60 products per page. |
| `includeSponsored` | boolean | `true` | Keep or drop sponsored listings. They're always flagged with `isSponsored`. |
| `postalCode` | string | `10001` | US ZIP code that prices and availability are shown for. |
| `maxConcurrency` | integer (1–50) | `10` | Parallel requests. The default suits almost every run. |

At least one of `searchQueries`, `asins` or `startUrls` is required.

### Output

Search result:

```json
{
    "resultType": "search",
    "asin": "B0BTYCRJSS",
    "url": "https://www.amazon.com/dp/B0BTYCRJSS",
    "title": "Soundcore by Anker P20i True Wireless Earbuds, with Big Bass, 30H Playtime",
    "brand": null,
    "price": 18.98,
    "freeWithKindleUnlimited": false,
    "listPrice": 39.99,
    "currency": "USD",
    "rating": 4.4,
    "reviewsCount": 111439,
    "boughtPastMonth": "10K+ bought in past month",
    "badge": "Overall Pick",
    "isSponsored": false,
    "thumbnail": "https://m.media-amazon.com/images/I/51Yya2WtvkL._AC_UY218_.jpg",
    "position": 1,
    "searchQuery": "wireless earbuds",
    "searchPage": 1,
    "marketplace": "amazon.com",
    "scrapedAt": "2026-10-07T00:43:19.509Z"
}
```

Full product details (arrays shortened):

```json
{
    "resultType": "product",
    "asin": "B088NRLMPV",
    "url": "https://www.amazon.com/dp/B088NRLMPV",
    "title": "Anker USB C to USB C Cable, 60W Fast Charging Cable (2-Pack, 6 ft, Black)",
    "brand": "Anker",
    "authors": [],
    "price": 7.99,
    "listPrice": 9.99,
    "currency": "USD",
    "isPrimeExclusiveDeal": true,
    "hasFeaturedOffer": true,
    "availability": "In Stock",
    "seller": "AnkerDirect",
    "sellerId": "A294P4X9EWVXLJ",
    "shipsFrom": "Amazon",
    "rating": 4.7,
    "reviewsCount": 89317,
    "boughtPastMonth": "10K+ bought in past month",
    "breadcrumbs": ["Electronics", "Computers & Accessories", "Cables & Accessories", "USB Cables"],
    "bestSellersRanks": [{ "rank": 1, "category": "USB Cables" }],
    "features": ["Durable Design: Reinforced nylon exterior and a robust core…"],
    "description": null,
    "images": ["https://m.media-amazon.com/images/I/71IE9dLBduL._AC_SL1500_.jpg"],
    "parentAsin": "B0DRYBKGR2",
    "variants": [{ "asin": "B088NMR44C", "values": ["3.3FT*2", "Black", "2"] }],
    "attributes": { "Brand": "Anker", "Connector Type": "USB Type C", "Cable Type": "USB C to USB C Cable" },
    "deliverTo": "New York 10001",
    "searchQuery": "usb c cable",
    "searchPosition": 1,
    "isSponsored": false,
    "marketplace": "amazon.com",
    "scrapedAt": "2026-10-07T00:44:29.062Z"
}
```

Every result has `resultType`: `"search"` for search results and `"product"` for full product details.

#### Search result fields

| Field | Type | Meaning |
|---|---|---|
| `resultType` | string | Always `"search"`. |
| `asin` | string | Amazon product ID. |
| `url` | string | Clean product URL, `https://www.amazon.com/dp/{asin}`. |
| `title` | string | null | Product title. |
| `brand` | string | null | Brand line shown above the title on grid layouts (fashion, toys, renewed); `null` on list layouts. |
| `price` | number | null | Current price. `null` when the card shows none, or only a Kindle Unlimited price. |
| `freeWithKindleUnlimited` | boolean | `true` when the card shows only "$0.00 with Kindle Unlimited". The purchase price is then on the product page. |
| `listPrice` | number | null | Struck-through list or typical price; `null` when none is shown. |
| `currency` | string | `USD`. |
| `rating` | number | null | Average star rating, 0–5. |
| `reviewsCount` | integer | null | Number of ratings. |
| `boughtPastMonth` | string | null | Amazon's sales badge, e.g. "10K+ bought in past month". |
| `badge` | string | null | Badge such as "Overall Pick" or "Best Seller". |
| `isSponsored` | boolean | Sponsored (ad) placement. |
| `thumbnail` | string | null | Search-result image URL. |
| `position` | integer | 1-based position among the results for this keyword, counted across pages. |
| `searchQuery` | string | Keyword that produced the result. |
| `searchPage` | integer | Search page number. |
| `marketplace` | string | `amazon.com`. |
| `scrapedAt` | string | ISO 8601 timestamp. |

#### Full product detail fields

| Field | Type | Meaning |
|---|---|---|
| `resultType` | string | Always `"product"`. |
| `asin`, `url`, `title` | string | As above. |
| `brand` | string | null | Brand from the spec table or the "Visit the … Store" byline; usually `null` for books, which list `authors` instead. |
| `authors` | array of strings | Book authors; empty for other products. |
| `price` | number | null | Price of the featured (buy box) offer for the delivery ZIP. `null` when there's no featured offer. |
| `listPrice` | number | null | List or typical price, if shown. |
| `currency` | string | `USD`. |
| `isPrimeExclusiveDeal` | boolean | The featured price is a Prime-member-only deal. |
| `hasFeaturedOffer` | boolean | Amazon shows a buy box offer. When `false`, `price` is `null`. |
| `availability` | string | null | Stock message, e.g. "In Stock" or "Only 5 left in stock - order soon."; `null` for digital items such as ebooks. |
| `seller`, `sellerId` | string | null | Seller holding the buy box and their Amazon seller ID. |
| `shipsFrom` | string | null | Who ships the order, e.g. "Amazon". |
| `rating`, `reviewsCount`, `boughtPastMonth` | | As above. |
| `breadcrumbs` | array of strings | Category path. |
| `bestSellersRanks` | array of `{ rank, category }` | Every Best Sellers Rank shown, top-level category first. |
| `features` | array of strings | "About this item" bullet points. |
| `description` | string | null | Product description, or the book description for books. |
| `images` | array of strings | Full-size image URLs. |
| `parentAsin` | string | null | Parent ASIN that groups the variants. |
| `variants` | array of `{ asin, values }` | Sibling variants and their option values (size, color, pack). |
| `attributes` | object | Spec table as key/value pairs, e.g. `"Connector Type": "USB Type C"`. |
| `deliverTo` | string | null | Delivery location the page was priced for, e.g. "New York 10001". |
| `searchQuery`, `searchPosition`, `isSponsored` | | Present when the product was found through a search. |
| `marketplace`, `scrapedAt` | string | As above. |

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

| What you get | Price |
|---|---|
| Search result | **$1.00 per 1,000** ($0.001 each) |
| Full product details | **$4.00 per 1,000** ($0.004 each) |
| Run start | $0.00005 per run |
| Platform usage and proxies | Included |

Examples: 10,000 search results cost **$10**. Daily price tracking of 500 ASINs costs **$2 per day**. Set a maximum cost per run in the run options, and the scraper stops cleanly when it's reached.

### What can I rely on?

- **Comparable prices.** Every request is priced for the same US delivery ZIP (default 10001), whatever the time or region of the run.
- **No fake zeros.** A missing price is `null`, never 0. Kindle Unlimited-only search cards return `price: null` with `freeWithKindleUnlimited: true`.
- **Exact limits.** `maxItems` is never exceeded, and products you list by ASIN or URL are returned before any search results.
- **Only pay for data.** ASINs that don't exist return no result and no charge.
- **Clear flags.** Sponsored results are marked with `isSponsored`; duplicate listings on a page are returned once.
- **Measured coverage** on live amazon.com runs: 1,000 search results across 12 categories in 17 seconds with no failed requests, and 135 of 135 product pages across 11 categories. On product pages, title, brand or authors, bullet points or description, and images were filled 100% of the time; price and Best Sellers Rank 98%.

### Limits

- **amazon.com only** for now. Other Amazon marketplaces aren't available yet.
- Search URLs (`/s?k=…`) and product URLs (`/dp/…`) are supported. Best Sellers, category, store and review pages aren't.
- Up to 20 search pages per keyword.
- Reviews text isn't collected; ratings and review counts are.
- Runs by users on Apify's free plan are limited to 3 search queries, ASINs or URLs and 20 results per run.

### Use with AI agents and integrations

- **AI agents (MCP):** connect the [Apify MCP server](https://mcp.apify.com) and add this Actor as a tool. An agent can then search amazon.com and read product pages on demand, with the input and output schemas above.
- **API:** run it synchronously and get the items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/LordFloofington~amazon-product-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"asins": ["B0BTYCRJSS"], "maxItems": 1}'
```

- **Integrations:** schedule runs and send results to Google Sheets, Slack, Zapier, Make, n8n or webhooks.

### FAQ

#### Do I need proxies or an Amazon account?

No. Proxies are included in the price, and no login or API key from Amazon is needed.

#### Why is a price `null`?

Amazon shows no featured offer for that product at the delivery ZIP (for example, "See All Buying Options" listings), or a search card shows only a Kindle Unlimited price. Run full product details to get the Kindle purchase price.

#### Can I get prices for a different US location?

Yes. Set `postalCode` to any US ZIP code.

#### How fresh is the data?

Every result is fetched live during your run; `scrapedAt` records when.

#### How do I scrape thousands of products?

Use search results mode with a high `maxItems` and several keywords, then run full product details only on the ASINs you need.

### Is it legal to scrape Amazon?

This scraper collects only publicly visible product information and no personal data. Make sure your use complies with Amazon's terms and the laws that apply to you.

# Actor input Schema

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

Keywords to search on amazon.com, exactly as typed into its search bar, e.g. "wireless earbuds". Each keyword returns search results ($1.00 per 1,000), or full product details if "Open each product page" is on. Provide at least one keyword, ASIN or URL.

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

10-character Amazon product IDs, e.g. B0BTYCRJSS. Each ASIN returns full product details ($4.00 per 1,000) and is returned before any search results. Use this for price tracking of known products.

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

amazon.com search URLs (https://www.amazon.com/s?k=…) or product URLs (https://www.amazon.com/dp/ASIN). Product URLs return full product details and are returned before search results. Other URL types and other Amazon sites are skipped.

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

Off (default): one result per product straight from search pages, with title, price, list price, rating, reviews, badges and sponsored flag, at $1.00 per 1,000. On: opens every product found by search and returns full details instead (brand, seller, availability, Best Sellers Rank, bullet points, all images, variants, specs) at $4.00 per 1,000. Has no effect on ASINs and product URLs, which always return full details.

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

Exact maximum number of results returned and charged for in this run, across all keywords, ASINs and URLs. Products given as ASINs or product URLs are returned first. Runs by users on Apify's free plan are limited to 3 search queries, ASINs or URLs and 20 results per run.

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

How many search result pages to read for each keyword. Amazon shows 16–60 products per page, so the default of 7 covers roughly 100–400 products per keyword. The run still stops at Max results.

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

Keep sponsored (ad) placements from search pages. Every result is flagged with isSponsored either way; turn this off to return organic results only.

## `postalCode` (type: `string`):

US ZIP code that prices, offers and availability are shown for, e.g. 90210. Leave empty to use 10001 (New York). Keep it the same across runs to compare prices over time.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests. The default of 10 suits almost every run; higher values finish faster but are retried more often.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "scrapeProductDetails": false,
  "maxItems": 100,
  "maxPagesPerQuery": 7,
  "includeSponsored": true,
  "maxConcurrency": 10
}
```

# Actor output Schema

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

All results with every field, as JSON/CSV/Excel. Search results carry position and searchQuery; full product details carry hasFeaturedOffer, seller, availability, bestSellersRanks, images, variants and attributes.

## `overview` (type: `string`):

The same results as a compact table: image, title, brand, ASIN, price, list price, currency, rating, reviews, bought in past month, sponsored flag and URL.

# 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 earbuds"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lordfloofington/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 earbuds"] }

# Run the Actor and wait for it to finish
run = client.actor("lordfloofington/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 earbuds"
  ]
}' |
apify call lordfloofington/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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