# Amazon Buy Box & Seller Offers Tracker API (`clearpath/amazon-buybox-api`) Actor

Get all Amazon seller offers per ASIN with Buy Box winner, prices, FBA status, and stock data. Tracks price changes, buybox rotations, and new sellers across amazon.com, .de, .co.uk, .fr, .it, .es, .co.jp, .ca. Perfect for repricing and analytics.

- **URL**: https://apify.com/clearpath/amazon-buybox-api.md
- **Developed by:** [ClearPath](https://apify.com/clearpath) (community)
- **Categories:** Developer tools, Automation, E-commerce
- **Features:** Limited permissions
- **Stats:** 34 total users, 15 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 offers

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 Buybox API | Track Seller Offers and Price Changes Across 8 Domains

[![Price changes. New sellers. Buy Box winners.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/amazon-buybox-api-readme-hero-v1.png)](https://console.apify.com/actors/tzz929FHne71wIJr2/input)

From <strong>Clearpath</strong>, creators of <a href="https://apify.com/clearpath/shop-by-shopify-product-scraper">Shopify Product Scraper</a>, <a href="https://apify.com/clearpath/coles-scraper">Coles Scraper</a> and <a href="https://apify.com/clearpath/woolworths-scraper">Woolworths Scraper</a>. Product, seller and store-level data from the same team.

### Why choose this actor?

<strong>See exactly how seller prices changed.</strong> Repeated runs return the previous price, current price and difference for matching offers. Find price drops and increases directly in your exported data.

<strong>Track new competitors and Buy Box changes.</strong> Identify newly appearing sellers and changes to the featured seller, with the previous Buy Box winner included. The first run establishes your baseline; later runs reveal changes.

<strong>Keep the offer details that explain the price.</strong> Compare seller names, item conditions, fulfillment by Amazon and ships-from information alongside prices. Collect available offers across eight Amazon markets, with an optional per-product limit.

<a href="https://console.apify.com/actors/tzz929FHne71wIJr2/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/amazon-buybox-api-readme-cta-v1.svg" width="240" height="48" alt="Track your products"/></a>

### Quick start

Start with one Amazon product and collect its available seller offers:

```json
{
  "productUrls": [
    "B0D1XD1ZV3"
  ],
  "amazonDomain": "amazon.com",
  "condition": "all",
  "maxOffersPerProduct": 0
}
```

<a href="https://console.apify.com/actors/tzz929FHne71wIJr2/input">Open actor input</a> and replace the ASIN with your product. Run the same product and market again, or schedule recurring runs, to compare changes. Keep the condition filter consistent. <code>maxOffersPerProduct: 0</code> removes the optional offer limit. Export JSON, CSV or Excel. The hero uses a historical offer example; prices change.

<table>
<tr><td style="padding:10px 14px;background:#FF9900;border:none;border-radius:4px 4px 0 0"><span style="color:#302112;font-size:14px;font-weight:700">Clearpath Retail</span></td></tr>
<tr><td style="padding:6px;border:1px solid #B8CBC9;border-top:none;border-radius:0 0 4px 4px;background:#FFF3E3">
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #B8CBC9;border-radius:4px;background:#FFE4BF"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-tzz929FHne71wIJr2-GmGLY8fUrj-amazon-buybox-api-logo.jpg" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/clearpath/amazon-buybox-api" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Amazon Buy Box</a></span><br><span style="color:#4B5554;font-size:12px">&#10148; You are here</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #B8CBC9;border-radius:4px;background:#FFF3E3"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-MPAoaB7AdJhxbD9ar-G1weGQ6sbE-home-depot-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/clearpath/homedepot-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Home Depot</a></span><br><span style="color:#4B5554;font-size:12px">US prices, stock, aisle &amp; bay</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #B8CBC9;border-radius:4px;background:#FFF3E3"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-FzxNShGGntfilAEDe-9OiAyL7bAA-coles-scraper-icon-v1.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/clearpath/coles-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Coles</a></span><br><span style="color:#4B5554;font-size:12px">Australian prices and store stock</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #B8CBC9;border-radius:4px;background:#FFF3E3"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-cfmAVd7XDm7dWNSPg-RS0c2sB7Ol-woolworths-scraper-icon-v3.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/clearpath/woolworths-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Woolworths AU</a></span><br><span style="color:#4B5554;font-size:12px">Australian prices and store stock</span></span>
<span style="display:inline-block;vertical-align:top;margin:4px;padding:8px 12px;border:1px solid #B8CBC9;border-radius:4px;background:#FFF3E3"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-McKKbD3dnz0dT1zQx-bai17tPTHH-icon-512.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/clearpath/idealo-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">idealo</a></span><br><span style="color:#4B5554;font-size:12px">European offers and price history</span></span>
</td></tr>
</table>

Also from Clearpath: [Shopify Products](https://apify.com/clearpath/shop-by-shopify-product-scraper) and [Shopify Store Leads](https://apify.com/clearpath/shopify-store-leads).

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
clearpath/amazon-buybox-api on Apify. Call: ApifyClient("TOKEN").actor("clearpath/amazon-buybox-api").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: productUrls (array of strings, required), amazonDomain (string, default "amazon.com"), condition (string, default "all"). Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/clearpath~amazon-buybox-api/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Pricing: $2.99 per 1,000 exported offers; platform usage included. Get token: https://console.apify.com/account/integrations
```

### Pricing

**Offer charges: $2.99 per 1,000 exported offers.** Platform usage is included. No monthly subscription.

Each seller offer exported counts once, including offers returned by repeated monitoring runs. All 8 Amazon domains and change tracking are included.

Set your maximum run budget in Apify Console to control spending. The Actor stops when the remaining budget cannot cover another offer.

### What Data You Get

Each offer in the dataset includes:

- **Price data** — current price, original/list price, currency, price delta vs last run
- **Seller info** — seller name, seller ID, ships-from location, FBA status
- **Buybox status** — whether this offer holds the buybox, and whether the winner changed
- **Product context** — ASIN, condition (New, Used - Like New, Refurbished, etc.), total offer count
- **Change tracking** — price changed flag, previous price, new seller flag, first-seen timestamp

### How Amazon Buybox Monitoring Works

1. **First run** — collects all offers and saves a snapshot per ASIN
2. **Subsequent runs** — compares current offers against the saved snapshot
3. **Change detection** — flags price changes (with delta), new sellers, and buybox winner switches
4. **Per-offer granularity** — tracks each seller's offer independently, even when a seller has multiple offers at different conditions

Schedule runs hourly, daily, or weekly depending on how closely you need to track competition.

### Supported Amazon Domains

| Domain | Country | Currency |
|--------|---------|----------|
| amazon.com | United States | USD ($) |
| amazon.de | Germany | EUR (€) |
| amazon.fr | France | EUR (€) |
| amazon.co.uk | United Kingdom | GBP (£) |
| amazon.it | Italy | EUR (€) |
| amazon.es | Spain | EUR (€) |
| amazon.co.jp | Japan | JPY (¥) |
| amazon.ca | Canada | CAD ($) |

Mix domains freely in one run — pass URLs from different Amazon sites and each product is fetched with the correct locale and proxy.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `productUrls` | string\[] | Yes | — | Amazon product URLs or bare ASINs. Domain auto-detected from URLs. |
| `amazonDomain` | enum | No | amazon.com | Default domain for bare ASINs. Ignored when URLs contain a domain. |
| `condition` | enum | No | all | Filter offers by condition: all, new, used, usedLikeNew, usedVeryGood, usedGood, usedAcceptable, collectible, refurbished. |
| `maxOffersPerProduct` | integer | No | 0 | Max offers per ASIN. 0 = all offers. |
| `proxyConfiguration` | object | No | Apify Residential | Proxy country auto-set from domain (.de → DE, .co.jp → JP). |

### Quick Start

#### Single product

```json
{
    "productUrls": ["B0DZZWMB2L"]
}
```

#### Multiple products across domains

```json
{
    "productUrls": [
        "https://www.amazon.com/dp/B0DZZWMB2L",
        "https://www.amazon.de/dp/B0D1XD1ZV3",
        "https://www.amazon.co.jp/dp/B09LCHH618"
    ],
    "condition": "new",
    "maxOffersPerProduct": 10
}
```

#### Bare ASINs on a specific domain

```json
{
    "productUrls": ["B0DZZWMB2L", "B0D1XD1ZV3", "B07ZPKN6YR"],
    "amazonDomain": "amazon.de",
    "condition": "all"
}
```

### Output

#### Offer fields

```json
{
    "asin": "B0DZZWMB2L",
    "condition": "New",
    "price": 1399.99,
    "originalPrice": 1499.99,
    "currency": "$",
    "sellerName": "Amazon.com",
    "sellerId": "ATVPDKIKX0DER",
    "shipsFrom": "Amazon.com",
    "isBuyboxWinner": true,
    "isFBA": true,
    "offerIndex": 0,
    "maxQuantity": 2,
    "offerId": "h%2F9gUZFb...",
    "totalOffersForProduct": 18,
    "amazonDomain": "amazon.com",
    "scrapedAt": "2026-02-27T12:43:36Z"
}
```

#### Monitor fields (2nd+ run)

On scheduled runs, every offer includes change tracking:

```json
{
    "priceChanged": true,
    "previousPrice": 1499.99,
    "priceDelta": -100.0,
    "buyboxWinnerChanged": false,
    "previousBuyboxWinner": "Amazon.com",
    "isNewSeller": false,
    "firstSeenAt": "2026-02-25T08:00:00Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `priceChanged` | boolean | Whether this seller's price changed since last run |
| `previousPrice` | number | Last known price for this seller + condition |
| `priceDelta` | number | Price difference. Negative = price drop. |
| `buyboxWinnerChanged` | boolean | Whether the buybox winner is a different seller |
| `previousBuyboxWinner` | string | Seller name of the previous buybox holder |
| `isNewSeller` | boolean | First time this seller appears for this ASIN |
| `firstSeenAt` | string | ISO timestamp when the seller was first observed |

### Use Cases

#### For Amazon Sellers

- **Track competitor pricing** — monitor every seller on your listing, detect undercuts within hours
- **Buybox win rate** — log buybox winner changes over time to understand rotation patterns
- **Repricer validation** — verify your repricing tool is working by comparing expected vs actual prices

#### For E-commerce Analysts

- **Cross-market pricing** — compare the same ASIN across US, EU, UK, and JP simultaneously
- **Seller landscape** — identify how many sellers compete per product, FBA vs FBM distribution
- **Price history** — schedule daily runs to build a price trend dataset

#### For Arbitrage and Resale

- **Price gap detection** — spot products priced differently across Amazon domains
- **New seller alerts** — detect when new sellers enter a listing (often signals supply changes)
- **Condition-based analysis** — track used/refurbished pricing separately from new offers

### How to Extract Amazon Buybox Data with Python

```python
from apify_client import ApifyClient

client = ApifyClient("your_api_token")

run = client.actor("clearpath/amazon-buybox-api").call(run_input={
    "productUrls": ["B0DZZWMB2L", "B0D1XD1ZV3"],
    "condition": "new"
})

for offer in client.dataset(run["defaultDatasetId"]).iterate_items():
    if offer["isBuyboxWinner"]:
        print(f"{offer['asin']}: {offer['sellerName']} @ {offer['currency']}{offer['price']}")
```

### How to Extract Amazon Buybox Data with JavaScript

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

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

const run = await client.actor('clearpath/amazon-buybox-api').call({
    productUrls: ['B0DZZWMB2L', 'B0D1XD1ZV3'],
    condition: 'new',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.filter(i => i.isBuyboxWinner).forEach(offer => {
    console.log(`${offer.asin}: ${offer.sellerName} @ ${offer.currency}${offer.price}`);
});
```

### Advanced Usage

#### Monitor buybox changes on a schedule

Set up a daily schedule in the Apify Console. On each run, the Actor loads the previous state and enriches every offer with change flags. Filter the dataset for `buyboxWinnerChanged: true` to see only products where the winner shifted.

```json
{
    "productUrls": ["B0DZZWMB2L", "B0D1XD1ZV3", "B0CL61F39H"],
    "condition": "new"
}
```

#### Filter by condition to track used market

```json
{
    "productUrls": ["B0DZZWMB2L"],
    "condition": "usedLikeNew"
}
```

#### Cap offers per product

When a listing has 50+ sellers and you only need the top offers:

```json
{
    "productUrls": ["B0DZZWMB2L"],
    "maxOffersPerProduct": 5
}
```

### Data Export

Export results from the Apify Console or API in:

- **JSON** — structured data for programmatic use
- **CSV** — spreadsheet analysis and reporting
- **Excel** — pivot tables, charting, dashboards

### Proxy Configuration

The Actor uses residential proxies by default. Proxy country is auto-matched to the Amazon domain — .de routes through Germany, .co.jp through Japan, etc.

Default configuration (recommended):

```json
{
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### FAQ

**How many products can I process per run?**
No limit. Pass as many ASINs or URLs as you need. Each product is processed sequentially.

**How many offers does it return per product?**
All of them by default. Amazon shows up to 10 offers per page; the Actor paginates through all pages automatically. Use `maxOffersPerProduct` to cap if needed.

**Does it work for products with no buybox?**
Yes. If no buybox winner exists, all offers are returned with `isBuyboxWinner: false`.

**What happens if a product has zero offers?**
It's skipped gracefully. No error, no empty record in the dataset.

**Are prices in local currency?**
Yes. amazon.de returns EUR, amazon.co.jp returns JPY, amazon.co.uk returns GBP, etc. The `currency` field tells you which.

**How does change tracking work?**
The Actor stores a snapshot after each run in a named key-value store. On the next run, it compares current offers against the snapshot by offer ID. Only real changes are flagged — same data across runs produces `priceChanged: false` for every offer.

**Is condition text normalized across languages?**
Yes. German "Neu", French "Neuf", Japanese "新品" are all normalized to "New". Used sub-conditions are normalized too (e.g., "Usato - Come nuovo" becomes "Used - Like New").

**Can I mix domains in one run?**
Yes. Pass full URLs from different Amazon sites. Each URL is processed with the correct locale, currency, and proxy country.

### Support

- **Email**: max@mapa.slmail.me
- **Bugs and feature requests**: Issues tab on this Actor's page

# Actor input Schema

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

Amazon product URLs or ASINs. Accepts full URLs (https://www.amazon.de/dp/B0DZZWMB2L) or bare ASINs (B0DZZWMB2L). Domain is auto-detected from URLs.

## `amazonDomain` (type: `string`):

Default Amazon domain for bare ASINs. Ignored when input contains full URLs (domain extracted automatically).

## `condition` (type: `string`):

Filter offers by product condition

## `maxOffersPerProduct` (type: `integer`):

Maximum number of offers to collect per ASIN. 0 = collect all offers.

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

Proxy country is auto-set based on Amazon domain (.de → DE, .co.jp → JP, etc.)

## Actor input object example

```json
{
  "productUrls": [
    "https://www.amazon.com/dp/B0DZZWMB2L",
    "B0D1XD1ZV3"
  ],
  "amazonDomain": "amazon.com",
  "condition": "all",
  "maxOffersPerProduct": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("clearpath/amazon-buybox-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "productUrls": ["B0DZZWMB2L"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("clearpath/amazon-buybox-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "productUrls": [
    "B0DZZWMB2L"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call clearpath/amazon-buybox-api --silent --output-dataset

```

## MCP server setup

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

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/tzz929FHne71wIJr2/builds/JupqQchhMq7VgTI3g/openapi.json
