# Amazon Product Scraper - 50 Rows FREE Per Run (`acumix/amazon-products`) Actor

First 50 products of every run are FREE so you can check the data before you pay for any of it. Full Amazon product data from a search, a category or a product list: price, stock, rating, specs, seller and sales rank. One row per product. US, UK, DE, IT, ES.

- **URL**: https://apify.com/acumix/amazon-products.md
- **Developed by:** [liviu robert ciocazan](https://apify.com/acumix) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 product returneds

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?

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

Get full Amazon product data — price, stock, rating, specs and seller — from a search, a category, or a list of products.

**The first 50 products of every run are free**, so you can check the data before you
pay for any of it.

**You pay only for products you actually get back.** Nothing found, nothing charged.

**Any problem answered within 24 hours.** Real people maintain this — see [Support](#support--we-answer-within-24-hours).

### What you give it

Fill in any one of these. You can mix them, and duplicates are removed automatically.

| | Example |
|---|---|
| **Amazon URLs** | `https://www.amazon.com/s?k=cordless+drill` — a search, a category, or a single product page |
| **Search terms** | `cordless drill` — exactly what you'd type into Amazon's search box |
| **ASINs** | `B00ET5VMTU` — if you already have product codes |

Then pick your **marketplace** (US, UK, Germany, Italy or Spain) and a **limit** so a broad search can't run away with your budget.

### Narrow it down

**Sort** the way Amazon does — relevance, price low to high, price high to low, average review, or newest.

**Filter** so you only get what you want. Minimum and maximum price, minimum rating, minimum number of reviews, in-stock only, or a brand name. **Products that don't match are never delivered and never charged for** — so a filtered run costs less, not more.

**Trim the rows** if you want smaller output: switch off the description, the specifications, the images, or add variant ASINs. The price per product is the same either way.

### What you get back

**One row per product, with everything on it.** Every product is opened on its own page, so you get the full detail — not just the thumbnail and price that a search listing shows.

**The product**
`title` · `brand` · `manufacturer` · `model` · `category` · `breadcrumbs`

**The commercials**
`price` · `list_price` (the crossed-out price) · `currency` · `availability` · `in_stock` · `sold_by` · `fulfilled_by`

**What shoppers think**
`rating` · `reviews_count` · `best_sellers_rank` (rank and category, for each category it charts in)

**The details**
`description` · `features` (the bullet points) · `specifications` (the full table — often 30+ entries) · `color` · `size` · `material` · `weight` · `dimensions` · `date_first_available`

**Pictures and versions**
`image` · `images` (all of them) · `variant_asins` (other sizes and colours of the same product)

**Where it came from**
`asin` · `url` · `source` (which search or URL found it) · `list_position` (where it ranked in those results) · `scraped_at`

### Example

```json
{
  "searchTerms": ["cordless drill"],
  "domain": "com",
  "maxItems": 100,
  "maxPagesPerSource": 2
}
```

Gives you the first 100 products for that search, each one fully detailed:

```json
{
  "asin": "B00ET5VMTU",
  "title": "DEWALT 20V Max XR Drill Driver, Battery and Charger (DCD771C2)",
  "brand": "DEWALT",
  "model": "DCD771C2",
  "category": "Tools & Home Improvement",
  "price": 99.99,
  "currency": "USD",
  "in_stock": true,
  "rating": 4.8,
  "reviews_count": 49893,
  "best_sellers_rank": [{ "rank": 953, "category": "Tools & Home Improvement" }],
  "sold_by": "Amazon Resale",
  "fulfilled_by": "Amazon",
  "list_position": 2,
  "source": "cordless drill"
}
```

### What people use it for

- **Price tracking** — watch your products and your competitors', across countries
- **Market research** — pull a whole category and see who sells what, at what price
- **Search ranking** — `list_position` tells you where a product actually appears for a search term
- **Catalogue building** — specs, images and descriptions for thousands of products
- **Stock monitoring** — know when something goes out of stock, or comes back

### Good to know

- **Prices are live.** Amazon changes them through the day, so a price is true as of `scraped_at`.
- **Not every product has every field.** Some sellers leave specs blank. Missing means Amazon doesn't show it.
- **Products that no longer exist are skipped**, and you aren't charged for them. The run tells you how many.
- **Results arrive as they're found**, so you can start using them before a long run finishes.
- **Your spend limit is respected.** The run stops cleanly at it rather than failing after the work is done.
- **Bestseller pages** (`/Best-Sellers/`, `/zgbs/`) aren't supported here — use a search or category URL instead.

### Support — we answer within 24 hours

Something not working? Tell us and we'll fix it.

**Every issue gets a reply within 24 hours, and we work it until it's solved.** That covers a scraper that stops returning data, fields that look wrong, a marketplace behaving oddly, or anything you're unsure how to configure.

**How to reach us**

- **Issues tab** on this Actor's page — the fastest route, it reaches us directly
- **info@acumix.eu** if you'd rather email

**What helps us fix it faster**

- The run ID (it's in the URL of any run)
- What you expected versus what you got
- The input you used — a search term, URL or ASIN we can reproduce with

If something is broken on our side, we'll also tell you when it's fixed rather than leaving you to check.

### Running it

Click **Start** in the console, or use the API, schedule it, or connect it to Make, Zapier, Google Sheets, or your own code. Export as JSON, CSV, Excel or XML.

# Actor input Schema

## `startUrls` (type: `array`):

Paste product, search or category URLs. A product URL returns that one product; a search or category URL returns the products listed on it. Bestseller pages are not supported here.

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

Keywords, exactly as you would type them into the Amazon search box. One per line.

## `asins` (type: `array`):

Product codes, if you already have them. Faster and cheaper than a search, since nothing has to be discovered first.

## `domain` (type: `string`):

All URLs and searches in one run are read from this marketplace. Prices and stock differ by country.

## `maxItems` (type: `integer`):

Stop after this many products in total. You are only charged for products actually returned.

## `maxPagesPerSource` (type: `integer`):

How deep to page through each search or category. Roughly 16 to 22 products per page. Ignored for product URLs and ASINs.

## `sortBy` (type: `string`):

Same ordering Amazon offers on its own results page.

## `minPrice` (type: `integer`):

Skip products cheaper than this.

## `maxPrice` (type: `integer`):

Skip products more expensive than this.

## `minRating` (type: `string`):

Skip products rated below this. Products with no rating yet are skipped when this is set.

## `minReviews` (type: `integer`):

Skip products with fewer reviews than this. Useful for filtering out brand-new listings.

## `onlyInStock` (type: `boolean`):

Skip anything Amazon shows as unavailable.

## `brandContains` (type: `string`):

Keep only products whose brand contains this text, e.g. DEWALT. Case-insensitive.

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

The product description text.

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

The full specification table and the bullet points.

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

All product image URLs.

## `includeVariants` (type: `boolean`):

Other sizes and colours of the same product.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.amazon.com/s?k=wire+stripper"
    },
    {
      "url": "https://www.amazon.com/dp/B08N5WRWNW"
    }
  ],
  "searchTerms": [
    "wire stripper"
  ],
  "domain": "com",
  "maxItems": 100,
  "maxPagesPerSource": 1,
  "sortBy": "relevance",
  "minRating": "any",
  "onlyInStock": false,
  "includeDescription": true,
  "includeSpecifications": true,
  "includeImages": true,
  "includeVariants": false
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://www.amazon.com/s?k=wire+stripper"
        },
        {
            "url": "https://www.amazon.com/dp/B08N5WRWNW"
        }
    ],
    "searchTerms": [
        "wire stripper"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("acumix/amazon-products").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 = {
    "startUrls": [
        { "url": "https://www.amazon.com/s?k=wire+stripper" },
        { "url": "https://www.amazon.com/dp/B08N5WRWNW" },
    ],
    "searchTerms": ["wire stripper"],
}

# Run the Actor and wait for it to finish
run = client.actor("acumix/amazon-products").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 '{
  "startUrls": [
    {
      "url": "https://www.amazon.com/s?k=wire+stripper"
    },
    {
      "url": "https://www.amazon.com/dp/B08N5WRWNW"
    }
  ],
  "searchTerms": [
    "wire stripper"
  ]
}' |
apify call acumix/amazon-products --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,acumix/amazon-products"
        }
    }
}
```

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/gyKpP52iLHzqaXaQR/builds/df74U4sU6yoUwImsU/openapi.json
