# Amazon Search Scraper (`mina_safwat/amazon-search-scraper`) Actor

Scrapes Amazon search results — position, title, price, rating, reviews, and sponsored flag — across 24 stores

- **URL**: https://apify.com/mina\_safwat/amazon-search-scraper.md
- **Developed by:** [Mina](https://apify.com/mina_safwat) (community)
- **Categories:** E-commerce, Developer tools, 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 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Scrape **Amazon search results** — position, title, price, rating, review count, and whether each listing is a paid placement — across 24 Amazon stores.

### What does Amazon Search Scraper do?

Search on Amazon with whatever filters you like, copy the address bar, and paste it in. The Actor returns every result as structured data, in Amazon's own ranking order, with sponsored placements flagged separately from organic ones.

**The store and the filters come from the link.** Brand, price band, rating, department, Prime-only — whatever you set on Amazon is already in the URL and is honoured exactly. You can mix `amazon.eg`, `amazon.com` and `amazon.co.uk` links in a single run.

### Why use Amazon Search Scraper?

- **Rank tracking** — see where your product sits for a keyword, and who outranks it.
- **Ad intelligence** — measure how much of page one is sponsored, and by whom.
- **Competitor and price research** — capture a whole category with prices and ratings.
- **Market entry** — compare what a search returns in different countries.
- **Product sourcing** — find the best-rated products in a niche at a given price.

Running it on Apify adds scheduling, an API, integrations (Sheets, Slack, Zapier, S3), and run monitoring.

### How to use Amazon Search Scraper

1. Search on Amazon and set any filters you want.
2. Copy the address bar and paste it into **Amazon search URLs**.
3. Set **Max results per search** and click **Start**.

If you would rather not paste links, put plain terms in **Or just keywords** and pick a store.

Results appear in the Output tab as they are scraped, and download as JSON, CSV, Excel, or XML.

### Input

| Field | Description |
| --- | --- |
| `search_urls` | Amazon search links, one per line. Filters and store are read from each link. |
| `keywords` | Plain search terms, if you prefer not to paste links. |
| `keyword_store` | Which store the plain keywords search. Ignored for links. |
| `max_results_per_search` | Cap per search. |
| `exclude_sponsored` | Drop paid placements and keep organic results only. |
| `proxy_country` | Leave empty and each search runs from its own store's country. |

### Output

```json
{
  "position": 1,
  "asin": "B09B8V1LZ3",
  "title": "Echo Dot (5th Gen) Smart Speaker",
  "url": "https://www.amazon.com/dp/B09B8V1LZ3",
  "price": 49.99,
  "list_price": 79.99,
  "currency": "$",
  "rating": 4.7,
  "review_count": 12345,
  "is_sponsored": false,
  "is_prime": true,
  "badge": "Best Seller",
  "domain": "amazon.com",
  "country": "US"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field | Description |
| --- | --- |
| `position` | Where the result appeared, counting across pages in Amazon's own order. |
| `asin`, `title`, `url`, `image` | The product and its page. |
| `price`, `list_price`, `currency` | Price and any struck-through price. |
| `rating`, `review_count` | Star rating and how many ratings it is based on. |
| `is_sponsored` | Whether this was a paid placement rather than an organic result. |
| `is_prime`, `badge` | Prime eligibility and any badge such as Best Seller or Amazon's Choice. |
| `domain`, `country` | Which store the result came from. |
| `search_url` | The search that produced this row. |

### One thing to know about Amazon search

**Amazon protects its search pages much more heavily than its product pages.** It refuses a large share of automated requests, so the Actor retries each page from different addresses until one comes back with results. That makes runs slower than a product scraper and means very large jobs will not always fill their quota. Positions are still accurate for the results that do come back, because they are counted in Amazon's own order.

If you need reliable data on specific products rather than rankings, the companion **Amazon Product Scraper** works from product links and is far more dependable.

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

More than most scrapers, because of the retries above. Each successful page yields roughly 60 results. Keep **Max results per search** to what you actually need.

### Tips

- **Let Amazon build the URL.** Set brand, price and rating filters on the site, then copy the link — far easier than trying to construct the parameters yourself.
- **`exclude_sponsored` for honest rank tracking**, since ads otherwise shift every position.
- **Compare countries** by pasting the same search from several stores.
- **Page one is what matters** for rank tracking; set the cap around 60 and runs stay quick.

### FAQ and support

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

**Why did a search return fewer results than I asked for?** Amazon throttles search hard, and also stops paginating after a few pages for most queries. The log says which pages were refused rather than quietly returning less.

**Why are sponsored results included?** Because they are part of what Amazon actually shows, and their share of the page is often the interesting number. Turn on `exclude_sponsored` to drop them.

**Is scraping Amazon legal?** This Actor collects publicly visible search results and no personal information. Amazon's terms prohibit automated collection and they enforce this actively. You are responsible for your own use. Consult a lawyer before relying on this commercially.

Found a bug or want a field that is missing? Open an issue on the Actor's Issues tab.

### SEO Keywords

amazon search scraper, scrape amazon search results, amazon keyword ranking, amazon serp scraper, amazon product research, amazon sponsored ads scraper, amazon bestseller tracking, amazon marketplace research, amazon listing position tracker, ecommerce keyword research

# Actor input Schema

## `search_urls` (type: `array`):

Amazon search links, one per line. Search on Amazon with whatever filters you want — brand, price, rating, department — then copy the address bar. Every filter in the link is honoured, and the store is taken from the link too, so you can mix amazon.eg, amazon.com and others in one run.

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

Plain search terms, if you would rather not paste links. These use the store chosen below and apply no filters.

## `keyword_store` (type: `string`):

Which store the plain keywords above are searched on. Ignored for search links, which carry their own store.

## `max_results_per_search` (type: `integer`):

Stops after this many results for each search. Amazon shows roughly 60 per page and stops paging after a few pages.

## `exclude_sponsored` (type: `boolean`):

Drop paid placements and keep only organic results. Useful when measuring where a product really ranks.

## `proxy_country` (type: `string`):

Comma-separated 2-letter codes. Leave empty and each search runs from an address in its own store’s country.

## Actor input object example

```json
{
  "search_urls": [
    "https://www.amazon.eg/s?k=laptop",
    "https://www.amazon.com/s?k=wireless+earbuds"
  ],
  "keywords": [],
  "keyword_store": "amazon.com",
  "max_results_per_search": 100,
  "exclude_sponsored": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "search_urls": [
        "https://www.amazon.eg/s?k=laptop",
        "https://www.amazon.com/s?k=wireless+earbuds"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/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 = { "search_urls": [
        "https://www.amazon.eg/s?k=laptop",
        "https://www.amazon.com/s?k=wireless+earbuds",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mina_safwat/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 '{
  "search_urls": [
    "https://www.amazon.eg/s?k=laptop",
    "https://www.amazon.com/s?k=wireless+earbuds"
  ]
}' |
apify call mina_safwat/amazon-search-scraper --silent --output-dataset

```

## MCP server setup

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