Amazon Competitor Price Tracker avatar

Amazon Competitor Price Tracker

Pricing

from $20.00 / 1,000 asin trackeds

Go to Apify Store
Amazon Competitor Price Tracker

Amazon Competitor Price Tracker

Track Amazon competitor prices vs your reference ASIN: priceDelta, Buy Box winner, FBA/FBM, stock + webhook alerts on undercut. MCP-ready. 18 marketplaces. $0.020/ASIN.

Pricing

from $20.00 / 1,000 asin trackeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Track Amazon competitor prices for any reference ASIN — Buy Box winner, FBA/FBM, stock, and price-delta — in one schedule-friendly run. Optional webhook alerts on undercut.

What you get

One row per ASIN per run, with the comparison math already done:

FieldMeaning
asinThe product's ASIN
isReferencetrue for the row representing your product
price, currencyCurrent price in marketplace currency
priceDeltacompetitor.price − reference.price (negative = undercut)
priceDeltaPercentSame delta as a percentage of reference price
isUndercuttrue when the competitor is cheaper
isLowesttrue for the cheapest ASIN this run
buyBoxWinnerThe seller currently winning the Buy Box
seller, isFBA, isPrimeMerchant + fulfillment posture
inStock, availabilityWhether you can buy it right now
rating, reviewCountSocial proof gap
scrapedAtISO timestamp — pivot on this for time-series tracking
alertFiredtrue if a webhook fired for this row this run

Schedule it hourly or daily and you have a full price/Buy-Box history at $0.005 per ASIN — no separate database, no Keepa subscription, no fragile spreadsheet.

When to use

  • Repricing. Feed priceDelta into your repricer or a Slack alert.
  • MAP enforcement. Detect resellers selling below your minimum advertised price.
  • Brand monitoring. Watch unauthorized sellers grab your Buy Box.
  • Category research. Auto-discover the top N competitors on a search keyword.
  • Agentic workflows. Claude/GPT can call this every N minutes — input is one ASIN + a list, output is a clean comparison table.

When NOT to use

Pricing

Pay per event + Apify platform usage (compute and proxy at cost). No subscription.

EventPrice
Actor start$0.001
ASIN tracked (per row pushed)$0.020
Alert dispatched (per webhook POST)$0.005

Plus standard Apify platform compute and residential proxy fees (paid directly to Apify).

Typical costs. Reference + 5 competitors = ~$0.121 per run + ~$0.02–0.05 platform usage. 100 ASINs daily for a month ≈ $60–80 all-in. Comparable Keepa premium plans start at $19/mo per ASIN tracked — at 100 ASINs that's $1,900+/mo. We give you raw data feed for ~$70.

Input

Required:

  • referenceAsin — your product's 10-character ASIN (e.g. B0CHWRXH8B).

One of (pick the mode):

  • competitorAsins — manual list of up to 100 competitor ASINs.
  • searchQuery — Amazon search keyword; the top results become competitors.

Optional:

  • country — marketplace code (defaults to US). 18 marketplaces supported: US, UK, DE, FR, CA, ES, IT, JP, AU, IN, MX, BR, NL, SE, PL, TR, AE, SG.
  • maxCompetitors — how many competitors to pull when using searchQuery (default 10, max 50).
  • alertWebhookUrl — HTTPS endpoint that receives a POST when a competitor undercuts.
  • alertUndercutPercent — minimum % undercut to fire an alert (default 5).
  • proxyConfiguration — defaults to Apify Residential (required for Amazon).

Example: track 5 named competitors against your product

{
"referenceAsin": "B0CHWRXH8B",
"competitorAsins": ["B09G9HD6PD", "B0BDHWDR12", "B0BTYCRJSS", "B09JQMJHXY", "B0BDJ7RGQR"],
"country": "US"
}

Example: auto-discover competitors on a keyword

{
"referenceAsin": "B0CHWRXH8B",
"searchQuery": "wireless earbuds noise cancelling",
"maxCompetitors": 15,
"country": "US"
}

Example: alert Slack when undercut by 10%

{
"referenceAsin": "B0CHWRXH8B",
"competitorAsins": ["B09G9HD6PD", "B0BDHWDR12"],
"alertWebhookUrl": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXX",
"alertUndercutPercent": 10
}

Webhook payload (alerts)

When a competitor crosses the undercut threshold, a POST is sent with:

{
"type": "competitor-undercut",
"referenceAsin": "B0CHWRXH8B",
"competitorAsin": "B09G9HD6PD",
"referencePrice": 79.99,
"competitorPrice": 69.99,
"priceDelta": -10.0,
"priceDeltaPercent": -12.5,
"currency": "USD",
"marketplace": "US",
"competitorTitle": "Sony WF-1000XM4 Wireless Earbuds",
"competitorSeller": "Sony Direct",
"competitorUrl": "https://www.amazon.com/dp/B09G9HD6PD",
"threshold": 5,
"triggeredAt": "2026-05-03T19:30:00.000Z"
}

Fire-and-forget: 5-second timeout, 1 retry. Webhook errors never fail the run. Charged $0.002 per successful POST.

Scheduling for time-series

Pair with Apify Scheduler to run hourly or daily. Each run's rows are stamped with scrapedAt, so the dataset becomes a price-history database you can query with the Apify dataset API:

# Pull last 24h of comparison rows
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?clean=true&fields=asin,price,priceDelta,scrapedAt&desc=true&limit=1000"

Code examples

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/amazon-competitor-price-tracker').call({
referenceAsin: 'B0CHWRXH8B',
competitorAsins: ['B09G9HD6PD', 'B0BDHWDR12'],
country: 'US',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const reference = items.find((r) => r.isReference);
const undercutting = items.filter((r) => r.isUndercut);
console.log(`Reference at ${reference.currency} ${reference.price}`);
console.log(`${undercutting.length} competitor(s) undercutting`);

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("khadinakbar/amazon-competitor-price-tracker").call(
run_input={
"referenceAsin": "B0CHWRXH8B",
"searchQuery": "wireless earbuds",
"maxCompetitors": 15,
"country": "US",
}
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
lowest = min((r for r in rows if r.get("price")), key=lambda r: r["price"])
print(f"Lowest price ASIN: {lowest['asin']} @ {lowest['currency']} {lowest['price']}")

MCP / agentic workflow

Once published, the actor is callable via Apify MCP as apify--amazon-competitor-price-tracker. Tool description signals when to use, return shape, and per-call cost — agents can budget-check before calling.

How it works

  1. Fetches the reference ASIN page (CheerioCrawler + Apify Residential proxy, country-matched to the marketplace).
  2. Either fetches each named competitor ASIN, or runs an Amazon search and picks the top N organic (non-Sponsored) ASINs.
  3. Extracts price, list price, currency, Buy Box winner, seller, FBA/Prime, stock, rating, review count.
  4. Computes priceDelta, priceDeltaPercent, isUndercut, isLowest against the reference price.
  5. If a webhook is configured, dispatches alerts for any competitor that undercuts by ≥ threshold.
  6. Pushes one row per ASIN to the dataset and charges $0.005 per row.

Built with Crawlee on apify/actor-node:24. Session pool with cookie persistence + per-request retry/backoff handles Amazon's rate limits and CAPTCHA challenges. Sessions are retired automatically on 403/429/503 or robot-check pages.

FAQ

How accurate is the Buy Box winner? Extracted from #merchant-info / Buy Box DOM. Accurate when the page renders a Buy Box; null when the page only shows "See All Buying Options" (multi-seller without a clear winner).

What about variants? Each ASIN is tracked independently. If you want to compare variants, pass each variant ASIN explicitly in competitorAsins.

How do I export to BigQuery / Snowflake? Use Apify's BigQuery integration or call client.dataset(...).downloadItems('csv') and load via your normal ETL.

Can I track 1000 ASINs in one run? The competitorAsins list is capped at 100 per run for reliability. For larger universes, run multiple actor calls in parallel — Apify charges per row regardless.

What if Amazon blocks? Datacenter proxies are blocked by Amazon — residential is the default and required. The session pool retires on 403/429/503; retries with exponential backoff. If you see persistent failures, check your proxy quota.

Is this Keepa? No. Keepa stores the full price history server-side and gives you a chart UI. This actor gives you the raw deltas + Buy Box state so you can build your own repricing logic, MAP alerts, or dashboards.

This actor scrapes publicly accessible Amazon product pages. You are responsible for ensuring your use case complies with Amazon's Conditions of Use and applicable law in your jurisdiction. Do not use the data to harass sellers, violate antitrust law, or engage in deceptive pricing.