# Amazon Price & Stock Monitor + Bulk Product Scraper (`mojocakes/amazon-price-monitor`) Actor

Track Amazon product prices and stock status and get alerted only when they change — previous price, change amount, and percent change included. Or bulk-extract products by ASIN or search keyword. Never billed for a product we couldn't actually read.

- **URL**: https://apify.com/mojocakes/amazon-price-monitor.md
- **Developed by:** [James Cook](https://apify.com/mojocakes) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 product scrapeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Price & Stock Monitor + Bulk Product Scraper

Track **Amazon product prices and stock status and get alerted only when they change** — previous price, change amount, and percent change included, not just a snapshot. Or use it as a plain bulk product scraper by ASIN or search keyword. Built for repricing tools, deal-alert feeds, market research, and inventory monitoring.

### What it does

- **Monitor mode:** give it a list of ASINs (or search keywords), schedule it, and get back only the products whose price or stock status actually changed since the last run — with `previousPrice`, `priceDelta`, `percentChange`, and `availabilityChanged` on every changed record. The first run for a given ASIN always returns it, to set the baseline.
- **Bulk mode:** turn monitor mode off and every successfully-read product comes back every run — full product data by ASIN or search keyword, no page-count limit.
- Title, price (with ISO currency code), rating, review count, stock status, Best Sellers Rank, and main image, per product.
- **You only pay for products we could actually read.** A blocked request, a nonexistent ASIN on that marketplace, or a page we couldn't parse a price or stock status from is never billed — it's reported separately instead.
- Ten marketplaces supported (US, UK, DE, FR, IT, ES, CA, AU, JP, IN), each with the matching proxy country so prices come back in the marketplace's own currency rather than a cross-border conversion.

### Output example

```json
{
  "asin": "B088NRLMPV",
  "domain": "www.amazon.com",
  "url": "https://www.amazon.com/dp/B088NRLMPV",
  "title": "Anker USB C to USB C Cable, 60W Fast Charging Cable (2-Pack, 6 ft, Black)",
  "price": 9.99,
  "currency": "USD",
  "priceDisplay": "$9.99",
  "rating": 4.7,
  "reviewsCount": 87379,
  "availability": "In Stock",
  "inStock": true,
  "bestSellerRanks": [{ "rank": 1, "category": "USB Cables" }],
  "mainImageUrl": "https://m.media-amazon.com/images/I/71IE9dLBduL._AC_SL1500_.jpg",
  "scrapedAt": "2026-08-26T12:00:00.000Z",
  "changed": true,
  "previousPrice": 12.99,
  "priceDelta": -3.0,
  "percentChange": -23.09,
  "availabilityChanged": false,
  "previousInStock": true
}
```

(The last six `changed`/`previous*`/`*Delta` fields only appear in monitor mode.)

### Typical uses

- **Repricing / competitor tracking** — get pinged the moment a tracked ASIN's price moves
- **Deal alerts** — feed price drops into Slack/email/webhook via a schedule + integration
- **Stock monitoring** — know the moment a product comes back in stock
- **Market research** — bulk-pull pricing and rank data across a category by search keyword

### Monitor mode

Enable `monitorMode` and run the actor on a schedule. Each ASIN's price and stock status are remembered per Task; every later run compares against that baseline and returns only what changed. Unchanged products aren't returned and aren't billed.

### Why some products don't come back

Amazon is the hardest anti-bot target in this portfolio — a pre-build measurement found automatic/datacenter proxy blocked **94.5%** of requests, which is why this actor requires residential proxy (9–18% block rate, in line with what comparable actors report at scale). A blocked or unreadable product isn't silently dropped: it's written to the run's `FAILED_ASINS` key-value record with a reason (`blocked_after_retries`, `not_found_on_marketplace`, `no_price_or_availability_data`, …) — and none of those are ever billed.

### Fair use

This actor collects only public product-listing data — title, price, rating, availability, rank, and the main image. **No reviews, no reviewer data, and no seller contact information are collected.** No login, no account, no bypassing anything beyond ordinary rate-limiting via proxy rotation. Respect Amazon's terms and local law for your use case.

# Actor input Schema

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

One or more 10-character Amazon ASINs to track (e.g. `B088NRLMPV`). Combine with searchKeywords, or use either alone.

## `searchKeywords` (type: `array`):

Discover ASINs from Amazon search results for these terms, in addition to any listed above.

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

Which Amazon site to use. Also selects the matching proxy country — required for correct native-currency pricing (verified live: a country-mismatched proxy can return cross-border-converted prices instead of the marketplace's own currency).

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

Upper limit on how many ASINs to pull in from each search keyword's results.

## `monitorMode` (type: `boolean`):

When enabled, the actor remembers each ASIN's price and stock status (per Task) and returns only ones that changed since the last run, with the previous price, the change amount, and percent change included. The first run for a given ASIN always returns it, to establish the baseline. When off, every successfully-checked ASIN is returned every run.

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

Proxy settings. Residential is required — a pre-build measurement found datacenter/automatic proxy blocked on this marketplace 94.5% of the time, versus 9–18% on residential.

## Actor input object example

```json
{
  "asins": [
    "B088NRLMPV"
  ],
  "marketplace": "www.amazon.com",
  "maxResultsPerKeyword": 30,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Amazon products found by this run (or only changed ones, in monitor mode).

# 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 = {
    "asins": [
        "B088NRLMPV"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mojocakes/amazon-price-monitor").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 = { "asins": ["B088NRLMPV"] }

# Run the Actor and wait for it to finish
run = client.actor("mojocakes/amazon-price-monitor").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 '{
  "asins": [
    "B088NRLMPV"
  ]
}' |
apify call mojocakes/amazon-price-monitor --silent --output-dataset

```

## MCP server setup

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

```

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/4QfxaxwmARINcphpK/builds/Hm76bqpL7aOVyC4a5/openapi.json
