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

Turn Amazon product links or ASINs into clean structured data: price, list price, discount, stock, buy-box seller, rating and star breakdown, category rankings, images, bullets and full specifications. Pick the Amazon marketplace and results arrive in its own currency.

- **URL**: https://apify.com/apt\_marble/amazon-product-scraper.md
- **Developed by:** [Hamza](https://apify.com/apt_marble) (community)
- **Categories:** E-commerce
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 product scrapeds

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/platform/actors/running/actors-in-store#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

## Amazon Product Scraper

Turn any list of Amazon products into a clean, structured dataset. Paste product links or bare ASINs — mixed together is fine — and get back the title, brand, current price and list price, discount, availability, buy-box seller, star rating, ratings total, star breakdown, category rankings, images, feature bullets, description and the full specification table, in the Amazon marketplace of your choice. Built for anyone who needs Amazon product data they can trust: sellers watching competitors, brands auditing their own catalogue, analysts building price and assortment models, and teams enriching an internal product database.

### What you can do with it

- **Track competitor pricing and stock** across a watchlist of ASINs, on a schedule, with the discount and coupon flags already worked out.
- **Audit your own catalogue** — confirm every listing has the images, bullets, brand and specifications you expect, and spot the ones that quietly lost their buy box.
- **Build a product database** from a supplier list of ASINs, complete with dimensions, weight, first-available date and category rankings.
- **Research a category** by feeding in the ASINs you care about and comparing rating, ratings total and Best Sellers Rank side by side.
- **Check who is actually selling** each product: the seller currently winning the buy box, whether Amazon itself sells it, and where it ships from.
- **Pull a public review sample** alongside the product record when you want a quick read on sentiment without a separate run.

### What you get

One row per product. Abridged sample:

```json
{
  "asin": "B079VP6DH5",
  "parentAsin": "B0CT5WBY8Q",
  "title": "Bounty Paper Towels Quick Size, White, 16 Family Rolls = 40 Regular Rolls",
  "brand": "Bounty",
  "url": "https://www.amazon.com/dp/B079VP6DH5",
  "marketplace": "us",
  "price": 29.44,
  "currency": "USD",
  "listPrice": 34.99,
  "savingsPercent": 16,
  "hasCoupon": true,
  "couponText": "Save $2.00 with coupon",
  "availability": "In Stock",
  "inStock": true,
  "isPrime": true,
  "buyBoxSeller": "Amazon.com",
  "buyBoxSellerId": "ATVPDKIKX0DER",
  "isAmazonSold": true,
  "isFulfilledByAmazon": null,
  "rating": 4.8,
  "ratingsCount": 235305,
  "starHistogram": { "five": 90, "four": 8, "three": 1, "two": 0, "one": 1 },
  "bestSellersRank": [
    { "rank": 1, "category": "Health & Household", "categoryUrl": "https://www.amazon.com/gp/bestsellers/hpc" },
    { "rank": 1, "category": "Paper Towels", "categoryUrl": "https://www.amazon.com/gp/bestsellers/hpc/15347401" }
  ],
  "breadcrumbs": [{ "name": "Health & Household", "url": "https://www.amazon.com/gp/bestsellers/hpc", "nodeId": "3760901" }],
  "mainImage": "https://m.media-amazon.com/images/I/81qihSiU-0L._AC_SL1500_.jpg",
  "images": ["https://m.media-amazon.com/images/I/81qihSiU-0L._AC_SL1500_.jpg"],
  "featureBullets": ["2X MORE ABSORBENT vs. leading ordinary brand"],
  "specifications": { "Brand": "Bounty", "Item Weight": "9.65 pounds", "Date First Available": "April 3, 2018" },
  "variantCount": 6,
  "dimensions": "23.62 x 12.21 x 22.64 inches",
  "weight": "9.65 pounds",
  "scrapedAt": "2026-08-07T12:00:00.000Z"
}
```

### Input reference

| Setting | Type | Default | What it does |
| --- | --- | --- | --- |
| Amazon product URLs or ASINs | list of text | — | The products to collect. Full Amazon links and bare ASINs both work, mixed in the same list. Duplicates are collapsed; entries with no product identifier in them are reported and skipped. **Required.** |
| Include all product images | true/false | `true` | Return every high-resolution image Amazon publishes, not just the main one. |
| Include description and features | true/false | `true` | Return the "About this item" bullets and the description text. |
| Include specifications | true/false | `true` | Return the technical details as name and value pairs. |
| Include sample reviews | true/false | `false` | Attach the customer reviews Amazon publishes for the product, together with the star breakdown. |
| Maximum products | whole number | `100` | Stop after this many products, whatever the list length. Maximum 5000. |
| Amazon marketplace | choice | `us` | Which country's Amazon site to read. Prices, availability and rankings differ between marketplaces, and results come back in that marketplace's own currency. |
| Parallel targets | whole number | `4` | How many products to work on at the same time. Higher is faster, but Amazon serves fewer complete results when pushed hard. Maximum 10. |

Switching an option off removes its columns from the result rather than filling them with empty values, so you never pay for data you excluded.

### Output fields

| Field | Type | Description |
| --- | --- | --- |
| `asin` | text | Amazon's product identifier. |
| `parentAsin` | text | The family identifier when the product is one size/colour of several. |
| `title` | text | Product title as shown to shoppers. |
| `brand` | text | Brand or store name. |
| `url` | text | Clean product link, free of tracking. |
| `marketplace` | text | The Amazon marketplace the row was collected from. |
| `price` | number | Current buy-box price. |
| `currency` | text | Currency the price came back in, always read from the result itself. |
| `listPrice` | number | Struck-through comparison price, when one is shown. |
| `savingsPercent` | number | Discount against the list price. |
| `priceRaw` | text | The price exactly as Amazon rendered it. |
| `hasCoupon` / `couponText` | true/false, text | Clippable coupon, and its wording. |
| `dealBadge` | text | Deal label such as "Limited time deal". |
| `availability` / `inStock` | text, true/false | Stock message, and a simple in-stock flag. |
| `isPrime` | true/false | Whether the buy-box offer shows Prime. |
| `buyBoxSeller` / `buyBoxSellerId` / `buyBoxSellerUrl` | text | The seller currently winning the buy box. |
| `shipsFrom` | text | Who ships the buy-box offer. |
| `isAmazonSold` | true/false | Whether Amazon itself is the seller. |
| `isFulfilledByAmazon` | true/false | Whether the seller's offer is fulfilled by Amazon. Empty when the listing gives no evidence either way. |
| `rating` | number | Average star rating. |
| `ratingsCount` | number | Total star ratings — a different, much larger figure than the number of written reviews. |
| `starHistogram` | object | Percentage of ratings at each star level. |
| `bestSellersRank` | list | Every rank Amazon publishes, with its category and link. |
| `breadcrumbs` | list | Category trail with node identifiers. |
| `mainImage` / `images` | text, list | Main image and every high-resolution image. |
| `featureBullets` / `description` | list, text | "About this item" bullets and description text. |
| `specifications` | object | Technical details as name and value pairs. |
| `variantCount` | number | How many sizes/colours/styles the family contains. |
| `dimensions` / `weight` / `dateFirstAvailable` | text | Physical facts, when Amazon publishes them. |
| `reviews` | list | Sample reviews, when they were asked for. Each carries its own `asin` and an `isForRequestedAsin` flag. |
| `reviewsCollected` / `reviewsForThisAsin` / `reviewsFromOtherVariants` | number | How the sample splits between this exact product and its siblings. |
| `ratingSummary` | object | Rating, ratings total and star breakdown, when reviews were asked for. |
| `requestedInput` / `requestedAsin` | text | Exactly what you supplied, so results are easy to join back. |
| `scrapedAt` | text | When the row was collected. |

### Pricing

You pay per result, with no monthly minimum.

| What you are charged for | Price |
| --- | --- |
| Product scraped — one complete product record added to your dataset | **$1.50 per 1,000** |

There is nothing else to pay: options such as images, specifications and sample reviews are included in the same result.

**Worked example.** A watchlist of 500 ASINs, run every morning, produces 500 rows per run: 500 × $0.0015 = **$0.75 per run**, about $22.50 a month on a daily schedule. Products that turn out to be unavailable are reported in the run summary and are not charged.

### Limits & what this actor cannot do

- Prices, ranks, ratings and stock are a snapshot at the moment of collection and keep changing afterwards.
- Prices and availability differ between Amazon marketplaces; results reflect the marketplace you select, in that marketplace's own currency.
- Products that are removed, restricted or unavailable in the selected marketplace are reported as unavailable rather than returned as empty rows.
- The seller reported is the one currently winning the buy box. A full list of every competing seller for a product is not published, so it is not returned.
- Amazon shows only a selection of customer reviews on a public product listing, and that selection is what the review option returns — not every review ever written. Those reviews are also shared across a product's whole size/colour family, so each one carries the exact product it was written for and a flag saying whether that is the product you asked for.
- The ratings total and the number of written reviews are different figures with different meanings. Both are returned; neither substitutes for the other.
- Customer questions and answers are not publicly listed and are not returned.
- Some fields simply do not exist on some products — books have no feature bullets, groceries have no technical drawing. An absent value comes back empty rather than guessed.
- Speed depends on the size of the job and on Amazon's own response times; no fixed throughput is promised.
- Amazon's terms govern automated access. You are responsible for using the data lawfully and in line with the source site's terms, and for handling any personal data in line with applicable privacy law.

### FAQ

**Do I need an Amazon account?**
No. The actor reads only what Amazon shows the public.

**Does it need my login or password?**
No. There is nothing to connect and nothing to configure — paste your products and press start.

**Can I schedule it?**
Yes. Schedule it hourly, daily or weekly from the Apify console and each run writes a fresh dataset you can diff against the last one.

**Is the data complete?**
It is complete for everything Amazon publishes openly. Where Amazon keeps something behind a login — the full review archive, questions and answers, the full seller list for a product — the actor says so instead of guessing.

**Why is a price empty on some rows?**
Because Amazon showed no buy-box price at that moment: the product may be unavailable, or sold only through offers that are not published openly. An empty price means "not shown", never "free".

**Can I get every size and colour of a product?**
This actor tells you how many exist in `variantCount` and gives you the family identifier. If you need one row per size and colour, with each one's own price, use the Amazon Product Variants Scraper.

# Actor input Schema

## `productUrls` (type: `array`):

Products to collect. Paste full Amazon product links or bare ASINs — both work, mixed in the same list.

## `includeImages` (type: `boolean`):

Return every high-resolution image Amazon publishes for the product, not just the main one.

## `includeDescription` (type: `boolean`):

Return the "About this item" bullet points and the product description text.

## `includeSpecifications` (type: `boolean`):

Return the technical details table as name and value pairs.

## `includeReviews` (type: `boolean`):

Return the customer reviews Amazon publishes on the product page, together with the star breakdown.

## `maxProducts` (type: `integer`):

Stop after this many products, whatever the list length.

## `marketplace` (type: `string`):

Which country's Amazon site to read. Prices, availability and rankings differ between marketplaces, and results come back in that marketplace's own currency.

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

How many targets to work on at the same time. Higher is faster but Amazon serves fewer complete pages when pushed hard. Leave at 4 unless you have a reason.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.amazon.com/dp/B079VP6DH5"
  ],
  "includeImages": true,
  "includeDescription": true,
  "includeSpecifications": true,
  "includeReviews": false,
  "maxProducts": 100,
  "marketplace": "us",
  "maxConcurrency": 4
}
```

# Actor output Schema

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

Every row this run produced.

## `runSummary` (type: `string`):

What this run collected, and anything it could not read.

# 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 = {
    "productUrls": [
        "https://www.amazon.com/dp/B079VP6DH5"
    ],
    "includeImages": true,
    "includeDescription": true,
    "includeSpecifications": true,
    "includeReviews": false,
    "maxProducts": 100,
    "marketplace": "us",
    "maxConcurrency": 4
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/amazon-product-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 = {
    "productUrls": ["https://www.amazon.com/dp/B079VP6DH5"],
    "includeImages": True,
    "includeDescription": True,
    "includeSpecifications": True,
    "includeReviews": False,
    "maxProducts": 100,
    "marketplace": "us",
    "maxConcurrency": 4,
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/amazon-product-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 '{
  "productUrls": [
    "https://www.amazon.com/dp/B079VP6DH5"
  ],
  "includeImages": true,
  "includeDescription": true,
  "includeSpecifications": true,
  "includeReviews": false,
  "maxProducts": 100,
  "marketplace": "us",
  "maxConcurrency": 4
}' |
apify call apt_marble/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

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