Amazon Product Scraper: Buy Box, Seller & MAP Monitor avatar

Amazon Product Scraper: Buy Box, Seller & MAP Monitor

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Amazon Product Scraper: Buy Box, Seller & MAP Monitor

Amazon Product Scraper: Buy Box, Seller & MAP Monitor

Amazon Product Scraper monitors product listings, Buy Box data, seller details, prices, and MAP pricing. Extract ASINs, offers, ratings, availability, seller information, and pricing changes for competitor tracking, price monitoring, and e-commerce intelligence.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

2 days ago

Last modified

Share

Amazon Scraper — Extract Products, Buy Box Offers and Sellers

Amazon Buy Box, Seller & MAP Monitor scrapes full Amazon product detail — title, price, images, rating, breadcrumbs, variants, bestseller ranks — and layers a Buy Box / seller / MAP monitor on top: who currently holds the Featured Offer, their fulfillment channel (Amazon retail, FBA, or FBM), how many sellers are competing, whether an unauthorized seller is hijacking the listing, and whether any offer sits below your Minimum Advertised Price. Feed it /dp/ product URLs or /s?... search and category URLs on any Amazon domain. Every run returns typed JSON — no HTML parsing, no regex on your end. This guide covers every input and output field plus three deployment patterns: real-time MAP enforcement, scheduled Buy Box checks, and bulk catalogue builds.

🧭 What Does Amazon Buy Box, Seller & MAP Monitor Do?

Amazon Buy Box, Seller & MAP Monitor is an Apify Actor that fetches Amazon product and offer-listing pages over residential proxies and turns them into structured records covering three entities: products (full detail-page data), Buy Box offers (the competing seller list per ASIN), and sellers (storefront identity and, optionally, contact details). No Amazon account or login is required — every field comes from publicly rendered product and offer pages.

  • Scrapes individual /dp/ product pages or fans out across /s?... search and category pages
  • Identifies the current Buy Box (Featured Offer) winner and their fulfillment channel — AMZ, FBA, or FBM
  • Pulls the full competing-offer list per ASIN (price, condition, shipping, Prime eligibility, seller identity)
  • Flags offers from sellers not on your authorizedSellers allow-list (hijacker detection)
  • Flags offers priced below your mapPrice (MAP-violation detection)
  • Optionally scrapes seller storefront details (business name, address, phone, rating) and per-variant prices
  • Works across any Amazon domain (amazon.com, amazon.de, amazon.co.uk, and others) with automatic or manual proxy-country selection

Features & Capabilities

The Actor combines a full Amazon product-detail crawler with a purpose-built Buy Box / seller / MAP layer, so you don't have to pair a separate scraper with your own offer-list parser.

Core features

  • Full product detailtitle, price, listPrice, brand, stars, starsBreakdown, reviewsCount, breadCrumbs, description, features, productOverview, bestsellerRanks, variantAsins, gallery and high-resolution images, A+ content, and more
  • Buy Box resolutionbuyBoxSeller, buyBoxSellerName, buyBoxFulfillment, buyBoxPrice derived from the pinned offer in Amazon's All-Offers-Display (AOD) list
  • Seller-count and full offer listsellerCount and sellerOffers[], each offer carrying price, condition, shipping, Prime flag, soldBy, shipsFrom, and an inferred fulfillment channel
  • Hijacker detection — supply authorizedSellers; every offer from a seller not on the list (Amazon retail is always authorized) lands in unauthorizedSellers and sets hasUnauthorizedSeller=true
  • MAP-violation detection — supply mapPrice; every offer priced below it lands in offersBelowMap with a belowBy amount and sets mapViolation=true
  • Search and category fan-out — one start URL can expand into up to maxItemsPerStartUrl product rows across maxSearchPagesPerStartUrl pages
  • Captcha handling — optional CapSolver integration to solve Amazon's image captcha automatically

How Amazon Buy Box, Seller & MAP Monitor compares to other Amazon scrapers

FeatureThis Actorryanclinton/amazon-product-scraperclearpath/amazon-buybox-api
Output formatTyped JSON datasetTyped JSON datasetTyped JSON dataset
Buy Box winner + fulfillment✅ (claims buybox change detection)
MAP-violation flag with allow-list-based hijacker detectionNot documentedNot documented
Cross-run diffing (price/Buy Box change vs previous run)❌ — each run is independent✅ claimed ("operational memory," multi-run trajectory)✅ claimed (named key-value store snapshot)
Pricing modelPay-per-event (row_result)Pay-per-event ($0.15/product, per their listing)Flat monthly rental ($29/mo, per their listing)
Multi-domain in one run✅ (any Amazon domain per URL)Not documented in excerpt reviewed✅ (8 named domains, per their listing)
Seller storefront enrichment (business name, phone, address)✅ optional (scrapeSellers)Not documentedNot documented

Competitor claims above are as observed on their public Apify Store listings on 2026-07-26 and are not independently verified against their source code. If your workflow depends on native run-over-run diffing (e.g. "alert me only when the Buy Box changes hands"), read "Is data fresh, and does it remember previous runs?" in the FAQ below before assuming this Actor does that natively.

If your use case is feeding structured data to an LLM or a repricing pipeline, the output-format row is the decision-maker — parsing raw Amazon HTML inside an agent loop or a cron job is a reliability failure mode, not a feature.

When another tool might suit you better

If you need Amazon's own Selling Partner API-grade data for your own seller account (orders, inventory, settlement reports), this Actor is the wrong tool — it only reads public storefront pages, the same way a shopper does, and cannot access your private seller-account data. If you specifically need built-in run-over-run change tracking without building your own diff step, a competitor that stores a persistent snapshot (as claimed on the clearpath/amazon-buybox-api listing, reviewed 2026-07-26) saves you that integration work; this Actor's Strategy 2 below shows the equivalent pattern built externally.

Amazon Buy Box, Seller & MAP Monitor within the Scrapio data stack

This Actor covers Amazon products, Buy Box offers, and sellers with monitoring fields layered on top. For lightweight, fields-only search results without the detail-page crawl, use Amazon Search Products Scraper. For bulk ASIN-list lookups without URL discovery, use Amazon ASIN Scraper Pay Per Events. For discount and deal discovery rather than Buy Box tracking, use Amazon Today's Deals Scraper By Discount, Price & Category.

Why do developers and data teams scrape Amazon?

🏢 Brand teams and FBA sellers protecting Buy Box and MAP

A brand manager pastes their ASINs into categoryOrProductUrls, sets authorizedSellers to their approved reseller list and mapPrice to their published MAP. Every run returns hasUnauthorizedSeller and mapViolation flags per ASIN, with the offending offers' price, seller name, and belowBy amount already computed — ready to route into a takedown-request or repricing workflow without writing offer-comparison logic by hand.

📊 AI training data and RAG indexing

description, features, productOverview, and aPlusContent are the high-information text fields for RAG indexing — they carry the same specification language a shopper reads before buying. bestsellerRanks, starsBreakdown, and productOverview (a consistent key/value list scraped from Amazon's technical-specification tables) are the most structurally consistent fields for training data, since they follow the same shape across nearly every listing regardless of category.

📱 Competitive and market intelligence

Track buyBoxSellerName and buyBoxFulfillment across a competitor's catalogue to see how often they hold the Featured Offer and whether they're fulfilling through Amazon (FBA) or themselves (FBM). Combined with sellerCount and sellerOffers[].price, this gives a per-listing view of how crowded and how price-competitive a category is, without manually opening the "see all buying options" panel on every listing.

🔬 Research and academic use

price, stars, reviewsCount, bestsellerRanks, and sellerOffers support market-structure research — price dispersion, review-count-to-rank correlation, third-party seller prevalence — using only publicly accessible listing data. No account access or private data is involved.

🎥 Product and SaaS development

The full field set is a ready-made backend for a repricing dashboard, a MAP-compliance tool, or a Buy Box alert product: pair mapViolation / hasUnauthorizedSeller with Apify Schedules and a webhook, and you have the enforcement half of a compliance SaaS without building an Amazon crawler first.

🍚 Input Parameters

All 21 parameters, read directly from .actor/actor.json, in schema order.

ParameterRequiredTypeDefaultConstraintsDescription
categoryOrProductUrlsYesarraystringListAmazon product URLs (/dp/B0B3BVWJ6Y) to monitor, or category/search URLs (/s?k=keyboard) to fan out across many listings. Any Amazon domain works. Accepts a plain string or {"url": "..."}.
maxItemsPerStartUrlnointeger10min 0Cap on how many products to scrape and monitor per start URL.
maxSellerOffersnointeger20min 0How many competing offers to pull per product when identifying the Buy Box winner and counting sellers. 0 turns Buy Box monitoring off entirely.
authorizedSellersnoarray[]stringListSeller names or seller IDs you authorize to sell this product. Any offer from a seller NOT on this list (Amazon retail is always allowed) is reported in unauthorizedSellers and sets hasUnauthorizedSeller=true. Leave empty to skip the check.
mapPricenostringtextfield, nullableYour Minimum Advertised Price as a decimal, e.g. 19.99. Every offer priced below this is reported in offersBelowMap with how far below, and sets mapViolation=true. Leave blank to skip MAP checks.
languagenostringenum (24 values: cs, da, de, en, es, fr, nl, pl, pt, sv, tr, he, ar, mrta, hi, bn, ta, te, kn, ml, ko, zh_CN, zh_TW, ja)Language to use on Amazon. Each Amazon domain supports a different language set; an unsupported choice falls back to the domain's default.
proxyCountrynostringAUTO_SELECT_PROXY_COUNTRYenum (AUTO_SELECT_PROXY_COUNTRY, NO_PROXY, plus every ISO country)Avoids geo-blocking and shows region-relevant products. By default the country is auto-selected from the Amazon domain used.
maxSearchPagesPerStartUrlnointeger9999min 1Maximum number of search pages to scrape per start URL. Works together with maxItemsPerStartUrl — the scraper stops at whichever limit is hit first.
maxProductVariantsAsSeparateResultsnointegermin 0Maximum number of product variants to scrape and output as their own separate result rows. Most variant-detail changes are already in variantDetails; this increases requests and scraping time.
maxOffersnointeger0min 0Maximum number of offers to scrape per product into the base offers[] field. Increases requests and scraping time.
scrapeSellersnobooleanfalseExtract further seller information. Scrapes the featured/main seller; with maxOffers set, scrapes the seller of each offer too. Increases requests and scraping time.
ensureLoadedProductDescriptionFieldsnobooleanfalseAlways load seller-editable description fields (description, aPlusContent, attributes, etc.) that Amazon sometimes hides as a blocking measure. Increases requests and may extend scraping time.
useCaptchaSolvernobooleanfalseAutomatically solve Amazon captchas via CapSolver, reducing retries. Requires capSolverApiKey or the CAPSOLVER_API_KEY env var; without a key this is a no-op. Works best on amazon.com. After a captcha solve, Amazon hides attributes, manufacturerAttributes, and bestsellerRanks on that fetch.
capSolverApiKeynostring (secret)textfield, nullableYour CapSolver API key, used only when useCaptchaSolver is on. Falls back to the CAPSOLVER_API_KEY environment variable. Leave blank if you don't use captcha solving.
scrapeProductVariantPricesnobooleanfalseExtract prices for each product variant into priceVariants[]. Increases requests and scraping time.
scrapeProductDetailsnobooleantrueIf enabled (default), extracts each product in full detail. If disabled, only quick product-tile information from the category/search page is returned — faster, lighter searches.
maxConcurrentRequestsnointeger10min 1, max 20Number of concurrent product-page requests.
countryCodenostringenum, nullableDelivery-location country code used to localize prices, offers, and shipping.
zipCodenostringtextfield, nullableDelivery-location zip code, for more precise localization in larger countries.
locationDeliverableRoutesnoarray["PRODUCT", "SEARCH", "OFFERS"]enum items: PRODUCT, SEARCH, OFFERSWhich page types the delivery-location settings apply to. Restricting this speeds up runs that don't need localized data on every page type.
proxyConfigurationnoobject{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}proxy editorApify proxy settings. Residential proxy is recommended for best results and fewer blocks.

capSolverApiKey is marked isSecret in the input schema — the Apify Console masks it in the UI and in logs.

{
"categoryOrProductUrls": ["https://www.amazon.com/dp/B0B3BVWJ6Y"],
"maxSellerOffers": 20,
"authorizedSellers": ["MyBrand Official", "A1B2C3D4E5F6G7"],
"mapPrice": "19.99",
"scrapeSellers": true,
"maxConcurrentRequests": 10,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Supported URL types and input formats

  • Single producthttps://www.amazon.com/dp/B0B3BVWJ6Y or https://www.amazon.com/gp/product/B0B3BVWJ6Y — scraped and monitored directly, one row out.
  • Search or category pagehttps://www.amazon.com/s?k=keyboard — fanned out into up to maxItemsPerStartUrl product rows across maxSearchPagesPerStartUrl pages.
  • Object form{"url": "https://www.amazon.de/dp/B0B3BVWJ6Y"} — accepted alongside plain strings in the same categoryOrProductUrls array; any Amazon domain (amazon.de, amazon.co.uk, etc.) is recognized from the URL itself.

📦 Output Format

Every result is a typed JSON row pushed to the Apify Dataset as it is scraped — no post-processing wait. Two row shapes exist depending on scrapeProductDetails: the full detail row (default) or a lighter search-tile row when detail scraping is turned off.

Output for a product (detail row, scrapeProductDetails: true)

{
"title": "Example Wireless Mechanical Keyboard",
"url": "https://www.amazon.com/dp/B0B3BVWJ6Y",
"asin": "B0B3BVWJ6Y",
"originalAsin": "B0B3BVWJ6Y",
"price": { "value": 79.99, "currency": "$" },
"inStock": true,
"inStockText": "In Stock",
"listPrice": { "value": 99.99, "currency": "$" },
"brand": "ExampleBrand",
"author": null,
"shippingPrice": null,
"stars": 4.5,
"starsBreakdown": { "5star": 0.68, "4star": 0.18, "3star": 0.07, "2star": 0.03, "1star": 0.04 },
"reviewsCount": 3241,
"answeredQuestions": 42,
"breadCrumbs": "Electronics > Computers & Accessories > Keyboards",
"videosCount": 0,
"visitStoreLink": { "text": "Visit the ExampleBrand Store", "url": "https://www.amazon.com/stores/..." },
"thumbnailImage": "https://m.media-amazon.com/images/I/....jpg",
"galleryThumbnails": ["https://m.media-amazon.com/images/I/....jpg"],
"highResolutionImages": ["https://m.media-amazon.com/images/I/...SL1500_.jpg"],
"importantInformation": null,
"sustainabilityFeatures": null,
"description": "Full product description text...",
"features": ["Hot-swappable switches", "USB-C connectivity", "RGB backlight"],
"attributes": [],
"productOverview": [{ "key": "Connectivity Technology", "value": "USB, Bluetooth" }],
"variantAsins": ["B0B3BVWJ6Z", "B0B3BVWK01"],
"variantDetails": [],
"reviewsLink": "/product-reviews/B0B3BVWJ6Y?reviewerType=all_reviews",
"hasReviews": true,
"delivery": "Tuesday, July 28",
"fastestDelivery": "Monday, July 27",
"returnPolicy": "Return policy text...",
"support": "Product support text...",
"variantAttributes": [],
"manufacturerAttributes": [],
"seller": { "id": "A1B2C3D4E5F6G7", "url": "https://www.amazon.com/sp?seller=A1B2C3D4E5F6G7", "name": "MyBrand Official", "businessName": null, "phone": null, "address": null },
"bestsellerRanks": [{ "rank": 12, "category": "Keyboards" }],
"isAmazonChoice": false,
"amazonChoiceText": null,
"bookDescription": null,
"priceRange": null,
"aPlusContent": "A+ module text...",
"brandStory": null,
"productComparison": null,
"aiReviewsSummary": null,
"monthlyPurchaseVolume": "200+ bought in past month",
"productPageReviews": [],
"productPageReviewsFromOtherCountries": [],
"locationText": "New York 10001",
"loadedCountryCode": "US",
"offers": [],
"totalOfferCount": 6,
"unNormalizedProductUrl": "https://www.amazon.com/dp/B0B3BVWJ6Y",
"categoryPageData": { "pageNumber": 1, "saleSummary": null, "isSponsored": false, "bestsellerBadge": null, "productPosition": 1 },
"input": "https://www.amazon.com/dp/B0B3BVWJ6Y",
"sellerOffers": [ { "...": "see Output for a Buy Box offer below" } ],
"offerSource": "aod",
"buyBoxSeller": { "name": "MyBrand Official", "id": "A1B2C3D4E5F6G7", "url": "https://www.amazon.com/sp?seller=A1B2C3D4E5F6G7", "fulfillment": "FBA", "shipsFrom": "Amazon.com", "price": { "value": 79.99, "currency": "$" } },
"buyBoxPrice": { "value": 79.99, "currency": "$" },
"buyBoxSellerName": "MyBrand Official",
"buyBoxFulfillment": "FBA",
"sellerCount": 6,
"mapPrice": 19.99,
"offersBelowMap": [],
"mapViolation": false,
"unauthorizedSellers": [],
"hasUnauthorizedSeller": false
}

Fields from sellerOffers onward are the Buy Box / seller / MAP monitor layer — they are added to every detail row, not just rows with hits. When authorizedSellers is empty, unauthorizedSellers and hasUnauthorizedSeller are null rather than a fabricated []/false; the same is true for offersBelowMap/mapViolation when mapPrice is not set — so a false in the dataset always means "checked, no violation," never "not checked." If scrapeProductVariantPrices is true, a priceVariants array ([{asin, url, price}]) is added as well; it is otherwise absent from the row rather than null.

Output for a Buy Box offer

Each entry in sellerOffers[] (and in the base offers[] array when maxOffers is set):

{
"price": { "value": 79.99, "currency": "$" },
"shippingPrice": null,
"condition": "New",
"isPrime": true,
"soldBy": "MyBrand Official",
"shipsFrom": "Amazon.com",
"fulfillment": "FBA",
"isBuyBoxWinner": true,
"seller": { "id": "A1B2C3D4E5F6G7", "name": "MyBrand Official", "url": "https://www.amazon.com/sp?seller=A1B2C3D4E5F6G7" }
}

fulfillment is inferred from the offer's Sold-by / Ships-from text: AMZ when Amazon both sells and ships it, FBA when a third party sells it but Amazon ships it, FBM when the seller ships it themselves, and null when neither field is present. isBuyBoxWinner is true on exactly the first (pinned) offer returned by Amazon's All-Offers-Display list.

When scrapeProductDetails is false, rows are the lighter search-tile shape instead — no offer or Buy Box fields:

{
"asin": "B0B3BVWJ6Y",
"title": "Example Wireless Mechanical Keyboard",
"url": "https://www.amazon.com/dp/B0B3BVWJ6Y",
"thumbnailImage": "https://m.media-amazon.com/images/I/....jpg",
"price": { "value": 79.99, "currency": "$" },
"stars": 4.5,
"reviewsCount": 3241,
"isSponsored": false,
"categoryPageData": { "productPosition": 1, "isSponsored": false }
}

Schema stability and export options

Field names stay stable across runs; when Amazon's front end changes, fields that can no longer be located are returned null (or [] for list fields) rather than dropped from the row, so downstream consumers don't need to defensively check for missing keys. Every dataset row is pushed under the row_result charged event, so what you see in the dataset is exactly what you're billed for — no separate, uncharged accounting rows are mixed in. Results are available from the Apify Console or apify_client in JSON, CSV, Excel, XML, or RSS, the standard Apify Dataset export formats.

💡 Amazon Buy Box, Seller & MAP Monitor Strategy Guide

🎯 Strategy 1: Real-time MAP enforcement pipeline

Trigger a run whenever a new product enters your MAP-monitoring list: pass its URL in categoryOrProductUrls with mapPrice set to your published MAP and authorizedSellers set to your reseller allow-list. Read mapViolation, offersBelowMap, hasUnauthorizedSeller, and unauthorizedSellers off the returned row and write them straight into your compliance system or trigger a takedown-request workflow — no offer-comparison logic to write, the Actor already resolved it against your inputs.

🎯 Strategy 2: Scheduled Buy Box monitoring and alerting

Set up an Apify Schedule to run the Actor daily or hourly against your ASIN list. This Actor does not persist state between runs itself — each run's dataset is independent, so build the diff externally: keep the previous run's dataset (or export it to your own database keyed by asin), and after each new run compare buyBoxSellerName and price.value against the stored values for the same ASIN. Alert only on the delta that matters — a Buy Box seller change or a price move past your threshold — using apify_client to pull the latest dataset via client.dataset(run["defaultDatasetId"]).iterate_items().

🎯 Strategy 3: Bulk catalogue dataset build

Pass a category or search URL with maxItemsPerStartUrl and maxSearchPagesPerStartUrl set to cover the catalogue depth you need, and scrapeProductDetails: true to get full rows rather than search tiles. Run several such start URLs in one call (categoryOrProductUrls accepts a mixed list of product and search/category URLs) and export the resulting dataset to CSV or JSON for a research or BI dataset. maxConcurrentRequests (1–20) is the only documented concurrency control; there is no other published throughput ceiling for this Actor.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time MAP enforcementBrand teams reacting to a specific listing nowOn-demand single-URL runJSON row with mapViolation / hasUnauthorizedSeller flags
Scheduled Buy Box monitoringTracking Buy Box or price changes over timeApify Schedule + external diff against the prior datasetJSON dataset, compared run-over-run outside the Actor
Bulk catalogue buildResearch, BI, or training datasetsOne or more search/category start URLs in a single runDataset exported to CSV/JSON/Excel
Scraper NameWhat it extracts
Amazon Search Products ScraperAmazon search-result product data by keyword or search URL — no Buy Box/seller layer
Amazon ASIN Scraper Pay Per EventsFull product detail from a plain ASIN list, across 20 storefronts
Amazon Today's Deals Scraper By Discount, Price & CategoryAmazon's Today's Deals feed, filtered by discount, price, and category

How to integrate Amazon Buy Box, Seller & MAP Monitor with your stack

Amazon Buy Box, Seller & MAP Monitor works with any language or tool that can make an HTTP request through the Apify API — it is run and read exclusively through the Apify platform (Console, API, and official SDKs); there is no separate signup or API key outside your Apify account.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"categoryOrProductUrls": [
"https://www.amazon.com/dp/B0B3BVWJ6Y",
"https://www.amazon.com/dp/B0CL61F39H",
],
"authorizedSellers": ["MyBrand Official"],
"mapPrice": "19.99",
}
run = client.actor("<YOUR_USERNAME>/amazon-product-scraper-buy-box-seller-monitor").call(run_input=run_input)
rows = []
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
rows.append({
"asin": item.get("asin"),
"buyBoxSellerName": item.get("buyBoxSellerName"),
"mapViolation": item.get("mapViolation"),
"hasUnauthorizedSeller": item.get("hasUnauthorizedSeller"),
})
import csv
with open("buybox_report.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('<YOUR_USERNAME>/amazon-product-scraper-buy-box-seller-monitor').call({
categoryOrProductUrls: ['https://www.amazon.com/dp/B0B3BVWJ6Y'],
mapPrice: '19.99',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
if (item.mapViolation) {
console.log(`MAP violation on ${item.asin}: ${item.offersBelowMap.length} offer(s) below MAP`);
}
});

Async and scheduled pipelines

For large ASIN lists or recurring checks, don't wait on the run synchronously — start it with client.actor(...).start(run_input=...) and poll or use an Apify webhook on the ACTOR.RUN.SUCCEEDED event to pull the dataset once it finishes. For recurring monitoring, use an Apify Schedule to trigger the run on a cron expression instead of managing your own scheduler.

Who Needs This? (Use Cases & Industries)

🏢 Brand protection and marketplace management agencies

An agency managing MAP compliance for several brands runs one call per client catalogue with each brand's mapPrice and authorizedSellers, then routes every ASIN with mapViolation=true or hasUnauthorizedSeller=true into that client's weekly report — without manually opening the offer-listing page for each of hundreds of ASINs.

📊 Revenue and pricing analysts

Analysts pull buyBoxPrice, sellerCount, and sellerOffers[].price across a competitive set to model price elasticity and Buy Box win rate by fulfillment channel (FBA vs FBM), feeding the numbers straight into a BI tool from the exported CSV/JSON dataset.

📱 Repricing and monitoring SaaS builders

Builders wire mapViolation, hasUnauthorizedSeller, and buyBoxSellerName into their own product as the enforcement signal layer, pairing a scheduled run with their own diff/alert logic (Strategy 2 above) rather than building an Amazon offer-list parser from scratch.

🔬 Researchers

Market-structure researchers use price, stars, reviewsCount, bestsellerRanks, and sellerOffers for price-dispersion and seller-competition studies, using only publicly accessible listing data with no account access involved.

Scraping publicly accessible web pages is generally lawful in the United States — in hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019, reaffirmed on remand 2022), the Ninth Circuit held that scraping data not behind a login wall does not violate the Computer Fraud and Abuse Act. That said, Amazon's Conditions of Use prohibit automated data collection, so running this Actor against Amazon may put you in breach of contract with Amazon — a civil matter between you and Amazon, not a criminal one, and not the same question as whether scraping itself is lawful. This Actor returns product, pricing, and seller-storefront data that Amazon publishes for any visitor; it is business and catalogue data, not the kind of consumer personal data that triggers GDPR/CCPA obligations. Seller businessName, phone, and address fields (when scrapeSellers is on) reflect the disclosures Amazon requires third-party sellers to publish on their storefront, not private consumer data — treat them with ordinary care regardless. Amazon Buy Box, Seller & MAP Monitor returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications.

❓ Frequently asked questions

Does Amazon Buy Box, Seller & MAP Monitor work without an Amazon account?

Yes. No Amazon account, login, or API credentials are required — the Actor fetches the same publicly rendered product, search, and offer-listing pages any visitor sees.

How does it handle Amazon's anti-scraping measures?

It rotates coherent browser TLS-fingerprint/user-agent profiles per session, routes requests through Apify residential proxies with sticky per-session IPs, warms each session against Amazon's homepage before use, and retries blocked or "lite page" responses with exponential backoff and jitter. When a session's block rate crosses an internal threshold it is retired and replaced rather than reused. An optional CapSolver integration (useCaptchaSolver + capSolverApiKey) can solve Amazon's image captcha automatically.

Can I run it at scale without getting blocked?

maxConcurrentRequests caps concurrency at 1–20; no other throughput ceiling is documented for this Actor. Block rates depend on proxy quality and target-domain traffic patterns, which are not values this Actor publishes or guarantees — use residential proxies (the default) for the lowest observed blocking.

Is data fresh, and does it remember previous runs?

Every run fetches live pages — nothing is cached between runs. However, the Actor does not persist state across runs on its own: it writes its final run summary only to that run's own default key-value store (an ephemeral, run-scoped store, not a named/shared one), so there is no built-in "what changed since last time" comparison. If you need run-over-run Buy Box or price change detection, build it externally by keeping each run's dataset (or exporting rows to your own database keyed by asin) and diffing the next run against it — see Strategy 2 in the Strategy Guide above.

Which fields work best for AI training and RAG indexing?

For RAG, index description, features, productOverview, and aPlusContent — the highest-information free-text fields, in the same specification language a shopper reads. For training data, bestsellerRanks, starsBreakdown, and productOverview are the most structurally consistent fields across listings and categories. All fields return as typed primitives (strings, numbers, booleans, or nested objects/arrays) — no string-encoded numbers to parse before use.

Does this Actor handle personal data?

No, not by default. The core output is product, pricing, and seller-storefront data that Amazon publishes to any visitor. The optional scrapeSellers seller-enrichment fields (businessName, phone, address) are business-disclosure data Amazon requires sellers to publish, not consumer personal data — but if you store or reuse it, the lawful basis for that storage and use sits with you, not with this Actor.

Does Amazon Buy Box, Seller & MAP Monitor work with Claude, ChatGPT, and other AI agent tools?

It is callable as a standard Apify Actor run by any agent framework that can hit the Apify API — via apify_client, a direct REST call, or an Apify integration node. There is no dedicated MCP server for this Actor; every response is typed JSON, so no HTML parsing step is needed before passing results into an LLM context window.

How does this compare to other Amazon Buy Box scrapers?

ryanclinton/amazon-product-scraper (reviewed 2026-07-26) advertises a "ranked incident queue" with review-sentiment defect detection and multi-run "operational memory" that deepens over several scheduled runs — capabilities this Actor does not have; this Actor instead returns a flat, fully-documented row per product with the Buy Box/MAP fields resolved on every run. clearpath/amazon-buybox-api (reviewed 2026-07-26) advertises named-key-value-store snapshotting for automatic run-over-run change flags across 8 named Amazon domains at a flat monthly rental; this Actor works on any Amazon domain via URL and prices per result row instead, but leaves change-detection to the pattern in Strategy 2 above rather than doing it internally.

Disclaimer

Amazon Buy Box, Seller & MAP Monitor extracts only publicly available data from Amazon. This tool is intended for lawful use cases only. Users are responsible for complying with Amazon's Conditions of Use and applicable data protection laws in their jurisdiction.