# Amazon Product Scraper (`herus13/amazon-scraper`) Actor

Search Amazon by keyword across 7 marketplaces — US, UK, Germany, Singapore, Australia, India and Japan — and extract the results. Rows carry title, price, price_original, currency, rating, review_count, is_prime and product_url. Export JSON, CSV or Excel.

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

## Pricing

from $3.50 / 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 Product Scraper extracts products from [Amazon](https://www.amazon.com) by keyword search across seven marketplaces — US, UK, Germany, Singapore, Australia, India and Japan. Every row carries title, price, original price, currency, rating, review count, the Prime badge and the product URL.

### What you get

One dataset row per product. Export as JSON, CSV or Excel.

```json
{
  "title": "Logitech M185 Wireless Mouse, 2.4GHz with USB Mini Receiver",
  "price": 13.95,
  "price_original": 17.99,
  "currency": "USD",
  "rating": 4.5,
  "review_count": 43,
  "is_prime": false,
  "product_url": "https://www.amazon.com/dp/B004YAVF8I",
  "region": "com",
  "scraped_at": "2026-07-19T15:36:27+00:00",
  "_meta": {"author": "https://apify.com/herus13", "status": "ok", "message": null}
}
```

`_meta` is run metadata, not scraped data. A target that fails appears as a row with only `_meta` (status `failed`, the reason in `message`); those rows are never charged.

The ASIN is the last segment of `product_url`, so an affiliate link or a follow-up lookup needs nothing else. Turn on **Add image gallery and category** and each row also carries the full image gallery and the product's category. Field names match the Shopee and Lazada scrapers in this account, so all three merge into one comparison table.

### What it costs

| Event | Free | Bronze | Silver | Gold+ |
|---|---|---|---|---|
| Product (`product-result`) | $0.005 | $0.0045 | $0.004 | $0.0035 |

You pay per product, not per minute: $0.005 for each product returned, and there is no per-run start fee. A hundred products is about $0.50 and a thousand about $5.00, with the residential proxy included in that price. Higher Apify subscription tiers pay the lower per-product rates shown above.

### Input

| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
| `search_terms` | array | no | — | Keywords to search on Amazon, one per entry — for example laptop stand, or espresso machine. Each term is paged through until the run reaches max_results, and every matching product comes back with its price, original price, currency, rating, review count and Prime flag. Give at least one term: leave empty and the run stops with an input error before anything is charged. |
| `region` | string | no | `"com"` | Amazon marketplace to search. It decides which products exist, the language of the listings and the currency of every price. Default com. Supported: com United States, co.uk United Kingdom, de Germany, sg Singapore, com.au Australia, in India, co.jp Japan. One run covers one marketplace, so comparing markets means running the same search terms once per region. |
| `max_results` | integer | no | `48` | Most products a run returns in total, counted across every search term. Default 48, minimum 1, maximum 1000 — an Amazon results page holds about 48 products, so the default is roughly one page per term. Raise it to sweep a category, but a single keyword usually runs out of new products well before 1000, so wider coverage comes from more search terms. |
| `enrich` | boolean | no | `false` | Add the full image gallery and the product category to every result, on top of the fields a search already returns. Default false, which returns the search fields only and is faster. It does not change price: price always comes from the search listing, enriched or not. |
| `proxyUrls` | array | no | — | Leave empty: the run uses the residential proxy this actor ships with, exiting from the marketplace's own country so prices match the region, and included in the price of the run. To route the run through your own provider instead, add one gateway URL per entry, for example http://user:pass@host:port — works with any provider that issues URLs. When set, the run uses these first and switches to the included proxy if they stop working, so a broken proxy never fails the run. |

### How to run it

1. Open the actor on Apify Console.
2. Enter one or more search terms.
3. Pick the marketplace, set **Max results**, then Run. Export JSON, CSV or Excel from the dataset.

```json
{
  "search_terms": ["laptop stand", "monitor arm"],
  "region": "com",
  "max_results": 100,
  "enrich": false
}
```

Minimal input:

```json
{
  "search_terms": ["laptop stand"]
}
```

Available as the MCP tool `herus13--amazon-scraper` on mcp.apify.com and through the Apify API; send the same JSON.

### Why this scraper

- **Comparison-ready across marketplaces** — field names match the Shopee and Lazada scrapers, so an Amazon export stacks into the same price table as the Southeast Asian ones with no remapping.
- **Seven marketplaces, one input** — US, UK, Germany, Singapore, Australia, India and Japan all answer the same JSON, each with its own currency stated in `currency`.
- **The discount, not just the price** — `price` next to `price_original` gives the real markdown on a listing rather than the headline number.
- **Prices that match the market you asked for** — the run exits from the marketplace's own country, so a UK search returns UK prices in GBP rather than whatever a US visitor would see.
- **Nothing to set up** — no account, no cookies, no proxy configuration; a residential proxy is included in the price of the run.

### Use cases

- **Cross-marketplace price comparison** — The same keyword run on Amazon, Shopee and Lazada normalises into one table, because `price`, `price_original` and `currency` line up field for field.
- **Competitive pricing and discount monitoring** — Schedule a keyword set and track `price` against `price_original` over time; `rating` and `review_count` in the same row show how much traction the listing being discounted actually has.
- **Affiliate catalogue building** — Every row carries the product URL, and its last segment is the ASIN, which is what a link generator needs. Seven marketplaces are a `region` change rather than a new integration.
- **Product and market research** — Search a category's head terms and read the price distribution, rating spread and Prime availability across the top results before committing to a niche.
- **Assortment and gap analysis** — Compare what is listed, and at what price, in two marketplaces before deciding where to launch or where to source.

### FAQ

**Which marketplaces are covered?** Seven Amazon sites: US, UK, Germany, Singapore, Australia, India and Japan. One run covers one marketplace; run the same search terms once per region to compare them.

**Where is the ASIN?** It is the final segment of `product_url` — `https://www.amazon.com/dp/B004YAVF8I` is ASIN `B004YAVF8I` — so every row identifies its product without a separate field.

**Can I compare prices with Shopee and Lazada?** Yes. Output field names match those scrapers, so all three feed one comparison dataset without a translation layer.

**How many products can one run return?** Up to 1000 across all search terms, set by `max_results`. An Amazon results page holds about 48 products, which is why the default is 48; wider coverage comes from more search terms rather than a higher cap.

**Is a proxy included?** A residential proxy is included in the price of the run. To use your own, paste gateway URLs into **Your own proxy URLs**.

**What happens if my input is wrong?** The run stops before it scrapes anything, so no results are charged. Its status and log name each field that is wrong and say what to change — fix the input and run again.

**Is scraping Amazon legal?** This actor collects only publicly available product data from public search results — no login and no paywall bypass. You are responsible for complying with Amazon's terms and applicable laws.

### Related actors

Marketplace product data across Asia-Pacific and Southeast Asia:

- [Lazada Scraper](https://apify.com/herus13/lazada-scraper) — one product row per Lazada search result, in six Southeast Asian countries.
- [Shopee Official Shop Scraper](https://apify.com/herus13/shopee-shop-scraper) — the official brand shops in a Shopee category.
- [Shopee Category Lister](https://apify.com/herus13/shopee-category-lister) — one country's full Shopee category tree.
- [TikTok Shop Scraper](https://apify.com/herus13/tiktok-shop-scraper) — one TikTok Shop product row, across seven storefronts.

More scrapers by this author: [apify.com/herus13](https://apify.com/herus13)

# Actor input Schema

## `search_terms` (type: `array`):

Keywords to search on Amazon, one per entry — for example laptop stand, or espresso machine. Each term is paged through until the run reaches max_results, and every matching product comes back with its price, original price, currency, rating, review count and Prime flag. Give at least one term: leave empty and the run stops with an input error before anything is charged.

## `region` (type: `string`):

Amazon marketplace to search. It decides which products exist, the language of the listings and the currency of every price. Default com. Supported: com United States, co.uk United Kingdom, de Germany, sg Singapore, com.au Australia, in India, co.jp Japan. One run covers one marketplace, so comparing markets means running the same search terms once per region.

## `max_results` (type: `integer`):

Most products a run returns in total, counted across every search term. Default 48, minimum 1, maximum 1000 — an Amazon results page holds about 48 products, so the default is roughly one page per term. Raise it to sweep a category, but a single keyword usually runs out of new products well before 1000, so wider coverage comes from more search terms.

## `enrich` (type: `boolean`):

Add the full image gallery and the product category to every result, on top of the fields a search already returns. Default false, which returns the search fields only and is faster. It does not change price: price always comes from the search listing, enriched or not.

## `proxyUrls` (type: `array`):

Leave empty: the run uses the residential proxy this actor ships with, exiting from the marketplace's own country so prices match the region, and included in the price of the run. To route the run through your own provider instead, add one gateway URL per entry, for example http://user:pass@host:port — works with any provider that issues URLs. When set, the run uses these first and switches to the included proxy if they stop working, so a broken proxy never fails the run.

## Actor input object example

```json
{
  "search_terms": [
    "laptop stand"
  ],
  "region": "com",
  "max_results": 48,
  "enrich": false
}
```

# Actor output Schema

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

Products from search — ASIN, title, price, original price, currency, rating, review count, Prime, image, product URL, region, scraped_at. With `enrich` on, also image gallery (image_urls) and product category. Each row also carries `_meta`: run metadata, not scraped data.

# 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_terms": [
        "laptop stand"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("herus13/amazon-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_terms": ["laptop stand"] }

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

```

## MCP server setup

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