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

Scrapes Amazon product pages — price, list price, rating, reviews, availability, brand, features, and images, across 18 stores

- **URL**: https://apify.com/mina\_safwat/amazon-scraper.md
- **Developed by:** [Mina](https://apify.com/mina_safwat) (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.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.

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 product pages** — price, list price, rating, review count, availability, brand, features, and images — across 24 Amazon stores.

### What does Amazon Product Scraper do?

Paste Amazon product links and it returns each product as structured data: the title, the current price and any struck-through list price, the star rating and how many reviews it is based on, whether it is in stock, the brand, the bullet-point features, and the image gallery.

**The store comes from the link.** Paste `amazon.eg`, `amazon.com` and `amazon.co.uk` URLs in the same run and each is fetched from its own store, in its own currency, from an address in that country. There is nothing else to configure.

### Why use Amazon Product Scraper?

- **Price monitoring** — track your own or a competitor's prices on a schedule and catch changes.
- **Repricing and margin analysis** — compare list price against current price to see real discounting.
- **Market research** — pull ratings and review counts across a set of products.
- **Cross-border comparison** — run the same ASINs against several Amazon stores to compare prices by country.
- **Catalogue enrichment** — fill your own product database with titles, features, and images.

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

### How to use Amazon Product Scraper

1. Paste your **Amazon product URLs**, one per line — straight from your browser.
2. Click **Start**.

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

### Input

| Field | Description |
| --- | --- |
| `product_urls` | Amazon product links, one per line. The store is read from each link. |
| `require_price` | Retry from another address when Amazon serves a page with the price stripped out. On by default. |
| `proxy_country` | Leave empty and each product is fetched from an address in its own store's country. |

### Output

```json
{
  "asin": "B09B8V1LZ3",
  "title": "Amazon Echo Dot (newest model) - Vibrant sounding speaker",
  "url": "https://www.amazon.com/dp/B09B8V1LZ3",
  "price": 79.0,
  "list_price": 99.99,
  "discount_percent": 21,
  "currency": "$",
  "rating": 4.7,
  "review_count": 206,
  "in_stock": true,
  "brand": "Visit the Amazon Store",
  "domain": "amazon.com",
  "country": "US",
  "features": ["Our most popular smart speaker", "..."],
  "image": "https://m.media-amazon.com/images/I/1.jpg"
}
```

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

#### Data fields

| Field | Description |
| --- | --- |
| `asin`, `title`, `url`, `domain`, `country` | Which product, and on which store. |
| `price`, `list_price`, `discount_percent`, `currency` | Current price, the struck-through price, and the discount between them. |
| `rating`, `review_count` | Star rating and how many ratings it is based on. |
| `in_stock`, `availability` | Whether it can be bought, and Amazon's own wording. |
| `brand`, `seller`, `category`, `best_sellers_rank` | Who makes and sells it, and how it ranks. |
| `features` | The bullet points from the listing. |
| `image`, `images` | Main image and the rest of the gallery. |
| `error` | Present only when a product could not be read, with the reason. |

### Three things worth knowing

**A missing price usually means the product is not currently for sale.** Amazon shows no buy-box price when an item is out of stock or has no active offer. Those rows come back with `in_stock: false` and no `error` — that is a real answer, not a failure.

**Amazon degrades rather than blocks.** An address it does not trust still gets a normal-looking page, but with the price fields stripped out. The Actor detects that specific shape and retries from a different address, which is why `require_price` is on by default. Turn it off if you only need titles, ratings, and images, and runs will be considerably faster.

**A dead ASIN is reported immediately.** If Amazon has no such product on that store, the row says so rather than the run spending time retrying something that cannot succeed.

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

Most products resolve in one or two requests. Ones where Amazon strips the price cost more, because the Actor retries elsewhere until it gets a trustworthy page. Ten products typically take about a minute.

### Tips

- **Compare the same product across stores** by pasting its link from each one — `amazon.eg`, `amazon.com`, `amazon.co.uk`. The same product is kept separately per store, so you get one row each.
- **Compare `price` with `list_price`** for the real discount rather than the advertised one.
- **Turn off `require_price`** for catalogue enrichment where you only need titles and images — much faster.
- **Schedule it** on the same ASINs to build a price history.

### FAQ and support

**Does it need an Amazon account or API key?** No. It reads publicly visible product pages.

**Why did a product come back without a price?** Either it is genuinely unavailable — `in_stock` will be `false` — or Amazon served a stripped page, in which case the row carries an `error` explaining it. The two are reported differently on purpose.

**Why do some products return nothing?** They do not exist on that store. The row says so, and names the store.

**Why does it only take URLs?** Because a bare product code does not say which of the 24 stores it belongs to, and the same code can be a different product — at a very different price — on each. Taking the link removes that guesswork entirely.

**Can I search Amazon by keyword?** Not in this Actor. Amazon throttles its search pages far harder than product pages, and a keyword scraper that fails half the time would not be worth shipping. Feed in product links instead.

**Is scraping Amazon legal?** This Actor collects publicly visible product data and no personal information. Amazon's terms of service prohibit automated collection, and Amazon enforces this more actively than most sites. Public data scraping has been upheld in some jurisdictions, but 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 product scraper, scrape amazon product data, amazon price tracker, amazon product api, amazon listing scraper, amazon asin scraper, competitor price monitoring, amazon product details extractor, amazon ratings and reviews data, ecommerce price scraping, amazon marketplace data, scrape amazon without an api

# Actor input Schema

## `product_urls` (type: `array`):

Amazon product links, one per line — copy them straight from your browser. The store is taken from each link, so you can mix amazon.eg, amazon.com, amazon.co.uk and 21 others in a single run without setting anything else.

## `require_price` (type: `boolean`):

Amazon sometimes serves a product page with the price left out. With this on, the Actor retries from a different address until a price appears, which is slower but far more reliable. Turn it off if you only need titles, ratings, and images.

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

Comma-separated 2-letter codes. Leave empty and each product is fetched from an address in its own store’s country — an Egyptian one for amazon.eg, a UK one for amazon.co.uk.

## Actor input object example

```json
{
  "product_urls": [
    "https://www.amazon.eg/dp/B0BDHWDR12",
    "https://www.amazon.com/dp/B09B8V1LZ3"
  ],
  "require_price": true
}
```

# 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 = {
    "product_urls": [
        "https://www.amazon.eg/dp/B0BDHWDR12",
        "https://www.amazon.com/dp/B09B8V1LZ3"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/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 = { "product_urls": [
        "https://www.amazon.eg/dp/B0BDHWDR12",
        "https://www.amazon.com/dp/B09B8V1LZ3",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mina_safwat/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 '{
  "product_urls": [
    "https://www.amazon.eg/dp/B0BDHWDR12",
    "https://www.amazon.com/dp/B09B8V1LZ3"
  ]
}' |
apify call mina_safwat/amazon-scraper --silent --output-dataset

```

## MCP server setup

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