# Amazon Product Search Scraper: Prices, ASINs & Ratings (`plainrows/amazon-product-search`) Actor

Search Amazon by keyword in 15 marketplaces and get every product: ASIN, title, price, rating, reviews count, Best Seller and Amazon's Choice badges, bought last month, image and rank. Fast API results, no browser. Pay per product found, plus a small fee per 100 results from October 25, 2026.

- **URL**: https://apify.com/plainrows/amazon-product-search.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (community)
- **Categories:** E-commerce, Marketing, 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 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 Search Scraper: Prices, ASINs & Ratings

Search Amazon by keyword and get every product on the results pages as clean data: **ASIN, title, price, currency, rating, number of reviews, Best Seller and Amazon's Choice badges, "bought in past month", coupons, image and rank**. Works on **15 Amazon marketplaces** (amazon.com, .co.uk, .de, .fr, .es, .it, .nl, .se, .pl, .ca, .com.mx, .com.br, .co.jp, .in, .com.au), up to 700 products per keyword.

It calls a commercial e-commerce data API instead of driving a browser: **no proxies, no CAPTCHAs, no Amazon account.** **You pay per product returned** (from October 25, 2026, plus a small fee per block of up to 100 results): keywords with no result, sponsored placements you did not ask for and products removed by your filters are free.

### Typical uses

- **Product and niche research**: price range, ratings and sales signals ("bought in past month") for any keyword, before you launch or source a product.
- **Amazon SEO and rank tracking**: where your ASIN and your competitors' ASINs rank for your keywords, organic and sponsored.
- **Price monitoring**: schedule the same keywords daily and track price, coupons and badges over time.
- **Market comparison**: the same keyword on amazon.com, amazon.de and amazon.co.jp in one go (one run per marketplace).
- **Automations and AI agents**: feed n8n, Make, Zapier, Google Sheets or an MCP client with structured JSON.

### What you get for each product

| Field | Description |
|---|---|
| `asin`, `title`, `url` | Amazon product ID, title, clean product link (`https://www.amazon.com/dp/ASIN`) |
| `price`, `priceMax`, `currency` | Price shown on the results page, upper bound when Amazon shows a range, ISO currency |
| `rating`, `reviewsCount` | Average rating out of 5 and number of ratings |
| `isBestSeller`, `isAmazonChoice` | Best Seller and Amazon's Choice badges |
| `boughtPastMonth` | Amazon's "X+ bought in past month" figure (a lower bound, e.g. 10000 for "10K+") |
| `specialOffers`, `deliveryInfo` | Coupons and offers (e.g. `Save 50% with coupon`), delivery text as shown |
| `imageUrl` | Product thumbnail |
| `rank`, `position`, `isSponsored` | Organic rank for the keyword, position on the page (ads included), sponsored flag |
| `totalResults` | Number of results Amazon reports for the keyword |
| `searchQuery`, `marketplace`, `observedAt` | The keyword, the marketplace and when the data was fetched (UTC) |
| `correctedQuery` | The keyword Amazon actually searched when it auto-corrected yours ("Showing results for..."), else `null` |

Missing values are always `null`, never guessed: for example a product shown without a price on the results page has `price: null`. Each product appears once per keyword (Amazon repeats some products further down the pages; the best-ranked one is kept).

### Input

```json
{
  "searchQueries": ["wireless earbuds", "yoga mat"],
  "marketplace": "US",
  "maxProductsPerQuery": 50,
  "sortBy": "relevance",
  "minPrice": 20,
  "maxPrice": 100,
  "minRating": 4,
  "minReviews": 100,
  "includeSponsored": false
}
```

- **searchQueries**: up to 1,000 keywords per run, as you would type them in the Amazon search box.
- **marketplace**: US, GB, DE, FR, ES, IT, NL, SE, PL, CA, MX, BR, JP, IN, AU. Prices come in that marketplace's currency. **languageCode** (optional) switches the Amazon interface language, e.g. `fr_FR` on amazon.ca or `es_US` on amazon.com.
  Amazon.ca and Amazon.se are searched with the English (US) interface; Amazon.ca prices are returned in CAD.
- **maxProductsPerQuery**: 10 to 700 (default 50). An Amazon results page holds about 50 products.
- **sortBy**: `relevance` (default), `featured`, `price_low_to_high`, `price_high_to_low`, `avg_customer_review`, `newest_arrival`. **minPrice** / **maxPrice**: Amazon's own price filter, whole amounts in the marketplace currency.
- **Free filters**: `minRating`, `minReviews`. Products removed by a filter are never billed. They keep only products for which Amazon shows a rating (some marketplaces, such as amazon.pl, often show none: the run then says so). A keyword whose products were all removed by a filter returns a free row with `reason: "filtered"`.
- **includeSponsored**: off by default (organic results only). When on, sponsored placements are returned too, flagged `isSponsored: true`, and billed like other products.

### Output example

Real row from a run on 2026-10-07 (keyword `wireless earbuds`, amazon.com):

```json
{
  "searchQuery": "wireless earbuds",
  "correctedQuery": null,
  "found": true,
  "rank": 1,
  "position": 1,
  "isSponsored": false,
  "asin": "B0FQFB8FMG",
  "title": "Apple AirPods Pro 3 Wireless Earbuds with Active Noise Cancellation",
  "url": "https://www.amazon.com/dp/B0FQFB8FMG",
  "price": 179,
  "priceMax": null,
  "currency": "USD",
  "rating": 4.4,
  "reviewsCount": 16100,
  "isBestSeller": true,
  "isAmazonChoice": false,
  "boughtPastMonth": 10000,
  "specialOffers": [],
  "deliveryInfo": "Join Prime to get FREE delivery Sat, Oct 10 Or Non-members get FREE delivery Mon, Oct 12",
  "imageUrl": "https://m.media-amazon.com/images/I/61solmQSSlL._AC_UY218_.jpg",
  "totalResults": 27625,
  "marketplace": "US",
  "amazonDomain": "amazon.com",
  "languageCode": "en_US",
  "observedAt": "2026-10-07T13:21:37.787Z",
  "schemaVersion": "1.0"
}
```

A keyword with no result returns one free marker row:

```json
{"searchQuery": "xqzvbn plorft 4471", "found": false, "marketplace": "US", "amazonDomain": "amazon.com", "languageCode": "en_US", "observedAt": "2026-10-07T13:21:37.787Z", "schemaVersion": "1.0"}
```

### Pricing

Pay per product returned, no subscription, no fee per run, no proxy costs. See the **Pricing** tab for current prices: one event per **product found**, cheaper on higher Apify plans. Price, rating, badges, coupons and image are included in that price (no "details" or "offers" add-on).

Price change on October 25, 2026: each block of up to 100 search results requested for a keyword that returns products also costs one `search-page` event ($0.0045 on all plans). Keywords with no product stay free; the product price does not change.

Keywords with no result, duplicates, skipped sponsored placements, products removed by your filters and input mistakes cost nothing. The run never spends more than the maximum cost you set.

**Free Apify plan:** each run returns up to 20 products for up to 2 keywords, so you can check the output. A paid Apify plan removes these limits.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~amazon-product-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["wireless earbuds"], "marketplace": "US", "maxProductsPerQuery": 50}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/amazon-product-search`, and map the dataset items to Google Sheets, Airtable or your database.

**AI agents (MCP):** add `https://mcp.apify.com?tools=plainrows/amazon-product-search` to Claude, Cursor or any MCP client. The agent gets a typed tool and pays per result.

### What this is not

- **Search results only.** It returns what the Amazon results pages show. It does not open each product page: no product description, bullet points, variants, seller list, Best Sellers Rank (BSR) or stock level.
- **No list price / "was" price and no Prime flag**: the results data does not include them reliably, so they are not returned rather than guessed.
- **No reviews text, no reviewer names.**
- Prices and delivery text are those shown to a visitor in the marketplace's country at the time of the run; they can differ for a logged-in customer or another delivery address.
- Not affiliated with Amazon.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): keywords run, keywords with no result, products billed, sponsored placements skipped, products removed by filters, duplicate and invalid keywords, and anything skipped because of the free-plan or budget limit.

### FAQ

**How do I scrape Amazon search results?**
Enter keywords as you would type them in the Amazon search box, pick the marketplace and run: one row per product with ASIN, title, price, rating, reviews count, badges and image.

**Which Amazon countries are supported?**
15 marketplaces: US, GB, DE, FR, ES, IT, NL, SE, PL, CA, MX, BR, JP, IN, AU, with prices in the local currency.

**How many products per keyword?**
10 to 700 (**maxProductsPerQuery**); an Amazon results page holds about 50.

**Are sponsored products included?**
Not by default. Turn on **includeSponsored** to get them too, flagged `isSponsored: true`.

**Does it return product descriptions, BSR or reviews?**
No: it returns what the results pages show. No product page details, no Best Sellers Rank, no review texts.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper)

**Compared with other APIs:** [Amazon Product Advertising API alternative](https://nadaho.github.io/plainrows/amazon-product-advertising-api-alternative/)

### Support

Missing a field or a marketplace, or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

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

What you would type in the Amazon search box, one per line: "wireless earbuds", "yoga mat", "usb c charger 65w". Up to 1,000 keywords per run.

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

Amazon site to search. Prices are in that marketplace's currency.

## `maxProductsPerQuery` (type: `integer`):

From 10 to 700 (about 50 products per Amazon results page). Each product returned is billed; see Pricing.

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

Amazon's own sort order for the results.

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

Amazon price filter, whole amount in the marketplace currency (e.g. 20 = $20 on amazon.com). Leave empty for no limit.

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

Amazon price filter, whole amount in the marketplace currency. Leave empty for no limit.

## `minRating` (type: `number`):

Keep only products rated at least this (0 = no filter). Filtered products are not billed.

## `minReviews` (type: `integer`):

Keep only products with at least this many ratings (0 = no filter). Filtered products are not billed.

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

Also return sponsored (ad) placements, flagged isSponsored: true and billed like other products. Off by default: only organic results.

## `languageCode` (type: `string`):

Amazon interface language, e.g. fr_FR on amazon.ca or es_US on amazon.com. Leave empty for the marketplace default.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "marketplace": "US",
  "maxProductsPerQuery": 50,
  "sortBy": "relevance",
  "minRating": 0,
  "minReviews": 0,
  "includeSponsored": false
}
```

# Actor output Schema

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

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/amazon-product-search").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"],
    "marketplace": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/amazon-product-search").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"
  ],
  "marketplace": "US"
}' |
apify call plainrows/amazon-product-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainrows/amazon-product-search"
        }
    }
}
```

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/1pBd1kwRDJfY5mKIz/builds/ydxP5ev64SgYfN3e2/openapi.json
