# Amazon Scraper (`automation-lab/amazon-scraper`) Actor

Scrape Amazon search results for price monitoring: current/list prices, ratings, reviews, seller info, Prime status, availability, and images across 10 marketplaces. Export to JSON, CSV, Excel.

- **URL**: https://apify.com/automation-lab/amazon-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 154 total users, 42 monthly users, 99.9% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/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

### What does Amazon Scraper do?

Amazon Scraper extracts product data from **Amazon search results** across **10 marketplaces**. Search by keyword and get structured data for every product — prices, ratings, reviews, seller info, Prime status, and images. Supports pagination, deduplication, sorting, and automatic currency detection.

Use it for **price monitoring**, **competitive intelligence**, **dropshipping research**, **market analysis**, and **product research** across any Amazon product category.

### Who is it for?

Amazon Scraper is built for ecommerce teams, marketplace sellers, price-intelligence analysts, dropshipping researchers, agencies, and developers who need repeatable Amazon search-result data in structured datasets instead of manual copy-paste.

### Use cases

- **Price monitoring** — Track Amazon prices over time by scheduling this scraper to run daily or hourly. Compare prices across marketplaces (US, UK, DE).
- **Dropshipping and retail arbitrage** — Find profitable products by comparing Amazon prices with other marketplaces. Identify items with large price gaps.
- **Competitive intelligence** — Monitor competitor product listings, pricing strategies, and seller presence across Amazon marketplaces.
- **Market research** — Analyze product categories, pricing distributions, ratings, and review volumes to identify market trends and opportunities.
- **Product research for sellers** — Find high-demand, low-competition products. Analyze bestseller rankings and review velocity to validate product ideas.

### Why use Amazon Scraper?

- **10 Amazon marketplaces** — US, UK, Germany, France, Italy, Spain, Canada, Japan, India, Australia. Proxy country is set automatically.
- **Fast and lightweight** — Pure HTTP extraction with Cheerio, no browser needed. Scrapes 20+ products per page.
- **Reliable anti-bot handling** — Residential proxy rotation with automatic retries and locale-aware cookies.
- **Clean structured data** — Every product includes price, list price, rating, review count, Prime status, and images. Ready for analysis.
- **Deduplication built-in** — Automatically skips duplicate products across pages and search queries.
- **Multiple search queries** — Run several keyword searches in a single run. Great for monitoring entire product categories.
- **Flexible sorting** — Sort by relevance, price (low/high), average rating, or newest.
- **Pay-per-event pricing** — You only pay for products scraped. No monthly subscription.

### What data can you extract?

Each product in the output includes:

| Field | Description |
|-------|-------------|
| `asin` | Amazon Standard Identification Number |
| `name` | Full product title |
| `brand` | Brand name (when available in search results) |
| `price` | Current selling price (number) |
| `priceString` | Formatted price (e.g., "$299.99") |
| `listPrice` | Original/list price before discount |
| `listPriceString` | Formatted original price |
| `currency` | Currency code (USD, GBP, EUR, etc.) |
| `availability` | Stock status |
| `rating` | Average customer rating (1-5) |
| `reviewCount` | Total number of customer ratings |
| `seller` | Seller name (when available) |
| `thumbnail` | Product image URL |
| `images` | Array of product image URLs |
| `url` | Direct link to product on Amazon |
| `isSponsored` | Whether the product is a sponsored listing |
| `isPrime` | Whether the product has Prime delivery |
| `bestSellerRank` | Bestseller badge text (when present) |
| `scrapedAt` | ISO timestamp of when data was collected |

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

This Actor uses **pay-per-event** pricing — you pay only for what you scrape. No monthly subscription. All platform costs (compute, proxy, storage) are **included**.

| | Free plan | Starter ($49/mo) | Scale ($499/mo) |
|---|---|---|---|
| **Per product** | $0.004 | $0.003 | $0.002 |
| **100 products** | $0.40 | $0.30 | $0.20 |
| **1,000 products** | $4.00 | $3.00 | $2.00 |

**Real-world cost examples:**

| Search | Products | Duration | Cost (Free tier) |
|---|---|---|---|
| "laptop" (1 page) | ~22 | ~5s | ~$0.09 |
| "laptop" (3 pages) | ~50 | ~15s | ~$0.20 |
| "laptop" + "wireless mouse" (3 pages each) | ~100 | ~30s | ~$0.40 |

*Costs include a $0.001 actor start fee per run.*

### How to scrape Amazon products

1. Click **Try for free** to open the Actor in Apify Console.
2. Enter one or more search keywords (e.g., "laptop", "wireless mouse").
3. Choose your Amazon marketplace (US, UK, DE, etc.).
4. Set the maximum number of products and pages you want.
5. Click **Start** and wait for the run to finish.
6. Download your data as JSON, CSV, or Excel from the **Dataset** tab.

**Example input:**

```json
{
    "searchQueries": ["laptop", "gaming mouse"],
    "marketplace": "US",
    "maxProductsPerSearch": 100,
    "maxSearchPages": 3,
    "sort": "relevance"
}
````

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | array | *required* | Keywords to search on Amazon |
| `marketplace` | string | "US" | Amazon marketplace: US, UK, DE, FR, IT, ES, CA, JP, IN, AU |
| `maxProductsPerSearch` | integer | 100 | Maximum products to return per keyword |
| `maxSearchPages` | integer | 5 | Max search result pages per keyword (up to 20) |
| `sort` | string | "relevance" | Sort: relevance, price\_low, price\_high, avg\_rating, newest |
| `maxRequestRetries` | integer | 5 | Retry attempts for failed requests |

### Output example

```json
{
    "type": "product",
    "asin": "B0947BJ67M",
    "name": "HP 14 Laptop, Intel Celeron N4020, 4 GB RAM, 64 GB Storage",
    "brand": "",
    "price": 184,
    "priceString": "$184.00",
    "listPrice": 229.99,
    "listPriceString": "$229.99",
    "currency": "USD",
    "availability": "In stock",
    "rating": 4,
    "reviewCount": 5144,
    "seller": "",
    "images": ["https://m.media-amazon.com/images/I/71cWZUr9SVL._AC_UY218_.jpg"],
    "thumbnail": "https://m.media-amazon.com/images/I/71cWZUr9SVL._AC_UY218_.jpg",
    "url": "https://www.amazon.com/dp/B0947BJ67M",
    "isSponsored": false,
    "isPrime": false,
    "bestSellerRank": "",
    "scrapedAt": "2026-03-02T20:45:28.024Z"
}
```

### Tips for best results

- **Start with low limits** — Set `maxProductsPerSearch` to 10-20 for testing before scaling up.
- **Use specific keywords** — "wireless gaming mouse logitech" returns better results than just "mouse".
- **Try different marketplaces** — Compare prices across US, UK, DE for arbitrage opportunities.
- **Schedule regular runs** — Use [Apify Schedules](https://docs.apify.com/platform/schedules) for daily price monitoring.
- **Sort by price** — Use `price_low` or `price_high` to find the cheapest or most expensive products in a category.
- **Multiple keywords per run** — Add several keywords to `searchQueries` array for efficient batch scraping.
- **Combine with other scrapers** — Cross-reference Amazon prices with Walmart or Target data for price comparison.

### Integrations

Connect Amazon Scraper to your existing tools and workflows:

- [**Google Sheets**](https://apify.com/integrations/google-sheets) — Export scraped data directly to Google Sheets.
- [**Zapier**](https://apify.com/integrations/zapier) — Trigger actions in 5,000+ apps when new data is scraped.
- [**Make (Integromat)**](https://apify.com/integrations/make) — Build automated workflows with scraped Amazon data.
- [**Slack**](https://apify.com/integrations/slack) — Get notified when prices drop below a threshold.
- [**Webhooks**](https://docs.apify.com/platform/integrations/webhooks) — Send data to your own API endpoint after each run.
- [**Apify API**](https://docs.apify.com/api/v2) — Programmatically start runs and retrieve results.
- [**Amazon → Google Sheets price tracker**](https://apify.com/integrations/google-sheets) — Schedule daily runs and auto-append results to a spreadsheet. Build a price history dashboard without writing code.
- [**Amazon → Slack deal alerts**](https://apify.com/integrations/slack) — Get a Slack message when a product drops below your target price. Combine with Zapier filters to set per-product thresholds.

### API usage

Start the actor programmatically and read the default dataset from the Apify API.

**Node.js:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('automation-lab/amazon-scraper').call({
    searchQueries: ['laptop'],
    marketplace: 'US',
    maxProductsPerSearch: 100,
    maxSearchPages: 3,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_API_TOKEN')

run = client.actor('automation-lab/amazon-scraper').call(run_input={
    'searchQueries': ['laptop'],
    'marketplace': 'US',
    'maxProductsPerSearch': 100,
    'maxSearchPages': 3,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

**cURL:**

```bash
curl "https://api.apify.com/v2/acts/automation-lab~amazon-scraper/runs" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "searchQueries": ["laptop"],
    "marketplace": "US",
    "maxProductsPerSearch": 50
  }'
```

### Use with AI agents via MCP

Amazon Scraper is available as a tool for AI assistants that support the [Model Context Protocol (MCP)](https://docs.apify.com/platform/integrations/mcp).

#### Setup for Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/amazon-scraper"
```

#### Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com?tools=automation-lab/amazon-scraper"
        }
    }
}
```

#### Example prompts

Once connected, try asking your AI assistant:

- "Search Amazon for wireless headphones under $50 and get the top 20 results"
- "Get product details and reviews for this Amazon URL"
- "Compare prices of MacBook Air across Amazon marketplaces"

Learn more in the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

### Is it legal to scrape Amazon?

Scraping publicly available Amazon product data is generally considered legal. The landmark *hiQ Labs v. LinkedIn* ruling confirmed that scraping public data does not violate the Computer Fraud and Abuse Act. Amazon product listings, prices, and reviews are publicly visible to anyone with a browser.

Key points:

- Only publicly available product data is collected
- No login credentials or private accounts are accessed
- The scraper respects rate limits to avoid overloading servers
- Extracted data should be used responsibly and in compliance with applicable laws

Always review Amazon's Terms of Service and consult legal counsel if you plan to use scraped data commercially. For more details, see [Apify's guide on web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

### FAQ

**How many products can I scrape per run?**
Up to 1,000 products per search keyword (20 pages × ~50 products per page). You can run multiple keywords in a single run.

**How fast is the scraper?**
Each search page takes about 3-5 seconds. A full 20-page search (~800 products) typically completes in 1-2 minutes.

**Which Amazon marketplaces are supported?**
US, UK, Germany, France, Italy, Spain, Canada, Japan, India, and Australia. The scraper automatically sets the correct proxy country and currency for each marketplace.

**Can I get product reviews?**
The scraper returns the average rating and total review count for each product. Individual review text extraction is planned for a future update.

**Why are some fields empty?**
Fields like `brand` and `seller` may be empty for certain products in search results. This is a limitation of Amazon's search layout — these fields are more consistently available on product detail pages.

**Why is the price null for some products?**
Some products show "See all buying options" instead of a direct price. This is Amazon's behavior for products with multiple seller options or variable pricing.

**The scraper is returning fewer products than expected. What can I do?**
Amazon occasionally serves CAPTCHAs or empty pages under heavy load. Try increasing `maxRequestRetries` to 7-10. If you consistently get low counts, use more specific keywords or reduce concurrency by running fewer search queries per run.

**Can I scrape a specific Amazon product page by URL?**
This scraper focuses on search results. For individual product page scraping (detailed specs, Q\&A, full review text), check the Apify Store for dedicated Amazon product detail scrapers.

### How do I monitor Amazon prices automatically?

To track Amazon prices over time, schedule the scraper to run on a recurring interval using [Apify Schedules](https://docs.apify.com/platform/schedules). Set up a daily or hourly cron and pipe results into Google Sheets or a database. Each run captures the current price for every product, giving you a timestamped history you can query to detect drops or spikes.

A practical setup: create a schedule that runs every morning, export results to a Google Sheet via the Apify–Google Sheets integration, and use a Zapier filter to send a Slack notification whenever a product's `price` falls below a threshold you define. This takes under 10 minutes to configure with no code.

### Can I scrape Amazon product prices across multiple marketplaces at once?

Yes. Each run supports one marketplace at a time, but you can queue runs for multiple marketplaces in parallel using the Apify API. For example, run the same keyword query against the US, UK, and DE marketplaces simultaneously, then merge the resulting datasets to compare prices in USD, GBP, and EUR side by side.

The scraper automatically sets the correct proxy country and currency for each marketplace, so you get locally accurate prices — not redirected international ones. This makes cross-marketplace price comparison or arbitrage research straightforward without any manual proxy configuration.

### What is the difference between scraping Amazon search results vs product pages?

This scraper targets **search results pages** — the listings grid you see when you type a keyword into Amazon's search bar. Each result includes the price, rating, review count, Prime badge, and thumbnail shown in the search view.

**Product detail pages** (individual ASIN pages) contain additional data: full product descriptions, bullet-point features, Q\&A sections, individual review text, and detailed specifications. If you need that level of detail, search the Apify Store for a dedicated Amazon product detail scraper. For price monitoring, competitor research, and category overviews, search results scraping is typically faster and more cost-effective.

### How do I find profitable products for dropshipping using Amazon data?

Dropshipping and retail arbitrage research with this scraper typically follows this workflow:

1. Run searches for broad product categories (e.g., "kitchen gadgets under $30") across multiple Amazon marketplaces.
2. Filter results where `listPrice` significantly exceeds `price` — large discounts indicate demand but also signal competition.
3. Cross-reference `reviewCount` and `rating` to identify products with strong social proof but manageable review velocity (hard to compete if a product has 50,000 reviews; a sweet spot is 500–5,000).
4. Flag products with `isPrime: false` — non-Prime items often have weaker competition and higher margin potential for FBA sellers who can offer Prime shipping.
5. Export to a spreadsheet and sort by `pricePerUnit` or margin calculations to build your shortlist.

Combine with the [Walmart Scraper](https://apify.com/automation-lab/walmart-scraper) to compare Amazon prices against Walmart for arbitrage gaps.

### Why is Amazon data sometimes incomplete or blocked?

Amazon actively defends against automated data collection. Common reasons for incomplete data:

- **CAPTCHA pages** — Amazon serves challenges during high-traffic periods or when a proxy IP is flagged. The scraper retries automatically with a fresh proxy, but some requests may still fail. Increasing `maxRequestRetries` to 7–10 reduces this.
- **"See all buying options" prices** — Some products list multiple sellers and don't show a single price in search results. The `price` field will be `null` for these. This is Amazon's design, not a scraper limitation.
- **Empty `brand` or `seller` fields** — These fields are inconsistently included in Amazon's search result HTML. They're more reliably available on individual product pages.
- **Marketplace-specific layouts** — Non-US marketplaces occasionally serve different HTML structures. If results look sparse on a specific marketplace, try a fresh run or a more specific keyword.

### Related actors

- [Walmart Scraper](https://apify.com/automation-lab/walmart-scraper) — Scrape Walmart product data, prices, and reviews.
- [eBay Scraper](https://apify.com/automation-lab/ebay-scraper) — Extract eBay listings, prices, and seller information.
- [Etsy Scraper](https://apify.com/automation-lab/etsy-scraper) — Scrape Etsy product listings, seller data, and shop reviews.
- [Craigslist Scraper](https://apify.com/automation-lab/craigslist-scraper) — Scrape Craigslist listings by keyword and city.
- [Target Scraper](https://apify.com/automation-lab/target-scraper) — Scrape Target product data and pricing.
- [Shopify Scraper](https://apify.com/automation-lab/shopify-scraper) — Extract products from any Shopify store.

# Actor input Schema

## `searchQueries` (type: `array`):

Search Amazon for these keywords. Each keyword runs a separate search. Example: laptop stand, wireless earbuds, coffee grinder.

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

Which Amazon marketplace to scrape. Proxy country is set automatically.

## `maxProductsPerSearch` (type: `integer`):

Maximum number of product records to return per search keyword.

## `maxSearchPages` (type: `integer`):

Maximum search result pages to scrape per keyword. Amazon shows ~16-48 products per page.

## `sort` (type: `string`):

Sort order for Amazon search results.

## `maxRequestRetries` (type: `integer`):

Number of retry attempts for failed HTTP requests. Increase only if Amazon pages are intermittently timing out.

## Actor input object example

```json
{
  "searchQueries": [
    "laptop"
  ],
  "marketplace": "US",
  "maxProductsPerSearch": 10,
  "maxSearchPages": 1,
  "sort": "relevance",
  "maxRequestRetries": 5
}
```

# Actor output Schema

## `overview` (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 = {
    "searchQueries": [
        "laptop"
    ],
    "maxProductsPerSearch": 10,
    "maxSearchPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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 = {
    "searchQueries": ["laptop"],
    "maxProductsPerSearch": 10,
    "maxSearchPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/amazon-scraper").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 '{
  "searchQueries": [
    "laptop"
  ],
  "maxProductsPerSearch": 10,
  "maxSearchPages": 1
}' |
apify call automation-lab/amazon-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/amazon-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Amazon Scraper",
        "description": "Scrape Amazon search results for price monitoring: current/list prices, ratings, reviews, seller info, Prime status, availability, and images across 10 marketplaces. Export to JSON, CSV, Excel.",
        "version": "0.1",
        "x-build-id": "xY4yR29jFqzirvqmR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~amazon-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-amazon-scraper",
                "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/automation-lab~amazon-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-amazon-scraper",
                "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/automation-lab~amazon-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-amazon-scraper",
                "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": {
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "Search Amazon for these keywords. Each keyword runs a separate search. Example: laptop stand, wireless earbuds, coffee grinder.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "marketplace": {
                        "title": "Amazon Marketplace",
                        "enum": [
                            "US",
                            "UK",
                            "DE",
                            "FR",
                            "IT",
                            "ES",
                            "CA",
                            "JP",
                            "IN",
                            "AU"
                        ],
                        "type": "string",
                        "description": "Which Amazon marketplace to scrape. Proxy country is set automatically.",
                        "default": "US"
                    },
                    "maxProductsPerSearch": {
                        "title": "Max products per search (items)",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of product records to return per search keyword.",
                        "default": 100
                    },
                    "maxSearchPages": {
                        "title": "Max search pages per keyword (pages)",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum search result pages to scrape per keyword. Amazon shows ~16-48 products per page.",
                        "default": 5
                    },
                    "sort": {
                        "title": "Sort Order",
                        "enum": [
                            "relevance",
                            "price_low",
                            "price_high",
                            "avg_rating",
                            "newest"
                        ],
                        "type": "string",
                        "description": "Sort order for Amazon search results.",
                        "default": "relevance"
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries (attempts)",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of retry attempts for failed HTTP requests. Increase only if Amazon pages are intermittently timing out.",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
