# Amazon Search Scraper: Results, Rank, Price & Sales (`jaaylee/amazon-search-scraper`) Actor

Amazon search scraper for any keyword or search URL. Get search rank, ASIN, price, list price, rating, reviews, bought in past month, Best Seller and Amazon's Choice badges and delivery dates for any US ZIP (no extra fee). $1 per 1,000 results. Export CSV/JSON or use the API.

- **URL**: https://apify.com/jaaylee/amazon-search-scraper.md
- **Developed by:** [ASide Data](https://apify.com/jaaylee) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 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** extracts **Amazon search results** for any keyword or amazon.com search URL. For every result
you get the **search rank (position)**, ASIN, title, price, list price, rating, number of ratings, the **"bought in past
month"** sales signal, **Best Seller / Amazon's Choice badges**, coupon and **delivery dates for a US ZIP code** —
included at no extra cost.

Use it for **Amazon keyword rank tracking**, **product research**, **competitor monitoring**, **price comparison** and
**market sizing**. Run it in Apify Console, on a schedule, or from Python, JavaScript, Make, Zapier, n8n or an AI agent (MCP).

#### Why this Amazon search scraper

- 📍 **ZIP-accurate results, no add-on fee.** Set a US ZIP code and get the results, prices and delivery dates a shopper
  there sees.
- 🏆 **Rank you can trust.** `position` is the exact rank on Amazon ("17-32 of over 20,000 results" → 17…32), across pages.
- 📈 **Sales signals:** "bought in past month" as text and as a number (`10K+` → `10000`), Best Seller badge with its
  category, Amazon's Choice / Overall Pick.
- 💸 **$1.00 per 1,000 results.** Results without a price are free. Blocked pages are free and retried automatically.
- ⚡ **Fast and light:** plain HTTP, no browser. 16–48 results per page, up to 20 pages per search.

### What Amazon search data can you extract?

| Group | Fields |
|---|---|
| Search | `searchTerm`, `page`, `position`, `organicPositionOnPage`, `sponsored`, `searchUrl` |
| Product | `asin`, `url`, `title`, `image` |
| Price | `price`, `priceText`, `currency`, `listPrice`, `coupon`, `otherOffers` |
| Reputation & sales | `rating`, `ratingsCount`, `boughtPastMonth`, `boughtPastMonthMin` |
| Badges | `badge` (Best Seller, Amazon's Choice, Overall Pick, deals), `badgeCategory`, `badgeType` |
| Delivery | `deliveryDate`, `primeDeliveryDate`, `fastestDelivery`, `deliveryMessage`, `deliveryLocation` |
| Run | `complete`, `scrapedAt` |

### How to scrape Amazon search results

1. Click **Try for free** and open the Actor input.
2. Enter one or more **Search keywords or URLs** — e.g. `wireless earbuds`, or paste an amazon.com search URL with your
   filters (department, price range, brand…).
3. Choose **Pages per search** (1–20) and, optionally, **Sort by** (price, reviews, newest, best sellers).
4. Optional: enter a **Delivery ZIP code** (e.g. `10001`) for ZIP-accurate prices and delivery dates.
5. Click **Start** and download the results as JSON, CSV or Excel, or read them via the API.

#### Input example

```json
{
  "searchTerms": ["wireless earbuds", "https://www.amazon.com/s?k=yoga+mat&rh=p_72%3A1248915011"],
  "maxPagesPerSearch": 3,
  "sort": "relevance",
  "zipCode": "10001"
}
```

#### Output example

```json
{
  "asin": "B0FQFB8FMG",
  "url": "https://www.amazon.com/dp/B0FQFB8FMG",
  "title": "Apple AirPods Pro 3 Wireless Earbuds with Active Noise Cancellation | Live Translation, Heart Rate Sensing, Hearing Aid Feature, Bluetooth Headphones, Spatial Audio, USB-C Charging",
  "price": 199.0,
  "priceText": "$199.00",
  "currency": "USD",
  "listPrice": 249.0,
  "rating": 4.4,
  "ratingsCount": 16280,
  "boughtPastMonth": "10K+ bought in past month",
  "boughtPastMonthMin": 10000,
  "badge": "Best Seller",
  "badgeCategory": "Earbud & In-Ear Headphones",
  "badgeType": null,
  "coupon": null,
  "deliveryMessage": "Join Prime to get FREE delivery Today 1 PM - 6 PM Or Non-members get FREE delivery Fri, Oct 16",
  "deliveryDate": "Fri, Oct 16",
  "primeDeliveryDate": "Today 1 PM - 6 PM",
  "fastestDelivery": null,
  "deliveryLocation": "New York 10001",
  "otherOffers": "More Buying Choices $183.44 (7+ used & new offers)",
  "sponsored": false,
  "image": "https://m.media-amazon.com/images/I/61solmQSSlL._AC_UY218_.jpg",
  "searchTerm": "wireless earbuds",
  "page": 1,
  "position": 4,
  "organicPositionOnPage": 4,
  "complete": true,
  "scrapedAt": "2026-10-11T09:00:00+00:00",
  "searchUrl": "https://www.amazon.com/s?k=wireless+earbuds"
}
```

### How much does it cost to scrape Amazon search results?

**$1.00 per 1,000 results** on the Free plan, with the delivery ZIP code included. Lower prices apply on higher Apify
plans (see the pricing panel). Results without a price (for example music or unavailable items) are saved but not
charged, and blocked pages are free. Set **Max results in total** or a maximum total charge to cap any run.

| You scrape | You pay (Free plan) |
|---|---|
| 1 keyword × 1 page (~16–48 results) | ~$0.02–$0.05 |
| 10 keywords × 5 pages | ~$0.80–$2.40 |
| 10,000 results | $10.00 |

### Amazon search results by ZIP code

Amazon shows different results, prices and delivery promises depending on the delivery address. With a US ZIP code the
Actor reads every page exactly as a shopper there sees it, and `deliveryLocation` confirms the ZIP that was applied. A
page where the ZIP could not be applied is retried and never charged.

### Use cases

- **Amazon keyword rank tracking** — schedule a daily run and follow where your ASINs rank for each keyword.
- **Product research for FBA sellers** — sort by best sellers and compare "bought in past month", price and ratings.
- **Competitor monitoring** — see new entrants (sort by newest), price moves and badges in your niche.
- **Price comparison** — sort by price and export the cheapest offers for any query.
- **Find ASINs for a keyword** — then pass them to [Amazon ASIN Scraper](https://apify.com/jaaylee/amazon-asin-product-details)
  for full product details (BSR, specs, variants, stock).

### Use the Amazon search API

Python ([apify-client](https://docs.apify.com/api/client/python)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("jaaylee/amazon-search-scraper").call(
    run_input={"searchTerms": ["wireless earbuds"], "maxPagesPerSearch": 2, "zipCode": "10001"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["position"], item["asin"], item["price"], item["boughtPastMonth"])
```

Track the rank of your own ASINs for a keyword:

```python
MY_ASINS = {"B0FQFB8FMG", "B0HCT3FTVW"}
ranks = {i["asin"]: i["position"] for i in client.dataset(run["defaultDatasetId"]).iterate_items()
         if i["asin"] in MY_ASINS}
print(ranks)   # {'B0FQFB8FMG': 4, ...}
```

JavaScript / Node.js ([apify-client](https://docs.apify.com/api/client/js)):

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('jaaylee/amazon-search-scraper').call({
    searchTerms: ['wireless earbuds'],
    maxPagesPerSearch: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((i) => console.log(i.position, i.asin, i.price));
```

cURL (synchronous run that returns the results):

```bash
curl -X POST "https://api.apify.com/v2/acts/jaaylee~amazon-search-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["wireless earbuds"], "maxPagesPerSearch": 1}'
```

### Integrations: Google Sheets, Make, Zapier, n8n, webhooks and schedules

- **Schedules:** run daily or hourly from Apify Console → Schedules for rank and price tracking.
- **Google Sheets:** export each run to a sheet with the Apify Google Sheets integration.
- **Make, Zapier, n8n:** start runs and read results with the official Apify apps and nodes.
- **Webhooks:** get notified when a run finishes and process the results in your system.

### Use with AI agents (MCP)

This Actor works with the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). An AI agent can find it
with a query like "Amazon search", read its input schema and call it to fetch Amazon search results for a keyword.

### More Amazon scrapers by the same developer

- [Amazon ASIN Scraper](https://apify.com/jaaylee/amazon-asin-product-details) — full product details by ASIN: price,
  BSR, stock, delivery date by ZIP, variants, specs, images.
- [Amazon Best Sellers Scraper](https://apify.com/jaaylee/amazon-bestsellers-scraper) — top 100 Best Sellers and New
  Releases for any category and subcategory.

### Tips for accurate Amazon search data

- **Use the same ZIP code for every run** when you track ranks or prices over time. Results and delivery promises
  change with the delivery address, so a fixed ZIP keeps your history comparable.
- **Keep the number of pages realistic.** Most buyers never go past page 2 or 3, so `maxPagesPerSearch` 1–3 is enough
  for rank tracking; use 10–20 pages for market sizing or to collect many ASINs for a niche.
- **Use search URLs for filters.** Apply department, brand, price or Prime filters on amazon.com and paste the URL —
  the filters are kept, and only the page number is set by the Actor.
- **Combine `position` and `boughtPastMonthMin`.** A product that ranks low but already sells "1K+ per month" is a
  strong competitor; a top-ranked product with few sales may be advertising-driven.
- **Cap the cost.** Set **Max results in total** or a maximum charge per run; the Actor stops cleanly when it is reached
  and you only pay for results saved before that.
- **Monitor with failure alerts.** For scheduled monitoring tasks, turn on **Fail run on low data quality** so that a
  run with mostly blocked pages shows up as failed and triggers your Apify notifications.

### Limitations

- **Amazon.com only** for now. Other marketplaces are on the roadmap.
- **Sponsored ads** are mostly loaded by JavaScript on Amazon and are usually not part of the HTML results; when they
  are, they are marked `sponsored: true` (turn off **Include sponsored results** to drop them).
- Amazon shows at most 20 pages per search. Use more specific keywords or filters (search URL) to reach more products.
- CAPTCHAs are never solved; blocked pages are retried on fresh sessions and, if still blocked, skipped for free.

### FAQ

#### Is it legal to scrape Amazon search results?

This Actor only reads publicly visible search pages without logging in and does not collect personal data. You are
responsible for using the data in line with applicable laws and Amazon's terms. If in doubt, consult a lawyer.

#### How do I track my keyword rank every day?

Save your keywords as a task in Apify Console and add a daily schedule. Each run returns the current `position` of every
result, so you can chart the rank of your ASINs over time.

#### How many results do I get per page?

Amazon shows 16 to 48 results per page depending on the query (list or grid layout), and up to 20 pages per search.

#### Can I use Amazon filters like department, brand or price range?

Yes. Apply the filters on amazon.com and paste the search URL into **Search keywords or URLs**.

#### Why do some results have no price?

Some items (digital music, unavailable products, "see options") have no price in the results. They are saved for
completeness but not charged.

#### Found a bug or need a field?

Open an issue on the Issues tab with the keyword and what you expected.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on Amazon.com (e.g. wireless earbuds), or full amazon.com search result URLs with your filters. One per line. Duplicates are removed.

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

How many result pages to scrape for each search (Amazon shows 16-48 results per page, up to 20 pages).

## `sort` (type: `string`):

Result order, as in Amazon's 'Sort by' menu. Ignored for search URLs that already contain a sort.

## `zipCode` (type: `string`):

Optional. Results, prices and delivery dates are shown as a shopper in this US ZIP code sees them. Included at no extra cost.

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

Optional. Stop after this many results across all searches (useful to cap cost).

## `maxItemsPerSearch` (type: `integer`):

Optional. Stop each search after this many results.

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

Keep results marked as Sponsored (when Amazon shows them in the page). Turn off to get organic results only.

## `maxConcurrency` (type: `integer`):

How many result pages are fetched in parallel.

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

Primary proxy. The default Apify datacenter proxy works for most search pages.

## `residentialFallback` (type: `boolean`):

If a page stays blocked after 3 attempts on the primary proxy, retry it up to 2 more times through US residential proxies. Blocked pages are never charged either way.

## `failOnLowQuality` (type: `boolean`):

For monitoring tasks: mark the run as failed when fewer than 80% of pages succeed or key fields are missing.

## Actor input object example

```json
{
  "searchTerms": [
    "wireless earbuds"
  ],
  "maxPagesPerSearch": 1,
  "sort": "relevance",
  "zipCode": "10001",
  "includeSponsored": true,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": true,
  "failOnLowQuality": false
}
```

# Actor output Schema

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

No description

## `files` (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 = {
    "searchTerms": [
        "wireless earbuds"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jaaylee/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 = {
    "searchTerms": ["wireless earbuds"],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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