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

Scrape Amazon search results by keyword or URL in 21 marketplaces: ASIN, title, price, rating, reviews, Prime, Best Seller, sponsored, delivery. No login.

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

## Pricing

Pay per event + usage

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Scraper - Search, ASIN Details & Prices

Scrape Amazon search results for any keyword or search URL in 21 marketplaces, and optionally the full product page of any ASIN: price, rating, reviews, badges, ads, delivery, brand, Best Sellers Rank, images, variants and top reviews.

**Why this Actor**

- **The cheapest Amazon search results on Gold and above: $0.40 per 1,000** (10 searches × 100 products, all Actor fees included; Apify platform usage billed separately). On Free, Bronze and Silver ($1.95–$2.85) and for product pages we are **not** the cheapest — a per-result Actor is cheaper there; we are still 43–87% below the most-used Amazon Actor for search results on every plan ([comparison](#compared-with-alternatives)).
- **Organic *and* sponsored rank** for every product, plus "bought in past month", coupons and delivery dates — **38 fields per product** in search results and **39 fields** in product details (brand, availability, Best Sellers Rank, category path, description, details table, all images, variant ASINs, up to ~10 top reviews).
- **Price & rank tracking built in, free:** turn on **Track price and position changes** and every row gets `previousPrice`, `priceChange`, `previousPosition`, `positionChange` and `isNew` compared with your previous run. Nothing is filtered out and nothing extra is charged.
- **21 Amazon marketplaces** (US, UK, DE, FR, IT, ES, CA, MX, BR, JP, IN, AU, NL, BE, PL, SE, TR, SA, AE, SG, EG) plus **ZIP-code level delivery location** at no extra cost.
- **Every Amazon search filter:** sort order (including Best sellers), price range, department, category search URLs, any Amazon URL parameter, up to 700 products per search. No browser, no proxies, no login.

### Compared with alternatives

**Honest summary:** for search results this Actor is the cheapest of the three on Gold and above. On Free, Bronze and Silver the cheapest per-result Actor costs less, and for product pages it costs less on every plan; the most-used Actor is also slightly cheaper for product pages on Bronze/Silver and clearly cheaper on Platinum/Diamond. We add separate organic/sponsored rank, free change tracking and a free delivery ZIP code; for seller / offer lists use the most-used Actor.

Price per 1,000 rows, all Actor fees included (public Apify Store listings, checked September 2026). Search = 10 keywords × 100 products; product pages = 1,000 ASINs in one run.

| Apify plan | This Actor: search | This Actor: product pages | Most-used Amazon Actor (~24,000 users) | Cheapest per-result Amazon Actor (~1,170 users) |
|---|---|---|---|---|
| Free | $2.85 | $4.01 | $5.00 | **$1.00** |
| Bronze | $2.25 | $4.01 | $4.00 | **$0.75** |
| Silver | $1.95 | $4.01 | $3.50 | **$0.75** |
| Gold | **$0.40** | $2.71 | $3.00 | $0.75 |
| Platinum | **$0.40** | $2.71 | $1.70 | $0.75 |
| Diamond | **$0.40** | $2.71 | $0.80 | $0.75 |
| Delivery ZIP / country | +$0 | +$0 | +$10 to +$60 per 1,000 | not offered |

The two other Actors' listings don't bill platform usage to the user; for this Actor Apify bills it separately (about $0.001–$0.005 for a small run at 256 MB). The most-used Actor also returns seller / Buy Box offer lists (extra fee per offer); neither alternative reports separate organic and sponsored rank or price/position changes between runs.

### Not included

- **Seller / Buy Box and other-offer lists, exact stock counts, customer Q\&A** — not collected in either mode.
- **Full review lists** — product details include only the ~10 top reviews shown on the product page.
- **Brand, stock, variants in search results** — Amazon's result pages don't show them; use **Product details by ASIN** for brand, availability, variants and Best Sellers Rank.
- **Best Sellers ranking pages (`/zgbs/…`) and keyword-less category pages** — use a keyword + **Sort by: Best sellers** (+ Department) instead.
- **Where your product ranks on Google** (not Amazon) — use [Google SERP Scraper](https://apify.com/cheapapi/google-serp-scraper).
- **Search volume of your keywords** — use [Keyword Research Tool](https://apify.com/cheapapi/keyword-research-tool).

### What data you get

Every row has `recordType`: `searchResult` (one product on a search page) or `productDetails` (one ASIN's product page).

#### Search results (38 fields)

| Field | Type | Example |
|---|---|---|
| `id` | string | `"07b65d470a5fa56e"` (stable: same product + search + marketplace + location = same id in every run) |
| `recordType` | string | `"searchResult"` |
| `searchTerm` / `input` | string | `"running shoes"` / your keyword or URL |
| `position` | number | `1` (position on the results page, ads included) |
| `organicPosition` | number | `1` (rank among regular results) |
| `sponsoredPosition` | number | `null` (rank among ads, when the product is also advertised) |
| `isSponsored` | boolean | `false` |
| `pageSection` / `positionInSection` | string / number | `"results"`, `"sponsored"`, `"editorialRecommendations"`, `"topRatedFromOurBrands"` / `null` |
| `asin` | string | `"B0DT1MCP6F"` |
| `title` | string | `"Men's Charged+ Assert 11 Running Shoes"` |
| `url` | string | `"https://www.amazon.com/dp/B0DT1MCP6F"` |
| `price` / `priceMax` | number | `37.19` / `null` (upper end of a price range) |
| `currency` | string | `"USD"` |
| `rating` / `ratingMax` | number | `4.6` / `5` |
| `reviewsCount` | number | `2000` |
| `boughtPastMonth` | number | `300` |
| `isPrime` / `isAmazonChoice` / `isBestSeller` | boolean | `false` / `true` / `false` |
| `specialOffers` / `labels` | array | `["Save 25%"]` / `[]` |
| `deliveryInfo` | string | `"FREE delivery Thu, Oct 1 Or fastest delivery Wed, Sep 30"` |
| `isFreeDelivery` | boolean | `true` |
| `deliveryPrice` / `deliveryPriceCurrency` | number / string | `3.99` / `"GBP"` |
| `imageUrl` | string | `"https://m.media-amazon.com/images/I/512fzWuBTNL._AC_UL320_.jpg"` |
| `marketplace` / `amazonDomain` / `language` | string | `"US"` / `"amazon.com"` / `"en_US"` |
| `deliveryLocation` | string | `"United States"` or `"10001,New York,United States"` |
| `searchUrl` | string | Amazon results URL that was read |
| `totalResults` | number | `94844` (results Amazon reports for the search) |
| `correctedSearchTerm` | string | Amazon's spelling correction, if any |
| `scrapedAt` | string | `"2026-09-28T15:57:09.514Z"` |

#### Product details by ASIN (39 fields)

| Field | Type | Example |
|---|---|---|
| `id` | string | `"935cd21c1a7d1e0e"` (stable: same ASIN + marketplace + location = same id in every run) |
| `recordType` / `input` | string | `"productDetails"` / `"B0756FCPPN"` |
| `asin` / `parentAsin` | string | `"B0756FCPPN"` / `"B001CG5MOU"` |
| `title` | string | `"Skechers USA Men's Expressed-Derest Fashion Sneaker"` |
| `brand` / `byline` | string | `"Skechers"` / `"Visit the Skechers Store"` |
| `url` | string | `"https://www.amazon.com/dp/B0756FCPPN"` |
| `price` / `priceMax` / `currency` | number / number / string | `60.18` / `null` / `"USD"` |
| `discountPercent` | number | `null` |
| `rating` / `ratingMax` / `reviewsCount` | number | `4.6` / `5` / `37751` |
| `isAvailable` / `isAmazonChoice` | boolean | `true` / `false` |
| `bestSellersRank` / `bestSellersCategory` | number / string | `19373` / `"Clothing, Shoes & Jewelry"` |
| `bestSellersRanks` | array | `[{"rank": 19373, "category": "Clothing, Shoes & Jewelry"}, {"rank": 80, "category": "Men's Fashion Sneakers"}]` |
| `categories` / `categoryPath` | array / string | `["Clothing, Shoes & Jewelry", "Men", …]` / `"Clothing, Shoes & Jewelry > Men > Shoes > Fashion Sneakers"` |
| `description` | string | `"Mid lace up boot Want a cool kick …"` |
| `productDetails` | object | `{"Item model number": "61160", "Date First Available": "February 27, 2009", …}` |
| `imageUrl` / `images` / `videos` | string / array / array | main image / all large images / video URLs |
| `variantAsins` / `variantsCount` | array / number | `["B07567J1BS", …]` / `182` |
| `coupons` | array | `[]` |
| `isNewerModelAvailable` / `newerModelAsin` | boolean / string | `false` / `null` |
| `topReviews` | array | `[{"rating": 5, "title": "…", "text": "…", "date": "2026-08-26", "isVerifiedPurchase": true, "source": "marketplace", …}]` |
| `marketplace` / `amazonDomain` / `language` / `deliveryLocation` | string | `"US"` / `"amazon.com"` / `"en_US"` / `"United States"` |
| `scrapedAt` | string | `"2026-09-29T05:20:00.000Z"` |

#### Price & rank tracking fields (+5 fields, only with tracking on)

| Field | Type | Example |
|---|---|---|
| `previousPrice` | number | `39.99` (price in the previous run of the same tracking name) |
| `priceChange` | number | `-2.8` (`price − previousPrice`; `null` if either price is unknown or the currency changed) |
| `previousPosition` | number | `4` (search results only) |
| `positionChange` | number | `3` (`previousPosition − position`: **positive = moved up**; search results only) |
| `isNew` | boolean | `false` (`true` = not seen in this tracking history before) |

### How to use

1. Open the Actor in Apify Console and type one or more keywords into **Search keywords or Amazon search URLs** (or paste Amazon search links, e.g. a category search like `https://www.amazon.com/s?k=headphones&rh=n%3A172282`).
2. Pick the **Amazon marketplace** (default: United States).
3. Set **Max products per search** (default 100, up to 700).
4. *(Optional)* Open **Product details by ASIN** and paste ASINs or product URLs to get full product pages as well (you can leave the search field empty).
5. Click **Start**. Search results arrive in 1–2 minutes, product details usually within a few minutes.
6. Download the results as JSON, CSV, Excel, XML or HTML, or open the **Products**, **Product details**, **Rankings & badges**, **Prices & delivery** or **Price & rank changes** view.

```json
{
    "searches": ["wireless earbuds", "https://www.amazon.co.uk/s?k=running+shoes&rh=p_72%3A419153031"],
    "marketplace": "US",
    "maxProductsPerSearch": 100,
    "asins": ["B0756FCPPN", "https://www.amazon.de/dp/B0CHX3QBCH"]
}
```

#### API

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~amazon-product-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searches":["wireless earbuds"],"marketplace":"US","maxProductsPerSearch":100}'
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('cheapapi/amazon-product-scraper').call({
    searches: ['wireless earbuds'],
    marketplace: 'US',
    maxProductsPerSearch: 100,
    asins: ['B0756FCPPN'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("cheapapi/amazon-product-scraper").call(run_input={
    "searches": ["wireless earbuds"],
    "marketplace": "US",
    "maxProductsPerSearch": 100,
    "asins": ["B0756FCPPN"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

Runs with product details take a few minutes, so for them use `call()` (waits for the run to finish) rather than the synchronous `run-sync-get-dataset-items` endpoint, which times out after 5 minutes.

### Use cases

- **Price monitoring:** schedule the Actor with **Track price and position changes** on and get `priceChange` for every product and competitor, plus coupons, availability and delivery promises.
- **Rank tracking / Amazon SEO:** see the organic and sponsored position of every ASIN for your target keywords and `positionChange` since the last run.
- **Product research:** find best sellers (Best sellers sort, Best Sellers Rank), Amazon's Choice products and items with high "bought in past month" in any niche or category.
- **Catalog enrichment:** turn a list of ASINs into brand, category path, description, details table, images and variant ASINs.
- **Ad intelligence:** see which brands buy sponsored slots for which keywords.
- **Market sizing across countries:** compare the same keyword or ASIN across 21 Amazon marketplaces and ZIP codes.

### Advanced options

| Option | Default | What it does |
|---|---|---|
| **Product ASINs or URLs** | empty | ASINs (e.g. `B0CHX3QBCH`) or product URLs (`/dp/…`, `/gp/product/…`), up to 5,000 per run. ASINs use the selected marketplace, URLs their own |
| **Include top reviews** | on | Add the top reviews of the product page (usually up to 10) to each product-details row. No extra charge |
| **Sort by** | Amazon default | Relevance, Featured, Price low→high, Price high→low, Average customer review, Newest arrivals, Best sellers |
| **Minimum price / Maximum price** | empty | Whole numbers in the marketplace currency. **Empty = no price filter** (all prices) |
| **Department** | all | Search within one Amazon department (Electronics, Books, Home & Kitchen, … 27 options) |
| **Extra Amazon URL parameters** | none | Any Amazon search URL parameters, e.g. `&rh=p_72:1248963011` (4★ & up) or `&rh=n:172282` (a category) |
| **Include sponsored products** | on | Also return ads (flagged with `isSponsored`) |
| **Include highlighted sections** | off | Also return products from "Editorial recommendations" and "Top rated from our brands" blocks |
| **Language** | marketplace language | 27 languages, e.g. `es_US` for Spanish on amazon.com |
| **Delivery ZIP / postal code** | whole country | Prices, availability and delivery dates for a shopper at that ZIP / postal code (e.g. `10001`); applies to searches and product details |
| **Delivery GPS coordinates** | none | `latitude,longitude[,radius]` instead of a ZIP code |
| **Location code** | none | Numeric location code for experts; overrides ZIP and country |
| **Amazon domain** | marketplace domain | Force a specific Amazon domain |
| **Max result pages per search** | automatic | Limit the number of Amazon result pages opened (1–7) |
| **Processing speed** | Automatic | Searches: Automatic = fast for small runs, economy for 30+ searches; Fast = 1–2 minutes; Economy = up to ~45 minutes (30+ searches). Same price. Product details always use standard processing (usually a few minutes, up to ~45 minutes for large batches) |
| **Send search URLs unchanged** | off | Open pasted Amazon search URLs with all their parameters instead of converting them into keyword + filters |
| **Track price and position changes** | off | Remember each product's last price and search position (per ASIN, search, marketplace and delivery location) and add `previousPrice`, `priceChange`, `previousPosition`, `positionChange`, `isNew`. Free; every row is still delivered |
| **Tracking name** | `default` | Each name keeps its own history (e.g. `earbuds-us-daily`), so separate schedules don't mix |

```json
{
    "searches": ["yoga mat"],
    "marketplace": "US",
    "maxProductsPerSearch": 200,
    "sortBy": "bestSellers",
    "minPrice": 20,
    "maxPrice": 60,
    "department": "Sports & Outdoors",
    "includeSponsored": false,
    "deliveryZipCode": "10001",
    "language": "en_US",
    "processingSpeed": "auto",
    "asins": ["B0756FCPPN"],
    "includeTopReviews": true,
    "trackChanges": true,
    "trackingName": "yoga-mats-us"
}
```

**Category and best-seller searches:** paste a category search URL that contains a keyword (`https://www.amazon.com/s?k=headphones&rh=n%3A172282`) or use a keyword + **Department** + **Sort by: Best sellers**. Amazon Best Sellers ranking pages (`/zgbs/…`, `/gp/bestsellers/…`) and category pages without a keyword (`/b?node=…`) cannot be read as a search; they are skipped with a clear message and are never charged.

### Output example

Example output: search result (one row):

```json
{
    "id": "07b65d470a5fa56e",
    "recordType": "searchResult",
    "searchTerm": "running shoes",
    "input": "running shoes",
    "position": 1,
    "organicPosition": 1,
    "sponsoredPosition": null,
    "isSponsored": false,
    "pageSection": "results",
    "positionInSection": null,
    "asin": "B0DT1MCP6F",
    "title": "Men's Charged+ Assert 11 Running Shoes",
    "url": "https://www.amazon.com/dp/B0DT1MCP6F",
    "price": 37.19,
    "priceMax": null,
    "currency": "USD",
    "rating": 4.6,
    "ratingMax": 5,
    "reviewsCount": 2000,
    "boughtPastMonth": 300,
    "isPrime": false,
    "isAmazonChoice": true,
    "isBestSeller": false,
    "specialOffers": [],
    "labels": [],
    "deliveryInfo": "FREE delivery Thu, Oct 1 Or fastest delivery Wed, Sep 30",
    "isFreeDelivery": true,
    "deliveryPrice": null,
    "deliveryPriceCurrency": null,
    "imageUrl": "https://m.media-amazon.com/images/I/512fzWuBTNL._AC_UL320_.jpg",
    "marketplace": "US",
    "amazonDomain": "amazon.com",
    "language": "en_US",
    "deliveryLocation": "United States",
    "searchUrl": "https://www.amazon.com/s?k=running+shoes&language=en_US",
    "totalResults": 94844,
    "correctedSearchTerm": null,
    "scrapedAt": "2026-09-28T15:57:09.514Z"
}
```

Example output: product details (long arrays and texts shortened with `…`):

```json
{
    "id": "935cd21c1a7d1e0e",
    "recordType": "productDetails",
    "input": "B0756FCPPN",
    "asin": "B0756FCPPN",
    "parentAsin": "B001CG5MOU",
    "title": "Skechers USA Men's Expressed-Derest Fashion Sneaker",
    "brand": "Skechers",
    "byline": "Visit the Skechers Store",
    "url": "https://www.amazon.com/dp/B0756FCPPN",
    "price": 60.18,
    "priceMax": null,
    "currency": "USD",
    "discountPercent": null,
    "rating": 4.6,
    "ratingMax": 5,
    "reviewsCount": 37751,
    "isAvailable": true,
    "isAmazonChoice": false,
    "bestSellersRank": 19373,
    "bestSellersCategory": "Clothing, Shoes & Jewelry",
    "bestSellersRanks": [
        { "rank": 19373, "category": "Clothing, Shoes & Jewelry" },
        { "rank": 80, "category": "Men's Fashion Sneakers" }
    ],
    "categories": ["Clothing, Shoes & Jewelry", "Men", "Shoes", "Fashion Sneakers"],
    "categoryPath": "Clothing, Shoes & Jewelry > Men > Shoes > Fashion Sneakers",
    "description": "Mid lace up boot Want a cool kick with a lot of laid-back good looks? Skechers' Expressed-Derest sneaker has 'em. …",
    "productDetails": {
        "Product Dimensions": "10 x 15 x 6 inches; 2.12 pounds",
        "Item model number": "61160",
        "Department": "mens",
        "Date First Available": "February 27, 2009",
        "Manufacturer": "Skechers"
    },
    "imageUrl": "https://m.media-amazon.com/images/I/81Ulo87iddL._AC_SX395_SY395_QL70_FMwebp_.jpg",
    "images": ["https://m.media-amazon.com/images/I/81Ulo87iddL._AC_SL1500_.jpg", "…"],
    "videos": [],
    "variantAsins": ["B07567J1BS", "B08GSSBDFK", "…"],
    "variantsCount": 182,
    "coupons": [],
    "isNewerModelAvailable": false,
    "newerModelAsin": null,
    "topReviews": [
        {
            "rating": 5,
            "title": "Looks good and got a complement from my date",
            "text": "Bought these for a first date and my date complemented them. They look stylish and feel good. …",
            "date": "2026-08-26",
            "reviewedIn": "Reviewed in the United States on August 26, 2026",
            "isVerifiedPurchase": true,
            "helpfulVotes": null,
            "imageUrls": [],
            "source": "marketplace"
        }
    ],
    "marketplace": "US",
    "amazonDomain": "amazon.com",
    "language": "en_US",
    "deliveryLocation": "United States",
    "scrapedAt": "2026-09-29T05:20:00.000Z"
}
```

With **Track price and position changes** on, each row also gets (second run of the same tracking name):

```json
{ "previousPrice": 39.99, "priceChange": -2.8, "previousPosition": 4, "positionChange": 3, "isNew": false }
```

The dataset has five views: **Products**, **Product details**, **Rankings & badges**, **Prices & delivery** and **Price & rank changes**. A `RUN_SUMMARY` record in the key-value store lists searches, ASINs, delivered counts, the processing speed used and every skipped input with the reason.

### Pricing

**Typical cost: $0.04 per keyword × 100 products on Gold and above ($0.19–$0.28 on Free–Silver), plus Apify platform usage billed separately.**

**Apify Free plan:** Apify does not pay developers for usage on its Free plan, so on the Free plan this Actor can be used for up to **$0.25 of results per calendar month** — enough to try it on a small input. When the allowance is used up, the run ends with a clear message (not an error). Any paid Apify plan removes the limit; prices are the same.

Pay per result — no monthly fee, no start fee (product-details runs add one $0.01 batch fee). Price & rank tracking is free and you never pay for more products than your limit. Every search and every ASIN you enter is a paid request to Amazon for us, so a search that delivers no products (or too few to pay for it) costs a small **search checked** fee, and an ASIN without a product page costs an **ASIN checked** fee — see the table. Invalid entries (not an Amazon search URL, not an ASIN) are skipped before any request and are never charged.

Apify platform usage (compute) is billed separately by Apify, on top of the prices below. At the default 256 MB memory a small run typically uses about $0.001–$0.005.

| Event | Free plan | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| Product in search results (per product delivered) | **$2.80 / 1,000** | $2.20 / 1,000 | $1.90 / 1,000 | **$0.35 / 1,000** |
| Search with results (once per keyword/URL that delivered products) | $0.0047 | $0.0047 | $0.0047 | $0.0047 |
| Product details by ASIN (per product page delivered) | **$4.00 / 1,000** | $4.00 / 1,000 | $4.00 / 1,000 | **$2.70 / 1,000** |
| Product details batch (once per run that delivered product details) | $0.01 | $0.01 | $0.01 | $0.01 |
| Search checked without enough products (see below) | $0.004 | $0.004 | $0.004 | $0.004 |
| ASIN checked without product details | $0.0022 | $0.0022 | $0.0022 | $0.0022 |

**When is "search checked" charged?** Only when a search was sent but its delivered products don't pay for it: Amazon found no products, your filters (e.g. **Include sponsored products** off) removed all of them, or the search failed or timed out after it was sent. Very deep searches (Max products per search above 100) are paid per block of up to 100 returned items, so a deep search that delivers only a few products can add one fee per unpaid block. A normal search that delivers products (Max products per search up to 100) practically never pays this fee.

Examples:

- **1 keyword × 100 products:** $0.28 (Free) · $0.22 (Bronze) · $0.19 (Silver) · **$0.04 (Gold+)**
- **1,000 search results (10 keywords × 100):** $2.85 (Free) · $2.25 (Bronze) · $1.95 (Silver) · **$0.40 (Gold+)**
- **Product details for 1 ASIN:** $0.014 (Free, Bronze, Silver) · **$0.0127 (Gold+)**
- **Product details for 1,000 ASINs (one run):** $4.01 (Free, Bronze, Silver) · **$2.71 (Gold+)**
- **1 keyword × 100 products + details for the top 20:** $0.37 (Free) · **$0.10 (Gold+)**
- **Daily rank tracking of 50 keywords × 50 products for 30 days (1,500 searches, 75,000 products):** $33.30 on Gold+
- **Worked example with misses (Gold+):** 10 keywords × 100 products where 2 keywords return nothing, plus 5 ASINs of which 1 is not listed: 8 × $0.0047 + 800 × $0.00035 + 2 × $0.004 (search checked) + 4 × $0.0027 + $0.01 (batch) + 1 × $0.0022 (ASIN checked) = **$0.3486**, plus Apify platform usage.

Set **Maximum cost per run** in the run options: the Actor only requests what fits and stops exactly at your budget.

### Integrations

- **Schedules:** run daily or hourly with Apify Schedules and **Track price and position changes** to see price and rank moves between runs.
- **Make, Zapier, n8n:** use the Apify app to start runs and pass products to other apps.
- **Google Sheets / Excel:** export the dataset as CSV/Excel or sync it to Google Sheets with the Apify integration.
- **Webhooks:** get notified when a run finishes and fetch the dataset through the API.
- **API & MCP:** call the Actor from any language via the Apify API or clients, or let AI agents use it through the Apify MCP server.

### FAQ

**Is there a limit on the Apify Free plan?** Yes: up to $0.25 of this Actor's results per calendar month, enough to try it. Apify pays developers nothing for Free-plan usage while our data costs are real, so this keeps the Actor sustainable. Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month. Any paid Apify plan has no limit.

**Is it legal?** The Actor collects publicly visible Amazon pages (no login). Scraping public data is generally allowed, but make sure your use complies with Amazon's terms and the laws that apply to you (e.g. copyright for descriptions and images, data-protection law for review texts). If unsure, ask a lawyer.

**How fresh is the data?** Every run collects Amazon live at the moment of the run — nothing comes from a cache.

**How long does a run take?** Searches: usually 1–2 minutes (economy processing for 30+ searches can take up to ~45 minutes). Product details: usually a few minutes; large batches can take up to ~45 minutes.

**Why did I get fewer results than "Max products per search"?** Amazon shows only as many products as it has for the query and filters (niche keywords often have fewer than 100). Products shown both as an ad and as a regular result are returned once (with both positions). Sponsored products are skipped when "Include sponsored products" is off. Skipped inputs and their reasons are listed in `RUN_SUMMARY`.

**Why is an ASIN missing from the product details?** The product does not exist in that marketplace, is no longer listed, or Amazon showed no product page. Such ASINs are listed in `RUN_SUMMARY` and cost only the ASIN-checked fee ($0.0022) — the product page was still requested. Check that the marketplace matches the ASIN (an amazon.de ASIN may not exist on amazon.com).

**Can I scrape Best Sellers or a category?** Yes, as a search: use a category search URL with a keyword, or a keyword + **Department** + **Sort by: Best sellers**. Best Sellers ranking pages (`/zgbs/…`) themselves are not supported; for any product, `bestSellersRank` in product details gives its exact rank.

**How do I control my budget?** Set **Maximum cost per run** in the run options. The Actor requests only the searches/ASINs that fit (including the $0.01 details batch fee and a possible search-checked / ASIN-checked fee for each request) and never charges beyond it.

**Why was I charged a "search checked" or "ASIN checked" fee?** Every search and ASIN you enter is requested from Amazon and that request costs us money whether or not something comes back. When a search delivers no products (nothing found, all removed by your filters, or the search failed/timed out after it was sent) you pay $0.004 for it instead of the search + product prices; when an ASIN has no product page you pay $0.0022 instead of the details price. `RUN_SUMMARY` lists each such input with the reason, and `searchesCheckedFees` / `asinsCheckedFees` show how many fees were charged. To avoid them, check the keywords and ASINs (and the marketplace) before large runs. The one-time $0.01 **details batch** fee is charged once per run that delivers product details (they are collected as one batch), so put many ASINs into one run rather than one per run.

**Can I monitor prices or rankings automatically?** Yes — turn on **Track price and position changes**, pick a **Tracking name**, save the input as a task and add an Apify Schedule (e.g. daily). Every run then shows `priceChange`, `positionChange` and `isNew` against the previous run; filter the **Price & rank changes** view or send the dataset to a webhook, Google Sheets or Make/Zapier. The history is kept in a named key-value store in your account (entries not seen for 180 days are forgotten) and costs nothing extra.

**Can I scrape a specific ZIP code?** Yes — fill in **Delivery ZIP / postal code**. Prices, availability and delivery dates are then shown as for a shopper at that location, for searches and product details. There is no extra charge.

**Something is wrong or missing — where do I get help?** Open an issue on the Actor's **Issues** tab in Apify Console with your run ID and we will look into it.

### Limitations

- Up to 700 products per search (7 result pages) and 5,000 ASINs per run.
- Search results contain only what Amazon's result pages show: no list/strike-through price, seller name, stock count, product description or reviews — use product details for more.
- Product details contain no seller / Buy Box or other-offers list, no exact stock count, no customer Q\&A and only the top reviews shown on the page (not the full review list).
- Best Sellers ranking pages and category pages without a keyword cannot be read directly.
- `isPrime` is based on what the listing shows (Prime delivery or Prime price) and can miss Prime-eligible products.
- Minimum/maximum price filters accept whole numbers; leave them empty for no price filter.
- Tracking compares with the previous run of the same tracking name only; runs of one tracking name should not overlap in time.
- Delivery ZIP codes must be available for the chosen marketplace; the run stops with a clear message otherwise.
- Economy processing for 30+ searches and large product-details batches can take up to ~45 minutes.

### Privacy

Search results contain product data only. Product details include the text of top reviews but **no reviewer names, profile links or avatars** — we drop them. If you store review texts, handle them according to the data-protection law that applies to you (e.g. GDPR).

# Actor input Schema

## `searches` (type: `array`):

What to search on Amazon — one keyword per line (e.g. "wireless earbuds"), or paste an Amazon search results URL, including category-filtered searches (e.g. https://www.amazon.com/s?k=headphones\&rh=n%3A172282). URL filters and the URL's marketplace are kept. Leave empty if you only want product details by ASIN. A search that returns no products costs the $0.004 "search checked" fee.

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

Which Amazon store to search for keywords. Search URLs always use their own marketplace.

## `maxProductsPerSearch` (type: `integer`):

How many products to collect for each keyword or URL (in page order, up to 700). You pay for products delivered; a search that delivers no products costs the $0.004 "search checked" fee, and above 100 each block of up to 100 returned items that the delivered products don't pay for adds one such fee.

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

One ASIN (e.g. B0CHX3QBCH) or Amazon product URL (e.g. https://www.amazon.de/dp/B0CHX3QBCH) per line. ASINs use the marketplace selected above; product URLs use their own marketplace. Up to 5,000 per run. Empty by default because every product page is a separate paid event (product details plus one $0.01 batch fee per run), so a plain search run never pays for details you did not ask for. An ASIN without a product page in that marketplace costs the $0.0022 "ASIN checked" fee.

## `includeTopReviews` (type: `boolean`):

Add the top reviews shown on the product page (usually up to 10: rating, title, text, date, verified purchase) to each product-details row. No extra charge.

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

Order of the Amazon results. "Best sellers" uses Amazon's best-selling order for your keyword (combine it with a department or a category search URL for a category best-seller list). Empty = Amazon's default order.

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

Only products that cost at least this much (whole number, in the marketplace currency). Empty = no minimum (no price filter).

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

Only products that cost at most this much (whole number, in the marketplace currency). Empty = no maximum (no price filter).

## `department` (type: `string`):

Search only within one Amazon department (category). Empty = all departments.

## `extraUrlParameters` (type: `string`):

For experts: any Amazon search URL parameters, e.g. "\&rh=p_72:1248963011" (4 stars & up) or "\&i=electronics\&bbn=172282". Sort and price settings above are added automatically.

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

Also return products shown as ads (marked with isSponsored). Turn off to get only regular results. If this removes every product of a search, the search still costs the $0.004 "search checked" fee (the search was requested).

## `includeHighlightedSections` (type: `boolean`):

Also return products from "Editorial recommendations" and "Top rated from our brands" blocks on the results page. (Searches whose products are all removed by these filters cost the $0.004 "search checked" fee.)

## `language` (type: `string`):

Language of the Amazon page. Empty = the marketplace's main language.

## `deliveryZipCode` (type: `string`):

See prices, availability and delivery dates for a shopper at this ZIP / postal code (e.g. 10001 for New York, SW1A for London). Empty = the whole country.

## `deliveryCoordinates` (type: `string`):

Alternative to the ZIP code: "latitude,longitude" or "latitude,longitude,radius" in meters (min 200), e.g. "40.7128,-74.0060".

## `locationCode` (type: `integer`):

For experts: a numeric location code (country or postal-code level). Overrides ZIP code and marketplace country.

## `amazonDomain` (type: `string`):

For experts: force a specific Amazon domain. Empty = the marketplace's domain.

## `maxPagesPerSearch` (type: `integer`):

Maximum number of Amazon result pages to open per search (1–7). Empty = as many as needed to reach "Max products per search".

## `processingSpeed` (type: `string`):

Automatic: fast for small runs, economy for 30+ searches. Fast: results usually within 1–2 minutes. Economy: can take up to ~45 minutes, used only for runs with 30+ searches. Same price. Product details by ASIN always use standard processing (usually a few minutes).

## `sendUrlsUnchanged` (type: `boolean`):

For experts: open pasted Amazon URLs exactly as they are instead of converting them into keyword + filters. Language and location in the URL should then match the settings above.

## `trackChanges` (type: `boolean`):

Remembers the last price and search position of every product (per ASIN, search, marketplace and delivery location) and adds <code>previousPrice</code>, <code>priceChange</code>, <code>previousPosition</code>, <code>positionChange</code> (positive = moved up) and <code>isNew</code> to each row. Schedule the same input daily or weekly to monitor prices and rankings. No extra charge.

## `trackingName` (type: `string`):

Each name keeps its own history. Use one name per list you monitor (e.g. <code>earbuds-us-daily</code>) so separate schedules do not affect each other. Max 100 characters.

## Actor input object example

```json
{
  "searches": [
    "wireless earbuds"
  ],
  "marketplace": "US",
  "maxProductsPerSearch": 100,
  "asins": [
    "B0CHX3QBCH"
  ],
  "includeTopReviews": true,
  "includeSponsored": true,
  "includeHighlightedSections": false,
  "processingSpeed": "auto",
  "sendUrlsUnchanged": false,
  "trackChanges": false,
  "trackingName": "default"
}
```

# Actor output Schema

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

No description

## `productDetails` (type: `string`):

No description

## `changes` (type: `string`):

No description

## `summary` (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 = {
    "searches": [
        "wireless earbuds"
    ],
    "marketplace": "US",
    "maxProductsPerSearch": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("cheapapi/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 = {
    "searches": ["wireless earbuds"],
    "marketplace": "US",
    "maxProductsPerSearch": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("cheapapi/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 '{
  "searches": [
    "wireless earbuds"
  ],
  "marketplace": "US",
  "maxProductsPerSearch": 100
}' |
apify call cheapapi/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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