# Amazon Price Drop Tracker: Prices, Deals & Best Sellers Rank (`wellbuilt_zythem/amazon-price-drops`) Actor

Track Amazon.com products by ASIN, link or search. Price, list price and discount, coupon, rating, bought in past month, Best Sellers Rank, stock and seller. Schedule it: price drops since your last run, lowest price seen, back in stock, and products new to a search.

- **URL**: https://apify.com/wellbuilt_zythem/amazon-price-drops.md
- **Developed by:** [Carlos Escanez](https://apify.com/wellbuilt_zythem) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 products

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/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 Price Drop Tracker: Prices, Deals & Best Sellers Rank

Track **Amazon.com** products by ASIN, product link or search, and schedule it. Every run gives you the price, the list or typical price and Amazon's discount, coupon, rating, number of ratings, "bought in past month", Best Sellers Rank, stock and seller. From the second run on, each product also says whether its **price dropped since your last run**, whether it is at the **lowest price this tracker has seen**, whether it is **back in stock**, and whether it is **new to your search**.

Other Amazon scrapers give you a snapshot. This one remembers.

### See it run

https://youtu.be/Dje1Wk6oBu8

### What you can do with it

- **Deal feeds**: schedule a search every few hours with *Only changes since the last run* and get only the products that just dropped, ready for a deals site, Telegram channel or newsletter.
- **Competitor prices**: track your competitors' ASINs daily and see who cut prices, by how much, and who ran out of stock.
- **Brand monitoring**: check that resellers keep your products at the right price and spot new sellers in your category.
- **Market research**: Best Sellers Rank, ratings and "bought in past month" for every product in a search.

### Input

```json
{
  "products": ["B0D8LXRHQ8", "https://www.amazon.com/dp/B07Z8G97PY"],
  "searches": ["air fryer"],
  "pagesPerSearch": 1,
  "includeDetails": false,
  "onlyChanges": false,
  "priceDropThresholdPct": 5
}
```

- **Products**: ASINs or amazon.com product links. Their product page is always opened.
- **Searches**: keywords, or an amazon.com search link with your category and filters already set. Each result page has 16 to 48 products.
- **Open each search result's product page**: adds Best Sellers Rank, stock, seller, brand and categories to search results, at one extra request per product.
- **Tracker memory name**: the memory of prices lives in a key-value store with this name. Use one name per list you track and keep it the same on every run; the schedule does the rest.

### Output

| Field | From | Notes |
|---|---|---|
| `price`, `currency` | search and product page | the price Amazon shows to a US visitor |
| `listPrice`, `listPriceLabel`, `amazonDiscountPct` | search and product page | `list` (list price) or `typical` (Amazon's typical price) |
| `coupon` | search and product page | when Amazon shows one |
| `rating`, `ratingsCount` | search and product page | |
| `boughtPastMonth` | search and product page | Amazon rounds it down ("30K+"), so it is a minimum |
| `badges`, `isSponsored`, `searchPosition` | search | Amazon's Choice, Best Seller, Overall Pick |
| `otherOffersFrom`, `otherOffersCount` | search | "More Buying Choices" |
| `bestSellersRank`, `bestSellersCategory`, `bestSellersRanks` | product page | main rank and sub-category ranks |
| `availability`, `inStock`, `stockLeft` | product page | `stockLeft` only when Amazon says "Only 3 left" |
| `brand`, `soldBy`, `shipsFrom`, `isSoldByAmazon` | product page | |
| `categories`, `hasVariants`, `image` | product page | |
| `previousPrice`, `priceChange`, `priceChangePct` | memory | from the second run of a tracker |
| `lowestPriceSeen`, `lowestPriceSeenAt`, `isLowestPriceSeen` | memory | lowest price **this tracker** has seen, not Amazon's all-time low |
| `isNewSinceLastRun`, `firstSeenAt` | memory | products new to your searches |
| `isBackInStock` | memory | out of stock last run, in stock now (needs product pages) |

Rows have `status: "ok"`. A product Amazon would not show after three tries comes back as `status: "not_read"` with the reason, and a removed product as `not_found`. **Those rows are not charged.**

#### What this Actor does not deliver

- **Price history from before your first run.** The memory starts with your first run; it does not reconstruct Amazon's past prices.
- **Prices hidden by the brand.** Some products show their price only in the cart; they come back with `priceHidden: true` and no price.
- **Seller phone or email.** Amazon does not publish them.
- **Other Amazon stores** (.co.uk, .de, .es...). Amazon.com only.
- **Reviews text.** Rating and count only.

### Reliability, measured

Measured on 2026-10-17 from Apify without a proxy. Amazon answers some requests with a robot check, at random; the Actor asks again in two later passes and never tries to solve the check. A run of 8 searches with every product page opened delivered **256 products, all 256 with their product page read**, in 11 minutes: 285 requests, 20 of them answered with a robot check and read on a later pass. A product whose page still cannot be read keeps the search data (price, rating, bought in past month) and is marked `detailsRead: false`.

Fill rates on product pages (245 pages, earlier run the same day): price 99 %, rating 99 %, bought in past month 90 %, brand 98 %, seller 100 %, Best Sellers Rank 93 %, categories 98 %, stock 72 %, list or typical price 66 % (only discounted products have one), coupon 8 %.

No proxy is needed. Product pages are limited to 500 per run; pages are read one at a time, about 2 seconds each.

### Pricing

Pay per event:

- `product`: each product row delivered.
- `product_page`: added for each row whose product page was opened.
- Rows not read are free.

### Tips

- Schedule the same input every few hours or daily. The first run builds the memory; drops, lows and new products start from the second run.
- With *Only changes since the last run* on, a run where nothing changed delivers nothing and costs only the start.
- One tracker memory can hold up to 50,000 products.

# Actor input Schema

## `products` (type: `array`):

Amazon.com ASINs or product links, one per line: "B07Z8G97PY" or "https://www.amazon.com/dp/B07Z8G97PY". Each product page is opened for the full details.

## `searches` (type: `array`):

Keywords as you would type them on amazon.com ("air fryer"), or an amazon.com search link with your filters and category already set.

## `pagesPerSearch` (type: `integer`):

Result pages to read per search, 16 to 48 products each. 1 to 20.

## `includeDetails` (type: `boolean`):

Adds Best Sellers Rank, stock, seller, brand and categories to search results. One extra request per product. Product pages are always opened for "Products".

## `maxProductPages` (type: `integer`):

Product pages opened per run, at most 500. Products over the limit are not opened.

## `onlyChanges` (type: `boolean`):

Deliver only products whose price fell at least "Price drop %", products new to your searches, and products back in stock. Off: every product, with the same signals as columns.

## `priceDropThresholdPct` (type: `integer`):

A product counts as a price drop when its price is at least this much lower than in the last run.

## `maxResults` (type: `integer`):

Cap for the run. Empty for no cap.

## `stateStoreName` (type: `string`):

Key-value store that remembers prices between runs. Use one name per list you track and keep it the same every run.

## `resetState` (type: `boolean`):

Start the memory from scratch in this run.

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

Not needed: measured without proxy from Apify. Optional if you prefer your own.

## Actor input object example

```json
{
  "searches": [
    "air fryer"
  ],
  "pagesPerSearch": 1,
  "includeDetails": false,
  "maxProductPages": 200,
  "onlyChanges": false,
  "priceDropThresholdPct": 5,
  "stateStoreName": "amazon-price-drops-memory",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "searches": [
        "air fryer"
    ],
    "pagesPerSearch": 1,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("wellbuilt_zythem/amazon-price-drops").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 = {
    "searches": ["air fryer"],
    "pagesPerSearch": 1,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("wellbuilt_zythem/amazon-price-drops").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 '{
  "searches": [
    "air fryer"
  ],
  "pagesPerSearch": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call wellbuilt_zythem/amazon-price-drops --silent --output-dataset

```

## MCP server setup

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

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/Z50K04Ncc1tDpakd1/builds/UMZGX8ztGULKY0WT8/openapi.json
