# Amazon Search Scraper (Results, Prices, Ratings, Ads) (`webdatatools/amazon-search-scraper`) Actor

Scrape Amazon search results by keyword or search URL: position, ASIN, title, price, list price, rating, rating count, badge, sponsored flag and Prime, with pagination. Works for 19 Amazon marketplaces. No login.

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

## Pricing

from $2.40 / 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.
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

### What is Amazon Search Scraper?

Amazon Search Scraper pulls Amazon search results for a keyword or a pasted Amazon search URL. Each result is one row: position, ASIN, title, price, list price, rating, rating count, badge, sponsored flag, image and product link. It follows result pages until your limit, keeps the filters of a pasted search URL, and works on 19 Amazon marketplaces (amazon.com, .co.uk, .de, .fr, .it, .es, .ca, .com.au, .co.jp, .in, .com.mx, .com.br, .nl, .se, .pl, .com.tr, .sg, .ae, .sa). It needs no login and no proxy by default.

### What data does Amazon Search Scraper extract?

| Field | Type | Meaning |
|---|---|---|
| position | number | Position across the whole run for this search |
| asin | string | Amazon ASIN |
| title | string | Title shown on the result card |
| url | string | Product page, `https://<domain>/dp/<ASIN>` |
| price | number | Current price shown on the card (null when not shown) |
| listPrice | number | Struck-through list price (null when none) |
| currency | string | ISO code for the marketplace |
| rating | number | Stars, 0 to 5 |
| ratingCount | number | Review count, with K/M suffixes expanded (`90.2K` becomes `90200`) |
| badge | string | Card badge such as "Overall Pick", "Limited time deal" |
| isSponsored | boolean | Sponsored label present on the card |
| isPrime | boolean | Prime badge present on the card (see limitations) |
| imageUrl | string | Result image |
| marketplace | string | Marketplace code, e.g. `com` |
| page | number | Results page number |
| searchKeyword / searchUrl | string | The keyword or URL that produced the row |

### How to use Amazon Search Scraper

1. Open the Actor and enter one or more keywords, one per line or separated by `;`.
2. Or paste Amazon search URLs (with filters) into "Amazon search URLs".
3. Choose the marketplace and the maximum results per search.
4. Run it. Download the dataset as JSON, CSV or Excel, or call it through the API.

### Example input

```json
{
    "keywords": ["usb c cable"],
    "maxResultsPerSearch": 50,
    "marketplace": "com"
}
```

### Example output

Real run, 22 Oct 2026, keyword "usb c cable", amazon.com, 50 results (first two rows shown):

```json
[
  {
    "position": 1,
    "asin": "B088NRLMPV",
    "title": "Anker USB C to USB C Cable, 60W Fast Charging Cable (2-Pack, 6 ft, Black)",
    "url": "https://www.amazon.com/dp/B088NRLMPV",
    "price": 9.99,
    "listPrice": null,
    "currency": "USD",
    "rating": 4.7,
    "ratingCount": 90200,
    "badge": "Overall Pick",
    "isSponsored": false,
    "isPrime": false,
    "marketplace": "com",
    "page": 1,
    "searchKeyword": "usb c cable"
  },
  {
    "position": 2,
    "asin": "B0CG1LGWR6",
    "title": "LISEN USB C to USB C Cable, 240W Fast Charging Type C Charger Cord (6.6FT)",
    "url": "https://www.amazon.com/dp/B0CG1LGWR6",
    "price": 8.97,
    "listPrice": 9.99,
    "currency": "USD",
    "rating": 4.5,
    "ratingCount": 12500,
    "badge": "Limited time deal",
    "isSponsored": false,
    "isPrime": false,
    "marketplace": "com",
    "page": 1,
    "searchKeyword": "usb c cable"
  }
]
```

### Input parameters

- **Keywords**: what to search for, one per line or `;`-separated.
- **Amazon search URLs**: pasted `amazon.<domain>/s?k=…` URLs; their filters are kept.
- **Amazon marketplace**: used for keywords and for URLs without a domain.
- **Max results per search**: default 50, up to 1,000. Amazon shows about 16 to 24 results per page.
- **Skip sponsored results**: leave out ads.
- **Proxy mode**: `never` (default) uses direct requests only. `auto` adds a Residential proxy only when Amazon blocks the direct request. `always` uses Residential from the start. Residential traffic is billed by Apify on top of the per-result price.
- **Save debug HTML**: stores the first results page for troubleshooting.

### Pricing

Pay per result: **$4.00 per 1,000 results** (FREE tier list price). Volume tiers reduce the price for higher Apify plans. Start fee: $0.00005 per run.

Measured platform cost (run 22 Oct 2026): 50 results cost $0.00128 in compute. A 1,000-result run costs about $0.03 in platform compute, so the price leaves a wide margin. Runs that use the Residential proxy add proxy traffic cost, which is why the default is direct only.

### Amazon Search Scraper vs. alternatives

The leading Amazon product scraper on the Apify Store (junglee, 30-day users 3,554) lists $0.005 per result on its FREE tier. This Actor lists $0.004 per result and reads only public search pages. Compare on your own sample before you choose.

### Using Amazon Search Scraper with AI agents

The Actor is available through the Apify MCP server and the Apify API. Give your agent the keyword and marketplace; it receives the result rows as JSON.

### FAQ

**Does it need an Amazon account?** No. It reads the public search pages.

**Why are some results missing a price?** Amazon does not always show the price on the card for every item and region. Missing values are returned as `null`, never estimated.

**Does it show sponsored results?** Yes, flagged with `isSponsored`. Set "Skip sponsored results" to leave them out.

**What about blocks and captchas?** Amazon sometimes answers direct requests with a robot check or HTTP 503. The Actor retries with waits and, when proxy mode allows it, with a Residential proxy. Items that still fail are listed in the ERRORS record and are not charged.

**Limitations.** The `isPrime` flag depends on the Prime badge markup on the card. In the verified test run (50 results, amazon.com) no Prime badge was found, so treat `isPrime` as unverified. Results are the first pages Amazon returns; Amazon limits how many pages a search shows.

**Which marketplaces are tested?** amazon.com was tested in the cloud. The other marketplaces use the same page structure but were not yet run in the cloud. Their sample results are not published here.

### Related Actors

- Amazon Product Scraper (ASIN or URL: price, BSR, stock, seller, images)
- Amazon Best Sellers Scraper (category rank lists)

### Support

Open an issue or leave a review on the Actor page. Include the search keyword and marketplace so a bad result can be reproduced.

# Actor input Schema

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

What to search on Amazon, one per line or `;`-separated (e.g. `usb c cable; wireless mouse`).

## `searchUrls` (type: `array`):

Optional: search URLs copied from Amazon (`https://www.amazon.com/s?k=…`) with your filters. Filters are kept.

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

Used for keywords. A search URL keeps its own domain.

## `maxResultsPerSearch` (type: `integer`):

For each keyword or URL. Amazon shows about 16 to 24 results per page; the run follows pages until this number.

## `skipSponsored` (type: `boolean`):

Leave out ads (they are marked `isSponsored` otherwise).

## `saveDebugHtml` (type: `boolean`):

Store the first fetched results page in the key-value store (troubleshooting only).

## `proxyMode` (type: `string`):

never (default): direct only, so every charged row is a direct result. auto: direct first, Residential proxy only if Amazon blocks (costs more per page). always: Residential from the start.

## Actor input object example

```json
{
  "keywords": [
    "usb c cable"
  ],
  "marketplace": "com",
  "maxResultsPerSearch": 50,
  "skipSponsored": false,
  "saveDebugHtml": false,
  "proxyMode": "never"
}
```

# Actor output Schema

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

All search results from this run.

# 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": [
        "usb c cable"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdatatools/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": ["usb c cable"] }

# Run the Actor and wait for it to finish
run = client.actor("webdatatools/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": [
    "usb c cable"
  ]
}' |
apify call webdatatools/amazon-search-scraper --silent --output-dataset

```

## MCP server setup

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