# Amazon Products Scraper - Fast & Efficient (with Sales Data) (`automly/amazon-products-scraper---fast-efficient-with-sales-data`) Actor

Scrape Amazon product pages — title, price, BSR, badges, variants, reviews, specs, plus monthly-sales/revenue estimates calibrated against Amazon's own bought-in-past-month badges. Three input modes: keyword search, direct URLs, or raw ASINs.

- **URL**: https://apify.com/automly/amazon-products-scraper---fast-efficient-with-sales-data.md
- **Developed by:** [Automly](https://apify.com/automly) (community)
- **Categories:** E-commerce, Integrations, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.55 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Products Scraper — with **Sales & Revenue Estimates**

> The only Apify Amazon scraper that returns **estimated monthly sales and revenue** for every product, calibrated against Amazon's own _bought-in-past-month_ badges. Built for sellers, FBA researchers, brand teams, and analysts who need volume signal — not just static product data.

**From $5.55 per 1,000 results. 30+ fields. 9 marketplaces. BSR + sales estimates included.**

✅ **30+ fields per product** — title, brand, price, BSR, badges, variants, reviews, specs, related ASINs, **monthly sales & revenue estimates** \
✅ **3 input modes** — search by **keyword**, list of **URLs**, or raw **ASINs** \
✅ **9 marketplaces** — `.com` `.co.uk` `.de` `.fr` `.it` `.es` `.ca` `.com.mx` `.in` \
✅ **Fast & lightweight** — runs at sub-second latency per product, much cheaper than browser-based scrapers \
✅ **Auto-paginates** search results until you hit `maxResultsPerKeyword` \
✅ **Multi-layout parser** — handles standard products, books, devices, OOS items, variants, mobile/lite layouts

---

### What makes this Actor different from other Amazon scrapers?

Most Amazon scrapers stop at price + title. This one tells you **what's actually selling**:

```jsonc
{
  "asin": "B00HEZ888K",
  "title": "OXO Good Grips Heavy Duty Garlic Press, Die-Cast Zinc, Black",
  "price":     "$20.99",
  "best_sellers_rank": [{"rank": 680, "category": "Kitchen & Dining"}],
  "bought_in_past_month": "6K+",          // ← Amazon's bucketed signal
  "estimated_monthly_sales":  3590,       // ← OUR per-category model
  "estimated_monthly_revenue": "$75,354.10" // ← formatted with same currency as price
}
````

**How the estimate works**: per-category cubic curve in `log10(BSR)`, calibrated directly against Amazon's own *bought-in-past-month* badges (the "20K+", "6K+" labels Amazon shows on product pages). Validated to **±55% per-product median error** in COM. ~89% BSR coverage across 28 top-level categories.

This is the same volume signal premium seller-research tools charge $40-100/month for — built into every product row, included in your per-result pricing.

***

### How does it compare to other Amazon scrapers?

| Feature | This actor | Typical Amazon scrapers |
|---|---|---|
| **Best Sellers Rank (BSR)** | ✅ All visible ranks | ⚠️ Often missing |
| **Estimated monthly sales** | ✅ Calibrated per-category | ❌ None do this |
| **Estimated monthly revenue** | ✅ `sales × price` | ❌ None do this |
| **Bought-in-past-month badge** | ✅ Surfaced | ⚠️ Inconsistent |
| **Variants with ASINs + dimensions** | ✅ Full list | ⚠️ Often parent-only |
| **Review distribution (per-star)** | ✅ All 5 stars | ⚠️ Total only |
| **Coupons + discount %** | ✅ Both | ⚠️ Usually price only |
| **Marketplaces** | 9 | 1-3 typical |
| **Speed** | ✅ sub-second per product | ❌ multi-second renders |
| **Price** | **from $5.55 / 1K** | $5-30 / 1K |

The sales/revenue estimates alone replace a $40-100/month subscription to premium seller-research tools — included at no extra cost in every product row.

***

### 🚀 Use Cases

| Who | What they do with it |
|---|---|
| **FBA sellers** | Find untapped niches by sweeping a category and ranking by `estimated_monthly_revenue` |
| **Brand teams** | Track competitor pricing, BSR, and inventory ("Only 3 left") across an ASIN list daily |
| **Affiliates / dropshippers** | Identify hot products in real time before they go viral |
| **Pricing analysts** | Pull discount %, coupons, list price, current price across thousands of SKUs |
| **Marketplace consultants** | Bulk-extract specs, dimensions, item model numbers for catalog migration |
| **AI / ML teams** | Build product-search + recommendation training sets with rich structured data |

***

### 📥 Input modes (pick one)

#### 1) Keywords — search Amazon and scrape every result

```json
{
  "keywords": ["garlic press", "yoga mat", "stainless water bottle"],
  "maxResultsPerKeyword": 200,
  "fullDetails": true,
  "marketplace": "com",
  "concurrency": 4
}
```

The actor paginates Amazon's search until `maxResultsPerKeyword` unique products are collected per keyword, then drills into each product page (when `fullDetails: true`) for full data.

#### 2) Direct URLs

```json
{
  "startUrls": [
    {"url": "https://www.amazon.com/dp/B00HEZ888K"},
    {"url": "https://www.amazon.com/dp/B0BZYCJK89"}
  ]
}
```

#### 3) Raw ASINs

```json
{
  "asins": ["B00HEZ888K", "B0BZYCJK89", "B0014BYHJE"],
  "marketplace": "com"
}
```

***

### 📤 Output sample (one row per product)

```json
{
  "asin": "B0BZYCJK89",
  "url": "https://www.amazon.com/dp/B0BZYCJK89",
  "title": "Owala FreeSip Insulated Stainless Steel Water Bottle with Straw, BPA-Free Sports Water Bottle, Great for Travel, 24 Oz, Denim",
  "brand": "Owala",
  "price":      "$29.99",
  "list_price": "$34.99",
  "discount_percent": 14,
  "coupon": null,
  "rating": 4.7,
  "review_count": 118592,
  "review_distribution": {"5_star_pct": 86, "4_star_pct": 7, "3_star_pct": 2, "2_star_pct": 1, "1_star_pct": 4},
  "best_sellers_rank":         [{"rank": 1, "category": "Kitchen & Dining"}],
  "bought_in_past_month":      "20K+",
  "estimated_monthly_sales":   48953,
  "estimated_monthly_revenue": "$1,468,089.47",
  "categories": ["Home & Kitchen", "Kitchen & Dining", "Travel & To-Go Drinkware", "..."],
  "features": ["BPA-free Tritan...", "..."],
  "description": "...",
  "specs":   {"Brand Name": "Owala", "Manufacturer": "Owala", "..." : "..."},
  "variants":[{"asin": "B097...", "dimensions": {"Color": "Denim", "Size": "24 oz"}}, "..."],
  "images":  ["https://m.media-amazon.com/images/I/...jpg"],
  "availability": "In Stock",
  "stock_left": null,
  "sold_by": "Amazon.com",
  "is_prime": true,
  "is_fba": true,
  "badges": ["Amazon's Choice"],
  "related_asins": ["B0...", "..."],
  "search_keyword": "stainless water bottle",
  "search_position": 1,
  "scraped_at": "2026-04-27T..."
}
```

**30+ fields per product** — see [Output schema](#output-schema) below for the full list.

***

### 🌍 Marketplaces supported

`com` `co.uk` `de` `fr` `it` `es` `ca` `com.mx` `in`

The marketplace selects:

- the URL host used for searches and ASIN lookups
- the locale cookies sent (`i18n-prefs`, `lc-main`)
- which per-category sales-estimate curve is used

***

### ⚙️ Input parameters

| Field | Type | Default | Notes |
|---|---|---|---|
| `keywords` | `string[]` | `[]` | Search Amazon for each. Mutually exclusive with `startUrls` / `asins`. |
| `startUrls` | `{url}[]` | `[]` | Direct product URLs. |
| `asins` | `string[]` | `[]` | Plain 10-char ASINs. |
| `maxResultsPerKeyword` | `int` | `50` | Cap per keyword (1-500). |
| `fullDetails` | `bool` | `true` | If false, search returns lightweight listing data only — much faster but no BSR. |
| `marketplace` | `enum` | `"com"` | One of the 9 supported TLDs. |
| `concurrency` | `int` | `4` | Parallel product fetches (1-16). |
| `proxyConfiguration` | `object` | Apify residential | Apify proxy is recommended; datacenter usually blocked. |

***

### 📋 Output schema

```text
asin                       string  10-char Amazon product ID
url                        string  canonical /dp/<asin> URL
title                      string
brand                      string

price                      string                     "$25.55" — display string with currency
list_price                 string                     "$34.99" — MSRP / strike-through
discount_percent           int                        % off list price
coupon                     string                     promo / S&S coupon string

rating                     float                      0–5
review_count               int
review_distribution        {5_star_pct, 4_star_pct, ..., 1_star_pct}

best_sellers_rank          [{rank, category}, ...]    all visible BSR mentions
bought_in_past_month       string                     "20K+", "6K+", etc.
estimated_monthly_sales    int                        ← our calibrated estimate
estimated_monthly_revenue  string                     "$1,234.56" — formatted with same currency as price

categories                 string[]                   breadcrumb path
features                   string[]                   bullet points
description                string                     long-form description
specs                      {key: value}               product details table

variants                   [{asin, dimensions}]       color/size combos with their own ASINs
images                     string[]                   high-res image URLs
availability               string                     "In Stock", "Only 3 left", ...
stock_left                 int                        parsed from "Only N left"

sold_by                    string                     buy-box winner
ships_from                 string
is_prime                   bool
is_fba                     bool
badges                     string[]                   Amazon's Choice, Best Seller, ...
related_asins              string[]                   "Customers also bought" carousel

search_keyword             string                     when from search-mode
search_position            int                        1-indexed position in search results
sponsored                  bool

scraped_at                 ISO-8601 UTC timestamp
```

***

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

**From $5.55 per 1,000 successfully scraped products.** Pay-per-result — no compute-units math, no surprise proxy bills, no monthly fees.

| Volume | Cost |
|---|---|
| 100 products (test run) | $0.56 |
| 1,000 products | $5.55 |
| 10,000 products | $55.50 |
| 100,000 products | $555.00 |

What's included:

- ✅ All 30+ fields per product (price, BSR, **estimated monthly sales + revenue**, variants, reviews, specs, …)
- ✅ Apify residential proxy bundled — you don't bring your own
- ✅ Built-in anti-blocking + auto-retry on rate-limited pages
- ✅ All 9 marketplaces (US, UK, DE, FR, IT, ES, CA, MX, IN)

What "successfully scraped" means: a product page that returns at least the core fields (title, ASIN, price or availability). Failed fetches after all retries are not billed.

**Compare with other Apify Amazon scrapers:**

| Actor | Price / 1K | BSR? | Sales estimates? |
|---|---|---|---|
| **This actor** | **$5.55** | ✅ | ✅ |
| junglee/free-amazon-product-scraper | $6.20 | ✅ | ❌ |
| akash9078/amazon-product-scraper | $5.00 | ⚠️ partial | ❌ |
| getdataforme/amazon-product-reviews | $9.00 | ❌ (reviews only) | ❌ |
| dtrungtin/amazon-scraper | $30.00 | ⚠️ partial | ❌ |

For very large jobs (50K+/month), reach out for volume pricing.

***

### How do I get started? Quick start guide

#### From the Apify Console

1. Click **Try for free**
2. Paste your input — keywords, URLs, or ASINs
3. Click **Start**
4. Download results as JSON, CSV, Excel, or pull via API

#### Via the Apify API

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('automly/amazon-products-scraper').call({
    keywords: ['yoga mat'],
    maxResultsPerKeyword: 100,
    marketplace: 'com',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]); // first product
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automly/amazon-products-scraper").call(run_input={
    "keywords": ["yoga mat"],
    "maxResultsPerKeyword": 100,
    "marketplace": "com",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### Locally with the Apify CLI

```bash
git clone <this-repo>
cd amazon-products-scraper-actor
apify run    ## reads storage/key_value_stores/default/INPUT.json
```

***

### How does the sales estimator work?

```
log10(monthly_sales) = c0 + c1·y + c2·y² + c3·y³,    y = log10(BSR)
```

A separate cubic curve is fit per `(marketplace, category)` pair, **calibrated directly against Amazon's own *bought-in-past-month* badges** — the "20K+", "6K+" labels Amazon now shows on product pages. The badges are the ground-truth anchors; no third-party data goes into the model.

Validated against held-out Amazon-reported badges:

- **Median per-product error: ±55%** (variance is largely intrinsic — Amazon shows the same BSR for products with very different actual sales)
- **89% BSR coverage** across 28 top-level Amazon categories
- **5 categories without calibration**: Camera & Photo, Cell Phones, Movies & TV, CDs & Vinyl, Software — these products will still return BSR but `estimated_monthly_sales: null`

***

### How does it avoid Amazon's bot detection?

The actor includes a multi-tier anti-blocking system that automatically handles Amazon's anti-bot challenges and rate limits:

- **Residential proxy rotation** — fresh exit IP per keyword, so a single degraded session can't poison the whole run
- **Auto-retry on challenge / rate-limit** — transparent recovery without manual intervention
- **Locale-aware requests** — full desktop layout with US currency, so BSR and badges are surfaced consistently

The full pipeline is invisible to you — just enable Apify residential proxy in `proxyConfiguration` and the actor handles the rest.

***

### ⚠️ Known limitations

We'd rather tell you up-front than have you hit them mid-run:

- **5 categories without sales calibration**: Camera & Photo, Cell Phones & Accessories, Movies & TV, CDs & Vinyl, Software. These products still return BSR, but `estimated_monthly_sales: null`. Other 23 top-level categories are calibrated.
- **No review text** — only counts + per-star distribution. Review pages need their own paginated scraper; pair us with `getdataforme/amazon-product-reviews-scraper` if you need full text.
- **No Q\&A** — on the roadmap.
- **Variant pricing** — you get the variant ASIN + its dimensions (color, size). To get each variant's specific price, feed those ASINs back into the actor in a second run.
- **±55% sales-estimate variance** — this is intrinsic to the BSR signal (Amazon shows the same BSR for products with very different actual sales). The estimate is calibrated against Amazon's own *bought-in-past-month* badges, but no estimator can be tighter than the source data allows.

***

### ❓ Frequently asked questions

**Is it legal to scrape Amazon?** \
Yes — this actor only fetches publicly visible product pages, the same data anyone with a browser can see. We don't access logged-in pages, private APIs, or personal data. Use the output for analysis, research, and pricing intelligence; respect Amazon's terms of service and your local data-protection laws (GDPR, CCPA) for your specific use case.

**Will my run get blocked?** \
Unlikely with default settings. The three-tier fetch chain solves WAF challenges automatically and rotates residential exit IPs per keyword. We've benchmarked sustained runs of thousands of products without manual intervention. For very large jobs (50K+) the safest pattern is to split into multiple runs.

**Does this work for Amazon Brand products like Echo Dot or Kindle?** \
Yes for most fields, but Amazon hides BSR for some of its own out-of-stock devices — that's an Amazon-side data limitation, not a parser issue. Price is still extracted (from the JSON `olpMessage` fallback used for the Devices layout).

**How fresh is the BSR data?** \
Real-time per request. Amazon updates BSR hourly; whatever you see in your browser at scrape-time is what you get in the output.

**How accurate is the sales estimate?** \
Median per-product error of **±55%** validated against held-out Amazon *bought-in-past-month* badges. The estimator is great for ranking products by relative volume and getting order-of-magnitude estimates. It's not a substitute for inventory-level signal data. See "How the sales estimator works" above.

**Can I bring my own proxy?** \
Yes — set `proxyConfiguration.proxyUrls` to your own residential proxy URLs (DataImpulse, Bright Data, etc.). You'll save on Apify's proxy markup and may get faster throughput.

**Can I get review TEXT, not just counts?** \
Not in this actor. Pair us with `getdataforme/amazon-product-reviews-scraper` for full review text.

***

### 🔗 Pair with other Apify Actors

- 🔗 [Apify Web Scraper](https://apify.com/apify/web-scraper) — for sites this actor doesn't cover
- 🔗 [Apify Google Maps Scraper](https://apify.com/compass/crawler-google-places) — combine product data with local availability
- 🔗 [Apify AI Product Matcher](https://apify.com/easyapi/ai-product-matcher) — match Amazon ASINs against other retailers

# Actor input Schema

## `keywords` (type: `array`):

Search Amazon for each keyword and scrape the resulting products. Pagination is automatic. Leave empty if using startUrls or asins instead.

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

Direct Amazon product URLs (https://www.amazon.com/dp/<ASIN>) to scrape. Mutually exclusive with keywords/asins.

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

Plain ASINs (10-char Amazon product IDs) to scrape. Resolved against the chosen marketplace.

## `maxResultsPerKeyword` (type: `integer`):

Cap on how many products to scrape per search keyword. Search auto-paginates until this many unique products are collected or pages run out.

## `fullDetails` (type: `boolean`):

When true (default), each product page is fetched for full data (BSR, badge, specs, variants, est sales). When false, search-mode returns only the lightweight listing data (asin, title, price, rating, image, sponsored flag) — much faster but no BSR / sales estimates.

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

Amazon marketplace TLD. Affects URL host, locale cookies, and which calibration table is used for sales estimates.

## `concurrency` (type: `integer`):

How many product pages to fetch in parallel during search-mode drilling. Higher is faster but increases anti-bot pressure.

## `proxyConfiguration` (type: `object`):

Apify proxy or custom rotating proxy. RESIDENTIAL is recommended; datacenter proxies are usually blocked. If left empty, the actor uses Apify's default proxy.

## Actor input object example

```json
{
  "keywords": [
    "garlic press"
  ],
  "maxResultsPerKeyword": 50,
  "fullDetails": true,
  "marketplace": "com",
  "concurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `products` (type: `string`):

All scraped products with the most-used columns: ASIN, title, brand, price, BSR, estimated monthly sales/revenue, rating, review count, URL.

## `salesIntel` (type: `string`):

Same products with the BSR / sales / revenue / discount / coupon / Prime / FBA columns surfaced — the volume + buy-box signal for FBA sellers and brand teams.

## `catalog` (type: `string`):

Same products with the long-form catalog columns surfaced — features, specs, variants, related ASINs, images, breadcrumb categories.

## `rawDataset` (type: `string`):

Every field for every scraped product. Use this for downstream pipelines that need the complete payload.

# 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 = {
    "keywords": [
        "garlic press"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/amazon-products-scraper---fast-efficient-with-sales-data").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 = {
    "keywords": ["garlic press"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/amazon-products-scraper---fast-efficient-with-sales-data").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 '{
  "keywords": [
    "garlic press"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call automly/amazon-products-scraper---fast-efficient-with-sales-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automly/amazon-products-scraper---fast-efficient-with-sales-data",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Amazon Products Scraper - Fast & Efficient (with Sales Data)",
        "description": "Scrape Amazon product pages — title, price, BSR, badges, variants, reviews, specs, plus monthly-sales/revenue estimates calibrated against Amazon's own bought-in-past-month badges. Three input modes: keyword search, direct URLs, or raw ASINs.",
        "version": "0.1",
        "x-build-id": "oCCrzTzSd7jCAJeQg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automly~amazon-products-scraper---fast-efficient-with-sales-data/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automly-amazon-products-scraper---fast-efficient-with-sales-data",
                "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/automly~amazon-products-scraper---fast-efficient-with-sales-data/runs": {
            "post": {
                "operationId": "runs-sync-automly-amazon-products-scraper---fast-efficient-with-sales-data",
                "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/automly~amazon-products-scraper---fast-efficient-with-sales-data/run-sync": {
            "post": {
                "operationId": "run-sync-automly-amazon-products-scraper---fast-efficient-with-sales-data",
                "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": {
                    "keywords": {
                        "title": "Keywords (search mode)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Search Amazon for each keyword and scrape the resulting products. Pagination is automatic. Leave empty if using startUrls or asins instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs (direct product URLs)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Direct Amazon product URLs (https://www.amazon.com/dp/<ASIN>) to scrape. Mutually exclusive with keywords/asins.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "asins": {
                        "title": "ASINs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Plain ASINs (10-char Amazon product IDs) to scrape. Resolved against the chosen marketplace.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResultsPerKeyword": {
                        "title": "Max results per keyword",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Cap on how many products to scrape per search keyword. Search auto-paginates until this many unique products are collected or pages run out.",
                        "default": 50
                    },
                    "fullDetails": {
                        "title": "Full per-product detail",
                        "type": "boolean",
                        "description": "When true (default), each product page is fetched for full data (BSR, badge, specs, variants, est sales). When false, search-mode returns only the lightweight listing data (asin, title, price, rating, image, sponsored flag) — much faster but no BSR / sales estimates.",
                        "default": true
                    },
                    "marketplace": {
                        "title": "Marketplace",
                        "enum": [
                            "com",
                            "co.uk",
                            "de",
                            "fr",
                            "it",
                            "es",
                            "ca",
                            "com.mx",
                            "in"
                        ],
                        "type": "string",
                        "description": "Amazon marketplace TLD. Affects URL host, locale cookies, and which calibration table is used for sales estimates.",
                        "default": "com"
                    },
                    "concurrency": {
                        "title": "Concurrent product fetches",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "How many product pages to fetch in parallel during search-mode drilling. Higher is faster but increases anti-bot pressure.",
                        "default": 4
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy or custom rotating proxy. RESIDENTIAL is recommended; datacenter proxies are usually blocked. If left empty, the actor uses Apify's default proxy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
