# Amazon Scraper(Cheap) (`data_api/amazon-scraper-cheap`) Actor

Amazon Product Scraper that extracts product titles, prices, ratings, review counts, and Prime eligibility from Amazon search results, so you can monitor markets and build product catalogs without writing any code.

- **URL**: https://apify.com/data\_api/amazon-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (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 $2.99 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Amazon Search Results Scraper

![Amazon Search Results Scraper](cover.jpg)

Reading prices and ratings off Amazon by hand gets old fast, and the page changes every time you reload it. This scraper does the reading for you. Give it an Amazon search URL or a plain keyword and it walks the result pages, pulling each product's name, price, star rating, review count, and Prime status into a tidy row you can drop straight into a spreadsheet. It's quick, cheap, code-free, and you only pay for what you scrape.

### What you get

Every product on the search results turns into one row with a steady shape, so your columns line up when you load the data into a sheet or database. Each row carries:

- **Product** — `productAsin`, `itemName`, `itemUrl`, `imageLink`
- **Pricing** — `currentPrice`, `currencySymbol`, `listPrice`
- **Reputation** — `starRating`, `reviewsTotal`, `primeEligible`, `sponsoredListing`
- **Context** — `rankPosition`, `searchTerm`, `searchUrl`, `pageNumber`, `collectedAt`

### Quick start

1. Hit **Try for free** and open the input form.
2. Paste one or more Amazon search URLs into **Amazon search URLs**, or type plain phrases into **Search terms** and let the scraper build the URLs.
3. Set **Pages per search** and **Results limit** to control how much you pull.
4. Press **Start**, then export the rows as JSON, CSV, Excel, or XML when the run finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Price monitoring** — track what competing products sell for and catch discounts as they land
- **Catalog building** — gather titles, images, and ASINs to seed a product database
- **Market research** — measure demand by review counts and ratings across a category
- **Seller intelligence** — see who ranks on page one for the terms you care about
- **Ad vs. organic analysis** — split sponsored cards from organic results to study placement

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchUrls` | array of strings | One of `searchUrls` or `searchTerms` | Full Amazon search result URLs to scrape, paginated automatically. |
| `searchTerms` | array of strings | One of `searchUrls` or `searchTerms` | Plain search phrases; the scraper builds an Amazon search URL from each. |
| `pageLimit` | integer | No | Result pages to walk per search (≈16 products each). Default `3`. |
| `resultsLimit` | integer | No | Total products to return across all searches. Default `50`. |
| `timeoutSeconds` | integer | No | Seconds to wait per request before timing out. Default `45`. |

You must supply at least one value in `searchUrls` or `searchTerms`.

#### Example input

```json
{
    "searchUrls": ["https://www.amazon.com/s?k=running+shoes"],
    "searchTerms": ["bluetooth speaker", "yoga mat"],
    "pageLimit": 3,
    "resultsLimit": 50,
    "timeoutSeconds": 45
}
````

### Output

Each product on the search results becomes one row. Fields Amazon does not show on a given card come back as `null`, so the dataset stays rectangular.

#### Example output

```json
{
    "productAsin": "B09XS7JWHH",
    "itemName": "Sony WH-1000XM5 Wireless Noise Cancelling Headphones",
    "itemUrl": "https://www.amazon.com/Sony-WH-1000XM5-Headphones-Hands-Free-Bluetooth/dp/B09XS7JWHH/",
    "imageLink": "https://m.media-amazon.com/images/I/61vF4LdktpL._AC_UY218_.jpg",
    "currentPrice": 328.0,
    "currencySymbol": "$",
    "listPrice": 399.99,
    "starRating": 4.6,
    "reviewsTotal": 18432,
    "primeEligible": true,
    "sponsoredListing": false,
    "rankPosition": 2,
    "searchTerm": "noise cancelling headphones",
    "searchUrl": "https://www.amazon.com/s?k=noise+cancelling+headphones",
    "pageNumber": 1,
    "collectedAt": "2026-06-29T12:00:00.000000+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `productAsin` | string | Amazon Standard Identification Number |
| `itemName` | string | Full product name shown on the card |
| `itemUrl` | string | Link to the product detail page |
| `imageLink` | string | URL of the main product thumbnail |
| `currentPrice` | number | Price the product is selling for now |
| `currencySymbol` | string | Currency mark on the price, such as `$` |
| `listPrice` | number | Original strikethrough price when a discount shows |
| `starRating` | number | Average customer score out of five |
| `reviewsTotal` | integer | Number of customer ratings collected |
| `primeEligible` | boolean | True when the listing qualifies for Prime delivery |
| `sponsoredListing` | boolean | True when the card is a paid advertisement |
| `rankPosition` | integer | Where the product sat on the page, from one |
| `searchTerm` | string | Keyword or query that surfaced the product |
| `searchUrl` | string | Amazon search page the product came from |
| `pageNumber` | integer | Result page the product appeared on |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |

### Tips for best results

- **Start small.** Pull 20–50 products first so URL and pagination quirks show up before a big run.
- **Cap with `resultsLimit`.** Set a low number while you confirm the output fits your pipeline, then raise it for the full batch.
- **Mind the page math.** Each page holds about 16 products, so `pageLimit` times that is your rough ceiling per search.
- **Filter the ads.** Sponsored cards arrive flagged with `sponsoredListing: true`, so you can keep or drop them in one step.
- **Raise `timeoutSeconds`** to around 60 if pages load slowly and you see timeout errors.
- **Missing prices are normal.** Some products show "See price in cart" or hide the price until the detail page, so `currentPrice` can be `null`.

### How can I use Amazon product data?

**How can I use the Amazon Search Results Scraper to track competitor prices?**
Drop in the search URLs for the products you watch and run it on a schedule. Each row carries `currentPrice`, `listPrice`, and `collectedAt`, so you can chart price moves over time and flag the moment a rival cuts theirs.

**How can I scrape Amazon search rankings for a keyword?**
Pass a keyword in `searchTerms` or paste the search URL. The scraper records `rankPosition` and `pageNumber` for every product, so you can see who owns page one and how positions shift between runs.

**How can I export Amazon product data to a spreadsheet?**
Run the scraper, then download the dataset as CSV or Excel. Every product is one row with prices, ratings, review counts, and image links already split into columns, ready for a pivot table or a quick filter.

**How can I separate sponsored Amazon listings from organic results?**
Each card comes with a `sponsoredListing` flag. Filter on it to study how many ad slots sit above the organic results for your terms, or strip the ads out entirely before you analyze rankings.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

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

Paste full Amazon search result pages to scrape, for example https://www.amazon.com/s?k=headphones. Each URL is paginated automatically.

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

Plain search phrases. The scraper turns each one into an Amazon search URL for you, so you can skip the copy-paste.

## `pageLimit` (type: `integer`):

How many result pages to walk through for each URL or term. A page holds roughly 16 products.

## `resultsLimit` (type: `integer`):

Total cap on products returned across every search. Keep it low for a quick test run.

## `timeoutSeconds` (type: `integer`):

Seconds to wait on each request before it times out. Raise it if pages load slowly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.amazon.com/s?k=running+shoes",
    "https://www.amazon.com/s?k=coffee+grinder"
  ],
  "searchTerms": [
    "bluetooth speaker",
    "yoga mat",
    "desk lamp"
  ],
  "pageLimit": 3,
  "resultsLimit": 50,
  "timeoutSeconds": 45
}
```

# 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 = {
    "searchUrls": [
        "https://www.amazon.com/s?k=noise+cancelling+headphones"
    ],
    "searchTerms": [
        "bluetooth speaker"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/amazon-scraper-cheap").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 = {
    "searchUrls": ["https://www.amazon.com/s?k=noise+cancelling+headphones"],
    "searchTerms": ["bluetooth speaker"],
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/amazon-scraper-cheap").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.amazon.com/s?k=noise+cancelling+headphones"
  ],
  "searchTerms": [
    "bluetooth speaker"
  ]
}' |
apify call data_api/amazon-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/amazon-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Amazon Scraper(Cheap)",
        "description": "Amazon Product Scraper that extracts product titles, prices, ratings, review counts, and Prime eligibility from Amazon search results, so you can monitor markets and build product catalogs without writing any code.",
        "version": "0.0",
        "x-build-id": "aVr1mtPJ0ddDDasjL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~amazon-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-amazon-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/data_api~amazon-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-amazon-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/data_api~amazon-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-amazon-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchUrls": {
                        "title": "Amazon search URLs",
                        "type": "array",
                        "description": "Paste full Amazon search result pages to scrape, for example https://www.amazon.com/s?k=headphones. Each URL is paginated automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Plain search phrases. The scraper turns each one into an Amazon search URL for you, so you can skip the copy-paste.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "pageLimit": {
                        "title": "Pages per search",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many result pages to walk through for each URL or term. A page holds roughly 16 products.",
                        "default": 3
                    },
                    "resultsLimit": {
                        "title": "Results limit",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Total cap on products returned across every search. Keep it low for a quick test run.",
                        "default": 50
                    },
                    "timeoutSeconds": {
                        "title": "Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Seconds to wait on each request before it times out. Raise it if pages load slowly.",
                        "default": 45
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
