# Amazon Search Scraper — Prices, Ratings & Rank (`lergassy/amazon-search-scraper`) Actor

\[$0.80/1K products] Amazon search results for any keyword on 21 marketplaces: ASIN, title, price, list price, discount, rating, ratings count, bought last month, badges, sponsored flag, position. Sponsored rows and failed pages are free. No run fee, no browser.

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

## Pricing

from $0.56 / 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 Search Scraper** scrapes Amazon search results by keyword or search URL on 21 marketplaces and returns ASIN, title, price, list price, discount, star rating, ratings count, "bought in past month", badges, sponsored flag, organic rank and page position as JSON — one row per product.

**$0.0008 per product** — 1,000 products for 80 cents. No start fee, no login, no browser. Sponsored placements are skipped and never charged; searches that fail are free.

### Tested head-to-head — 13 October 2026

Same search ("yoga mat", amazon.com, 20 products) run side by side with the six most-used Amazon search Actors on the Apify Store:

| | This Actor | Other Amazon search Actors |
|---|---|---|
| Price per 1,000 products | **$0.80, no start fee** | $0.60 – $5.00, four of six add a start fee |
| Products returned of 20 asked | **20** | 2 – 20 (one stopped at 2 within a $0.10 budget) |
| Fields per row | **33**, including organic rank, lowest offer price, Best Seller category, bought last month | 5 – 68 |
| Sponsored rows | **skipped and free** by default, or kept and flagged | mostly mixed into results and charged |
| Price in the marketplace currency | **yes** | one Actor returned prices in Kazakh tenge for amazon.com |

### What is Amazon Search Scraper?

A product and keyword research tool for Amazon sellers, brand managers, price-monitoring teams, market analysts and AI agents. It reads the search page Amazon serves to a shopper — the same order, the same badges, the same sponsored slots — and turns every card into a clean row. A search of 200 products takes about a minute and costs 16 cents.

Typical uses:

- **Keyword ranking** — where does your ASIN sit for "yoga mat" on page 1, and who is above it?
- **Competitor pricing** — list price, sale price and discount for a whole niche, every morning on a schedule.
- **Product research** — sort a category by "bought in past month" and ratings count to find what actually sells.
- **Ad-share studies** — turn on sponsored products and measure how many of the first 48 slots are paid.
- **International comparison** — the same keyword on amazon.com, .de, .co.uk and .co.jp, each in its own currency.

### What is in every row

| Field | Meaning |
|---|---|
| `asin`, `title`, `subtitle`, `url`, `imageUrl`, `imageUrlLarge` | The product — `url` is the clean `/dp/ASIN` link; `subtitle` is the grey feature line under the title; `imageUrlLarge` is the full-size picture |
| `price`, `listPrice`, `discountPercent`, `currency`, `priceText` | Current price, the crossed-out List / RRP / Typical price, discount %, ISO currency of the marketplace |
| `rating`, `reviewsCount` | Star rating (0–5) and number of ratings — `18.8K` comes back as `18800` |
| `boughtPastMonth` | Lower bound from Amazon's "10K+ bought in past month" badge — the best public sales signal on the page |
| `lowestOfferPrice`, `offersCount` | Cheapest price under "More Buying Choices" and how many other offers the card shows |
| `badges`, `badgeCategory`, `isSponsored`, `coupon`, `available` | Amazon's Choice, Best Seller, Overall Pick, Limited time deal; the Best Seller category ("Yoga Mats"); paid placement; coupon text; Currently unavailable |
| `delivery`, `options` | Delivery promise as shown on the card; variation summary such as `4 sizes` |
| `organicRank`, `positionOverall` | Rank among regular results across all pages (1, 2, 3 … — what a seller tracks), and the slot across all pages with ads counted |
| `query`, `marketplace`, `page`, `position`, `searchUrl` | Which search, which site, which page, which slot on that page |

Two table views come with the dataset: **Products** (prices and ratings with images) and **Ranking** (query, organic rank, page, ASIN — for rank tracking).

A search that finds nothing, or finds only ads, returns one free row that says so (`type: "error"`, `kind: "no-results"`) instead of an empty table.

### How much does it cost?

**$0.0008 per product** — one row, one charge.

- Sponsored products: skipped and **$0** (turn **Include sponsored products** on to keep them).
- Products outside your price range: dropped and **$0**.
- Searches that fail or find nothing: **$0**.
- No start fee, no proxy charge, any marketplace — even when a marketplace needs a residential address or a web unblocker to open.

| Job | This Actor | Most-used Amazon search Actor |
|---|---|---|
| 10,000 products in one run | **$8** | $10 + start fee |
| 50,000 products across 100 runs | **$40** | $50 + $0.10 in start fees |

Checked on the Apify Store on 13 October 2026 against the Amazon search Actor with the most monthly users ($0.001 per result plus $0.001 per run).

### How to use it in three steps

1. Type keywords into **🔍 Search keywords**, one per line, and pick the **🌍 Amazon marketplace** — or paste Amazon search URLs with your own filters into **🔗 Amazon search URLs**.
2. Choose **Sort**, an optional **price range**, and how many **Products per search** you want.
3. Press **Start**, then download JSON, CSV or Excel — or call the run from the API, n8n, Make, Zapier or an AI agent.

### ⬇️ Input

```json
{
  "keywords": ["yoga mat", "wireless earbuds"],
  "marketplace": "US",
  "maxItemsPerQuery": 100,
  "sortBy": "featured",
  "minPrice": 10,
  "maxPrice": 60,
  "includeSponsored": false
}
```

Marketplaces: amazon.com, .co.uk, .de, .fr, .it, .es, .nl, .com.be, .se, .pl, .com.tr, .ca, .com.mx, .com.br, .com.au, .co.jp, .in, .sg, .ae, .sa, .eg. Prices always come in the site's own currency (EUR on amazon.de, JPY on amazon.co.jp).

### ⬆️ Output

```json
{
  "type": "product",
  "asin": "B0FNX94PPX",
  "title": "Gaiam Thick Yoga Mat, Exercise & Fitness Mat with Easy-Cinch Carrying Strap",
  "url": "https://www.amazon.com/dp/B0FNX94PPX",
  "price": 24.98,
  "listPrice": null,
  "currency": "USD",
  "rating": 4.6,
  "reviewsCount": 46681,
  "boughtPastMonth": 3000,
  "available": true,
  "isSponsored": false,
  "badges": ["Best Seller"],
  "delivery": "FREE delivery Fri, Oct 2",
  "options": "2 sizes",
  "marketplace": "US",
  "query": "yoga mat",
  "page": 1,
  "position": 5,
  "positionOverall": 5,
  "organicRank": 1,
  "lowestOfferPrice": 16.77,
  "offersCount": 2,
  "badgeCategory": "Yoga Mats",
  "imageUrlLarge": "https://m.media-amazon.com/images/I/81mao7QZ1iL.jpg"
}
```

### Tips

- **Rank tracking:** read `organicRank` — the place among regular results across all pages (ads not counted). `position` is the slot on the page with ads counted, `positionOverall` the same across pages.
- **Deep searches:** Amazon stops at 7–20 pages per search. For more products, split the keyword (`yoga mat thick`, `yoga mat travel`) or add a price range per run.
- **Prices outside your range:** Amazon's own price filter matches any variation of a product, so some cards fall outside it. The Actor drops those rows and does not charge for them.
- **Delivery text** reflects the address the request comes from, so read it as a relative signal (fast / slow / paid), not as your customer's exact date.
- **Ad-share studies:** Amazon does not show the same number of ads to every visitor, and sometimes none — compare several runs, not one.
- **Minimum above maximum?** The two are swapped and the status message says so.
- **Search URLs** must be Amazon search or category result pages (`/s?k=…`). A product page or another shop's link gets a free row explaining what to paste instead.

### Integrations and API

Run it from the [Apify API](https://docs.apify.com/api/v2), the JavaScript and Python clients, a schedule, or a webhook, and push results to Google Sheets, Airtable, Slack, a CRM or a database through **n8n**, **Make** or **Zapier**. The [Apify MCP server](https://mcp.apify.com) exposes it to Claude, ChatGPT and other agents as a tool: "find the 50 best-selling yoga mats under $30 on amazon.de".

### FAQ

**Is it legal to scrape Amazon?** The Actor reads public search pages that any visitor sees without an account and collects no personal data. You are responsible for how you use the data and for complying with Amazon's terms and the laws that apply to you.

**Does it need an Amazon account or API key?** No.

**Why does a product have no price?** Amazon shows no price on the card when the item is unavailable or only sold through "See options" — the row keeps `price: null` rather than guessing.

**Can I get full product details (description, all images, seller)?** This Actor covers the search page. For ranked category lists use [Amazon Best Sellers Scraper](https://apify.com/lergassy/amazon-bestsellers-scraper).

### You might also like

- [Amazon Best Sellers Scraper](https://apify.com/lergassy/amazon-bestsellers-scraper) — top 100 of any Amazon category, with rank.
- [AliExpress Products Scraper](https://apify.com/lergassy/aliexpress-products-scraper) — supplier prices and exact orders.
- [Shopee Scraper](https://apify.com/lergassy/shopee-scraper) and [Lazada Scraper](https://apify.com/lergassy/lazada-scraper) — Southeast Asian marketplaces.

# Actor input Schema

## `keywords` (type: `array`):

One search per line — <b>yoga mat</b>, <b>wireless earbuds</b>. Each search returns up to 'Products per search' rows.

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

Which Amazon site to search. Prices come in that site's own currency.

## `maxItemsPerQuery` (type: `integer`):

Amazon shows 16–60 products per page; the Actor walks the pages until it has this many or Amazon runs out (usually 7–20 pages).

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

Applied to keyword searches. Search URLs keep their own sort.

## `minPrice` (type: `number`):

Whole units of the marketplace currency. Leave empty for no floor. If it is above the maximum, the two are swapped.

## `maxPrice` (type: `number`):

Whole units of the marketplace currency. Leave empty for no ceiling.

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

Sponsored placements are skipped by default and never charged. Turn on to keep them — rows carry isSponsored = true and their page position, which is what an ad-share study needs.

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

Paste search or category result URLs (amazon.com/s?k=… with any filters) instead of keywords. The marketplace is taken from the URL.

## `proxyConfiguration` (type: `object`):

Off by default and included in the price. amazon.com answers a direct request; other marketplaces start on a residential address in their own country, so prices and delivery are the ones a local shopper sees. A page that comes back as a robot check is retried on other addresses automatically, with a web unblocker as the last step.

## Actor input object example

```json
{
  "keywords": [
    "yoga mat"
  ],
  "marketplace": "US",
  "maxItemsPerQuery": 48,
  "sortBy": "featured",
  "includeSponsored": false,
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per product: ASIN, title, price, list price, rating, ratings count, bought last month, badges, sponsored flag, position.

# 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 = {
    "keywords": [
        "yoga mat"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/amazon-search-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 = {
    "keywords": ["yoga mat"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/amazon-search-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 '{
  "keywords": [
    "yoga mat"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call lergassy/amazon-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/amazon-search-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/64WMfeBfabnHLggYv/builds/6KoVBt0mm7lsRec2f/openapi.json
