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

Amazon product scraper: extract search results for any keyword or ASIN list with title, price, list price, rating, review count, Prime, sponsored flag and badges, on amazon.com, .co.uk, .de, .fr, .ca and more. Optional product page details (brand, seller, features). No login.

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

## Pricing

from $2.10 / 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.
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 Results, Prices & Ratings

Scrape Amazon search results and product pages into flat JSON: ASIN, title, price, currency, list price, rating, ratings count, Prime, sponsored flag, badges and image, plus optional brand, availability, seller, bullet features, categories and Best Sellers Rank. Works on 12 Amazon marketplaces without login.

### What it does

- Takes a keyword (`query`) and returns the products of the Amazon search results page (`/s?k=...`), page after page, in display order, until `maxItems`.
- Optionally takes ASINs or product URLs (`asins`) and returns those products from their product page.
- With `includeDetails`, also opens each search result's product page to add brand, availability, seller, "About this item" bullets, category path and Best Sellers Rank.
- One flat record per product (no nested objects), `null` when Amazon does not show a value, prices as numbers with a separate ISO `currency`.
- Prices are those shown to a visitor located in the marketplace's country: amazon.com is fetched from US IPs, every other marketplace through residential IPs of its own country, so prices include the local VAT and use the local currency.
- Amazon robot checks, challenge pages and interstitials are never solved or clicked: the Actor retries with new proxy sessions, several in parallel, and fails with an explicit message if Amazon blocks every attempt.

### Input

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `query` | string | One of `query` / `asins` | — | Keywords, as typed in the Amazon search box. Example: `wireless earbuds` |
| `asins` | array of strings | One of `query` / `asins` | — | ASINs (`B0BTYCRJSS`) or product URLs (`https://www.amazon.de/dp/B08N5WP9NP`). A URL's marketplace overrides `domain` |
| `domain` | string | No | `amazon.com` | `amazon.com`, `amazon.co.uk`, `amazon.de`, `amazon.fr`, `amazon.it`, `amazon.es`, `amazon.nl`, `amazon.ca`, `amazon.com.au`, `amazon.co.jp`, `amazon.com.mx`, `amazon.in` |
| `maxItems` | integer | No | 20 | Maximum number of products (ASINs and search results together) |
| `includeDetails` | boolean | No | `false` | Open each search result's product page for brand, availability, seller, features, categories, Best Sellers Rank |
| `sortBy` | string | No | `relevance` | `relevance`, `price-low-to-high`, `price-high-to-low`, `avg-customer-review`, `newest-arrivals`, `best-sellers` |

Example:

```json
{
    "query": "wireless earbuds",
    "domain": "amazon.com",
    "maxItems": 10
}
```

### Output

One dataset item per product. Example from a run with `includeDetails: true` (`features` shortened to 2 of 5 bullets):

```json
{
    "asin": "B0BQPNMXQV",
    "url": "https://www.amazon.com/dp/B0BQPNMXQV",
    "title": "JBL Vibe Beam - True Wireless Earbuds - Black",
    "brand": "JBL",
    "price": 29.95,
    "currency": "USD",
    "listPrice": 49.95,
    "rating": 4.2,
    "reviewsCount": 41339,
    "isPrime": true,
    "isSponsored": false,
    "badge": "Amazon's Choice",
    "dealBadge": "Limited time deal",
    "boughtPastMonth": "10K+ bought in past month",
    "thumbnailUrl": "https://m.media-amazon.com/images/I/41+1Csr1pSL._AC_SL1000_.jpg",
    "position": 1,
    "page": 1,
    "query": "wireless earbuds",
    "domain": "amazon.com",
    "availability": "In Stock",
    "seller": null,
    "features": [
        "JBL Deep Bass Sound: Get the most from your mixes with high-quality audio from secure, reliable earbuds with 8mm drivers featuring JBL Deep Bass Sound",
        "Comfortable fit: The ergonomic, stick-closed design of the JBL Vibe Beam fits so comfortably you may forget you're wearing them. The closed design excludes external sounds, enhancing the bass performance"
    ],
    "categories": "Electronics > Headphones, Earbuds & Accessories > Headphones & Earbuds > Earbud Headphones",
    "bestSellersRank": "#14 in Electronics",
    "detailsScraped": true,
    "scrapedAt": "2026-11-02T21:18:29+00:00"
}
```

| Field | Description |
|-------|-------------|
| `asin`, `url` | Amazon identifier and canonical product URL (`/dp/ASIN`) |
| `title` | Product title |
| `price`, `currency`, `listPrice` | Current price, ISO currency, strike-through list or typical price |
| `rating`, `reviewsCount` | Average rating out of 5 and number of ratings |
| `isPrime`, `isSponsored` | Prime delivery shown, sponsored placement (search results only) |
| `badge`, `dealBadge` | Status badge (Best Seller, Amazon's Choice, Overall Pick...) and deal badge (Limited time deal, Save 33%...) |
| `boughtPastMonth` | Sales hint as displayed, e.g. `10K+ bought in past month` |
| `thumbnailUrl` | Image URL |
| `position`, `page`, `query` | Rank in the search results (1-based, across pages, sponsored included), results page, query |
| `brand`, `availability`, `seller`, `features`, `categories`, `bestSellersRank` | Product page fields (`includeDetails` or `asins`), otherwise `null` |
| `detailsScraped` | `true` when the product page fields were filled |
| `domain`, `scrapedAt` | Marketplace and UTC timestamp |

The dataset has two views: **Products** (search overview) and **Product details**.

### Pricing

Pay-per-event, no start fee: **$3.50 per 1,000 products** (event `PRODUCT`) on the Apify Free plan, lower on paid plans. You only pay for results pushed to the dataset.

| Apify plan | Price per 1,000 products |
|---|---|
| Free | $3.50 |
| Starter | $3.00 |
| Scale | $2.60 |
| Business | $2.10 |

- Additional event `PRODUCT_DETAILS` (product page details): $16.00 per 1,000 on the Free plan, $16.00 on Business. Charged only when that data is returned.

Set a maximum cost per run in the run options: the Actor stops cleanly when it is reached.

### Limitations

- Amazon shows a limited number of results pages per query to signed-out visitors; very broad queries stop there. Use several narrower queries or `sortBy` for more products.
- Products without a buy-box price (only other sellers' offers, unavailable items) have `price: null`.
- `isPrime` relies on the Prime markers of the search results page; they are not shown on every marketplace or to every visitor, so `false` can mean "not shown".
- `boughtPastMonth`, `availability` and badges are returned as displayed, in the language Amazon serves (English is requested; some marketplaces answer in their own language).
- Marketplaces other than amazon.com use residential proxies only and are slower; amazon.co.uk and amazon.fr answer many sessions with a challenge page, so runs there take longer and can fail when Amazon blocks every attempt.
- `includeDetails` loads one product page (about 2 MB) per product, which makes runs several times slower.
- Reviews are not included: see [Amazon Reviews Scraper](https://apify.com/sweet_stickball/amazon-reviews-scraper).

### Related Actors

- [Amazon Best Sellers Scraper - Top 100 Rankings by Category](https://apify.com/sweet_stickball/amazon-bestsellers-scraper) — Scrape Amazon Best Sellers rankings: rank, ASIN, price, rating and reviews for any category and marketplace. Product research data, no login.
- [Amazon Reviews Scraper API - 9 Marketplaces, No Login](https://apify.com/sweet_stickball/amazon-reviews-scraper) — Scrape Amazon product reviews: rating, text, date, verified purchase and helpful votes on 9 marketplaces. Amazon reviews data API, no login needed.
- [Walmart Scraper - Product Prices, Ratings & Sellers](https://apify.com/sweet_stickball/walmart-scraper) — Scrape Walmart search results or product pages: title, price, original price, rating, review count, seller, availability, image and URL.

# Actor input Schema

## `query` (type: `string`):

Keywords searched on Amazon, exactly as typed in the Amazon search box (results page /s?k=...). Leave empty if you only want the products listed in 'ASINs or product URLs'.

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

Optional. Products to fetch directly from their product page: ASINs (B0BTYCRJSS) or product URLs (https://www.amazon.de/dp/B08N5WP9NP). A URL's marketplace overrides 'Amazon domain'. Returned before the search results, within the same 'Maximum items'.

## `domain` (type: `string`):

Marketplace to search. Prices are those shown to a visitor in that marketplace's country, in its currency.

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

Maximum number of products to return (search results and ASINs together). Amazon shows roughly 16 to 60 products per search page and a limited number of pages per query.

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

Also open each search result's product page to add brand, availability, seller, bullet features, categories and Best Sellers Rank. Slower (one extra page per product). Products requested by ASIN always include these fields.

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

Order of the search results, as in Amazon's 'Sort by' menu.

## Actor input object example

```json
{
  "query": "wireless earbuds",
  "asins": [
    "B0BTYCRJSS",
    "https://www.amazon.de/dp/B08N5WP9NP"
  ],
  "domain": "amazon.com",
  "maxItems": 10,
  "includeDetails": false,
  "sortBy": "relevance"
}
```

# Actor output Schema

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

Dataset items shown with the 'overview' view.

## `details` (type: `string`):

Dataset items shown with the 'details' view (brand, availability, seller, categories, features).

# 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 = {
    "query": "wireless earbuds",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("sweet_stickball/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 = {
    "query": "wireless earbuds",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("sweet_stickball/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 '{
  "query": "wireless earbuds",
  "maxItems": 10
}' |
apify call sweet_stickball/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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