Amazon Buy Box Monitor Agent
Pricing
from $20.00 / 1,000 asin changeds
Amazon Buy Box Monitor Agent
Watch ASINs on a schedule. Snapshot Buy Box winner, price, and stock, then emit changed, unchanged, or new verdicts.
Pricing
from $20.00 / 1,000 asin changeds
Rating
0.0
(0)
Developer
Buzzi Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Watch Amazon ASINs on a schedule. Each run snapshots the live Buy Box winner, price, and stock for a deliver-to ZIP, then compares that snapshot to the last one and emits changed, unchanged, or new.
This is the scheduled sister of the one-shot Amazon Buy Box + Offers Agent. Use the offers Actor for a single ASIN check with competing landed-cost rows. Use this monitor when you need Apify Schedules, a named watchlist, and a change verdict on every ASIN.
- Unblocker by default. Amazon.com production runs use Apify Unblocker, not datacenter IPs.
- Deliver-to ZIP. Buy Box, shipping eligibility, and stock follow a real location. Default 92618 (Irvine, CA).
- Change verdicts. Each row includes
previous,current, andchangeType, so you can see whether Amazon or another seller took the box. - Honest pay-per-event. Successful moved or first-seen ASINs charge
asin_changedat $0.02. Successful stable ASINs chargeasin_unchangedat $0.01. Errors and BLOCKED checks are written. They are not billed as those events.
Why use Amazon Buy Box Monitor Agent
Buy Box ownership, price, and stock change by location and over time. A one-off scrape does not tell you who held the box on the last check.
- MAP and retail compliance. Track the live Buy Box owner across scheduled runs, not a catalog list price.
- Third-party sellers. See whether Amazon or another seller took the box since yesterday.
- Agents and automation. Each ASIN is one structured record with
previous,current, andchangeType, so workflows can branch.
Apify Schedules, webhooks, the REST API, and proxy rotation are built in. Save an Actor task once, then run it on a cron.
What data can Amazon Buy Box Monitor Agent extract
| Field | Description |
|---|---|
asin, marketplace, watchlistId, postalCode, productUrl | Identity of the check |
title | Product title when parsed |
fetchedAt | ISO-8601 timestamp |
status | ok, blocked, error, or failed |
changeType | changed, unchanged, or new on success. null on failure |
changedFields | buyBoxSellerId, buyBoxPrice, and/or inStock |
previous | Last persisted Buy Box summary, or null if this ASIN is new |
current | This run's Buy Box summary (buyBoxSellerId, buyBoxSellerName, buyBoxPrice, currency, inStock, and related fields) |
errorCode, errorMessage | Typed failure. null on success |
How to run the first Buy Box snapshot
Give the Actor ASINs or /dp/ URLs. For each marketplace × ASIN it applies deliver-to cookies for the postal code, fetches the product page, parses Buy Box seller, price, and stock, compares against the named watchlist snapshot, then writes a dataset row with previous, current, and changeType. Failed checks are written with a typed error (BLOCKED, RATE_LIMIT, PARSE, NETWORK) and are never billed as asin_changed or asin_unchanged.
- Open the Actor in Apify Console.
- Paste ASINs or product URLs. Keep marketplace
com, postal code92618, andmonitorModeon. - Set a stable
watchlistId(defaultdefault). You will reuse this ID on the schedule. - Leave
proxyGroupon UNBLOCKER unless you need sticky residential IPs for ZIP cookies. - Start the run. The first successful check for each ASIN is
changeType: newand writes the baseline snapshot.
How to schedule Amazon Buy Box watches
State lives in the named key-value store (buybox-monitor-{watchlistId}), not in the run dataset. Deleting that store resets every ASIN to changeType: new.
- Run the Actor once in Console with your ASINs, marketplace, ZIP 92618,
monitorModeon, and a stablewatchlistId. Confirm the first run wrote baselines (changeType: new). - Open Schedules and click Create new. Name it, for example
buybox-watch-daily. - Set the timezone (DST is supported). Example cron:
0 8 * * *for every day at 08:00. - Click Add and select this Actor. Reuse the same input JSON, especially the same
watchlistId. Different catalogs need different IDs so stores do not collide. - Optional: save an Actor task with that input, then schedule the task instead of pasting JSON on the schedule.
- Enable the schedule. The minimum interval is 10 seconds. Hourly or daily is enough for Buy Box watches.
- Optional: add a webhook on the task for
SUCCEEDEDso agents pull dataset items only when the run finished.
How much does Amazon Buy Box monitoring cost
Pay-per-event charges apply on successful checks only:
| Event | When it fires | Price | When it does not fire |
|---|---|---|---|
asin_changed | Successful check and Buy Box seller, price, or stock moved, or first snapshot (new) | $0.02 | Errors. BLOCKED. dryRun: true |
asin_unchanged | Successful check and seller, price, and stock are stable | $0.01 | Errors. BLOCKED. dryRun: true |
See the Store pricing tab for current list prices and platform start events.
onlyChanges only filters dataset output. A stable successful check still charges asin_unchanged and still overwrites the snapshot.
dryRun: true parses, writes items, and persists snapshots without charging asin_changed or asin_unchanged.
Input
See the input tab for full configuration options.
| Field | Type | Default | Notes |
|---|---|---|---|
asins | string[] | 10-character ASINs | |
productUrls | string[] | Amazon URLs. ASIN extracted from /dp/ and related paths | |
marketplace | com | co.uk | de | com | Storefront TLD |
postalCode | string | 92618 | Deliver-to ZIP or postal code. Alias: zipCode |
monitorMode | boolean | true | Compare to the last snapshot and emit verdicts |
watchlistId | string | default | Named snapshot store suffix |
onlyChanges | boolean | false | Skip pushing unchanged rows (still persist and charge) |
proxyGroup | UNBLOCKER | RESIDENTIAL | UNBLOCKER | Production default. Select RESIDENTIAL as a sticky-IP fallback |
dryRun | boolean | false | Write items and snapshots, do not charge |
proxyConfiguration | proxy | widget RESIDENTIAL + US | Console widget. The real default is proxyGroup=UNBLOCKER, which overrides this |
At least one parseable ASIN (from asins or productUrls) is required.
{"asins": ["B014I8SSD0", "B004U3Y8OM"],"marketplace": "com","postalCode": "92618","monitorMode": true,"watchlistId": "default","onlyChanges": false,"proxyGroup": "UNBLOCKER"}
Why postalCode defaults to 92618
Amazon Buy Box, shipping eligibility, and stock copy are location-specific. If deliver-to is unset, the page often still has a title but the Buy Box is missing and availability becomes "cannot be shipped to your selected delivery location". The Actor sets location cookies before /dp/. Default 92618 is Irvine, CA, a US deliver-to example. Use a local postcode for co.uk or de.
Proxy
Amazon.com blocks datacenter and AUTO Apify Proxy groups. Unblocker is the recommended Amazon.com production default. Residential US is a fallback when you need sticky IPs so deliver-to ZIP cookies hold across hops.
Set proxyGroup to UNBLOCKER or RESIDENTIAL. Do not put UNBLOCKER on proxyConfiguration.apifyProxyGroups. That widget field is overridden by proxyGroup.
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. One dataset item per marketplace × ASIN (unless onlyChanges drops a stable row).
{"asin": "B014I8SSD0","marketplace": "com","watchlistId": "default","postalCode": "92618","productUrl": "https://www.amazon.com/dp/B014I8SSD0","title": "Example product","fetchedAt": "2026-09-09T11:00:00.000Z","status": "ok","changeType": "changed","changedFields": ["buyBoxSellerId", "buyBoxPrice"],"previous": {"buyBoxSellerId": "A1F83G8C2ARO7P","buyBoxSellerName": "Amazon.com","buyBoxPrice": 12.99,"currency": "USD","inStock": true},"current": {"buyBoxSellerId": "A3P5ROKL5A1OLE","buyBoxSellerName": "Example 3P Seller","buyBoxPrice": 11.49,"currency": "USD","inStock": true},"errorCode": null,"errorMessage": null}
Each item is JSON with status, typed errorCode, nested previous / current, and changeType. Point a client at the default dataset ({{links.apiDefaultDatasetUrl}}/items) or run the Actor from the API tab. Failed checks remain in the dataset so you can retry only BLOCKED or RATE_LIMIT without being billed for those attempts.
Error codes
| Code | Meaning |
|---|---|
BLOCKED | CAPTCHA, robot check, or automated-access interstitial |
RATE_LIMIT | HTTP 429/503 or throttle copy |
PARSE | HTML loaded but title or Buy Box could not be extracted |
NETWORK | Timeouts, DNS, connection errors, other 4xx/5xx |
Risks and limitations
- Amazon ToS. Scraping Amazon storefronts may violate Amazon's terms. Use this Actor only where you have a lawful basis. This is not an official Amazon API.
- Blocking. Datacenter IPs are frequently CAPTCHA'd. This Actor defaults to Apify Unblocker and retries CAPTCHA or throttle pages with a new session before writing
BLOCKEDorRATE_LIMIT. The Actor does not execute JavaScript. Some A/B Buy Box layouts hydrate late and will surface asPARSE. - Selector drift. Amazon A/B-tests Buy Box markup. Selectors are centralized in the Actor.
- Stock is heuristic.
inStockis derived from availability copy, not warehouse quantity. - Unblocker is not sticky. If deliver-to ZIP does not hold, switch
proxyGrouptoRESIDENTIAL.
FAQ
How is this different from Amazon Buy Box + Offers Agent?
The Amazon Buy Box + Offers Agent is one-shot: Buy Box plus All Offers Display landed-cost rows. This Actor persists snapshots and emits change verdicts for Schedules.
Does onlyChanges skip billing?
No. onlyChanges only filters dataset output. A stable successful check still charges asin_unchanged and still overwrites the snapshot.
What happens on the first scheduled run?
If the watchlist is empty, every successful ASIN is changeType: new and is billed as asin_changed. Later runs compare against that baseline.
How do I test without charges?
Set dryRun: true. The Actor still parses, writes dataset items, and persists snapshots.
Support
Questions, blocks, or feature requests: use the Issues tab. Programmatic runs: see the API tab.
License
Apache-2.0