Amazon All Offers & Buy Box Tracker
Collect every seller offer for Amazon ASINs you supply - condition, price, seller name and rating, shipping terms, delivery estimate, and which offer currently holds the buy box.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
asins | array | required | Amazon ASINs to fetch offers for, e.g. `B0DCH8VDXF`. |
productUrls | array | optional | Full Amazon product URLs (any `/dp/{ASIN}` link). The marketplace domain and ASIN are both extracted from each URL. |
conditions | string | optional | Only emit offers of this condition. Amazon's offer panel surfaces 4 distinct condition buckets -- New, Used, Collectible, and Renewed (Amazon Renewed program) -- each matched exactly ("Used only" never silently includes Collectible/Renewed offers). |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
asins | array | required | Amazon ASINs to fetch offers for, e.g. `B0DCH8VDXF`. |
productUrls | array | optional | Full Amazon product URLs (any `/dp/{ASIN}` link). The marketplace domain and ASIN are both extracted from each URL. |
conditions | string | optional | Only emit offers of this condition. Amazon's offer panel surfaces 4 distinct condition buckets -- New, Used, Collectible, and Renewed (Amazon Renewed program) -- each matched exactly ("Used only" never silently includes Collectible/Renewed offers). |
fulfillmentTypes | array | optional | Only emit offers with this fulfillment type. Derived from Amazon's own explicit "Ships from"/"Sold by" labels: FBA (Fulfilled by Amazon -- ships from Amazon, sold by a third-party seller), AMAZON (sold and shipped by Amazon itself), FBM (Fulfilled by Merchant -- the seller ships it themselves). Leave empty for no filter. Offers where the fulfillment type couldn't be confidently derived are excluded whenever a filter is set (but still included when this filter is empty). |
maxOffersPerProduct | integer | optional | Hard cap on the number of offer records emitted per ASIN (the buy-box/pinned offer counts as one). |
deliveryCountry | string | optional | 2-letter destination country. Offer sets are destination-dependent; also selects the default marketplace domain for bare ASINs (ignored when `productUrls` supplies its own domain). |
postalCode | string | optional | Destination postal code to refine delivery estimates. Optional. |
proxyConfiguration | object | optional | Uses the free AUTO (datacenter) proxy group by default. Some marketplaces (e.g. amazon.co.uk, amazon.de) drop datacenter connections outright, so the actor fast-fails a network-level timeout on a target and automatically retries it once under a RESIDENTIAL session -- a bounded fallback, never the default. |
Download the published input schema
View complete JSON
{
"description": "Scrape every seller offer for one or more Amazon ASINs from the All-Offers-Display (\"Other Sellers on Amazon\") panel.",
"properties": {
"asins": {
"default": [],
"description": "Amazon ASINs to fetch offers for, e.g. `B0DCH8VDXF`.",
"editor": "stringList",
"prefill": [
"B0DXXYS4BJ"
],
"title": "ASINs",
"type": "array"
},
"conditions": {
"default": "ALL",
"description": "Only emit offers of this condition. Amazon's offer panel surfaces 4 distinct condition buckets -- New, Used, Collectible, and Renewed (Amazon Renewed program) -- each matched exactly (\"Used only\" never silently includes Collectible/Renewed offers).",
"editor": "select",
"enum": [
"ALL",
"NEW",
"USED",
"COLLECTIBLE",
"RENEWED"
],
"enumTitles": [
"All conditions",
"New only",
"Used only",
"Collectible only",
"Renewed only"
],
"prefill": "ALL",
"title": "Condition filter",
"type": "string"
},
"deliveryCountry": {
"default": "",
"description": "2-letter destination country. Offer sets are destination-dependent; also selects the default marketplace domain for bare ASINs (ignored when `productUrls` supplies its own domain).",
"editor": "select",
"enum": [
"",
"US",
"CA",
"MX",
"BR",
"GB",
"DE",
"FR",
"IT",
"ES",
"NL",
"SE",
"PL",
"TR",
"AE",
"SA",
"IN",
"SG",
"AU",
"JP",
"EG",
"IE",
"BE",
"ZA"
],
"enumTitles": [
"(default - United States)",
"United States",
"Canada",
"Mexico",
"Brazil",
"United Kingdom",
"Germany",
"France",
"Italy",
"Spain",
"Netherlands",
"Sweden",
"Poland",
"Turkey",
"United Arab Emirates",
"Saudi Arabia",
"India",
"Singapore",
"Australia",
"Japan",
"Egypt",
"Ireland",
"Belgium",
"South Africa"
],
"prefill": "US",
"title": "Delivery country",
"type": "string"
},
"fulfillmentTypes": {
"default": [],
"description": "Only emit offers with this fulfillment type. Derived from Amazon's own explicit \"Ships from\"/\"Sold by\" labels: FBA (Fulfilled by Amazon -- ships from Amazon, sold by a third-party seller), AMAZON (sold and shipped by Amazon itself), FBM (Fulfilled by Merchant -- the seller ships it themselves). Leave empty for no filter. Offers where the fulfillment type couldn't be confidently derived are excluded whenever a filter is set (but still included when this filter is empty).",
"editor": "select",
"items": {
"enum": [
"FBA",
"FBM",
"AMAZON"
],
"enumTitles": [
"Fulfilled by Amazon (FBA)",
"Fulfilled by Merchant (FBM)",
"Sold and shipped by Amazon"
],
"type": "string"
},
"prefill": [],
"title": "Fulfillment type filter",
"type": "array"
},
"maxOffersPerProduct": {
"default": 20,
"description": "Hard cap on the number of offer records emitted per ASIN (the buy-box/pinned offer counts as one).",
"maximum": 50,
"minimum": 1,
"prefill": 5,
"title": "Max offers per ASIN",
"type": "integer"
},
"postalCode": {
"description": "Destination postal code to refine delivery estimates. Optional.",
"editor": "textfield",
"prefill": "10001",
"title": "Postal / ZIP code",
"type": "string"
},
"productUrls": {
"default": [],
"description": "Full Amazon product URLs (any `/dp/{ASIN}` link). The marketplace domain and ASIN are both extracted from each URL.",
"editor": "stringList",
"prefill": [],
"title": "Product URLs",
"type": "array"
},
"proxyConfiguration": {
"default": {
"useApifyProxy": true
},
"description": "Uses the free AUTO (datacenter) proxy group by default. Some marketplaces (e.g. amazon.co.uk, amazon.de) drop datacenter connections outright, so the actor fast-fails a network-level timeout on a target and automatically retries it once under a RESIDENTIAL session -- a bounded fallback, never the default.",
"editor": "proxy",
"prefill": {
"useApifyProxy": true
},
"title": "Proxy configuration",
"type": "object"
}
},
"required": [
"asins"
],
"schemaVersion": 1,
"title": "Amazon Offers Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
offers | string | optional | Dataset containing all scraped Amazon offer and status records. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Per-seller offers for scraped Amazon ASINs -- condition (+ seller-provided condition note on used offers, e.g. \"A bright, square, and overall a nice copy\"), price, seller name/rating, ships-from, delivery estimate, fulfillment type (FBA/FBM/AMAZON, when derivable), free-delivery flag/shipping price (when the delivery text gives explicit evidence either way), and buy-box winner flag.",
"properties": {
"offers": {
"description": "Dataset containing all scraped Amazon offer and status records.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Amazon offers",
"type": "string"
}
},
"title": "Amazon All Offers & Buy Box Tracker Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"overview": {
"display": {
"component": "table",
"properties": {}
},
"title": "Offers",
"transformation": {
"fields": [
"productAsin",
"offerPosition",
"condition",
"price",
"soldBy",
"shipsFrom",
"fulfillmentType",
"isBuyBoxWinner"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Amazon All Offers & Buy Box Tracker
Scrape every seller offer for one or more Amazon ASINs from the All-Offers-Display panel (the "Other Sellers on Amazon" / "See All Buying Options" list). Get condition, price, seller name and rating, ships-from, delivery estimate, and which offer currently wins the buy box -- for as many products as you need, across multiple marketplaces and destinations.
What this actor does
- Input by ASIN or by product URL -- mix and match freely
- Every offer, not just the buy box -- new, used, and third-party seller offers on the same listing
- Condition filter -- restrict to New, Used, Collectible, or Renewed only, or All (each matched exactly -- a "Used only" filter never silently includes Collectible/Renewed offers)
- Fulfillment type filter -- restrict to Fulfilled by Amazon (FBA), Fulfilled by Merchant (FBM), or sold-and-shipped-by-Amazon
- Destination-aware -- set a delivery country / postal code, since offer sets and delivery estimates change by destination
- Buy-box detection -- the current buy-box winner is explicitly flagged, never guessed from list position
- Empty fields are omitted
Output per offer
productAsin-- the product ASIN this offer belongs toofferPosition-- 1-based order the offer appeared in on the page (buy box is always position 1)condition,subCondition-- e.g."Used"/"Like New"conditionNote-- extra condition detail text, when Amazon shows oneprice--{ value, currency, display }unitPrice--{ value, currency, display }, when Amazon shows a per-unit pricelistPrice--{ value, currency, display }, the strikethrough "List Price" Amazon shows for this specific offer, only present when Amazon's own DOM carries it (typically the pinned/buy-box offer on a discounted item) -- never derived/computedsavingsPercent-- integer percent-off (e.g.30for "-30%"), only present alongside a reallistPricedeliveryEstimate-- the delivery promise text shown for this offerisFreeDelivery--true/false, only when the delivery text gives explicit evidence either way (e.g. "FREE delivery..." vs. a stated shipping charge); omitted when ambiguousshippingPrice--{ value, currency, display }, only present when Amazon shows an explicit paid-shipping amountshipsFrom-- who ships the itemsoldBy--{ name, sellerId, profileUrl }sellerRating,sellerRatingsCount-- third-party seller reputation, when Amazon shows a rating line for that sellersellerPositivePercent12morsellerPositivePercentLifetime-- the positive-feedback percentage, exactly one of the two depending on which real period Amazon measured it over (sellers with a full 12-month history get "% positive over last 12 months"; newer sellers get "% positive over lifetime" instead) -- never conflated into one field, since they cover different windowsfulfillmentType--"FBA"/"FBM"/"AMAZON", derived from Amazon's own "Ships from"/"Sold by" labels; omitted when the combination is ambiguous (e.g. a named third-party fulfillment center)isBuyBoxWinner--trueonly for the pinned/buy-box offer, never inferred from positionmaxQuantity-- highest quantity selectable for this offer, when a quantity control is showncouponText-- any coupon/promotion text shown on the offer rowmarketplace--{ countryCode, domain, marketplaceId, currency, language }requestContext--{ productAsin, sourceUrl, canonicalUrl, deliveryCountry, postalCode }page--{ classification: "SUCCESS", totalOfferCount, moreOffersAvailable }.totalOfferCountis Amazon's own reported total offer count for the ASIN (when available). The actor automatically expands Amazon's own "See N more options" panel toggle before extracting, which fully recovers every offer on ASINs where Amazon had already rendered them all client-side (just hidden behind that toggle); on ASINs with a substantially larger real offer count, Amazon's client-side reveal itself only carries a further batch (not literally every remaining offer), somoreOffersAvailable: truecan still appear even whenmaxOffersPerProductwas set higher thantotalOfferCount-- this remaining gap would require a genuine server-side page-2 fetch the actor does not perform. Check this field rather than assumingmaxOffersPerProductwas always fully honored.recordType: "offer",scrapedAt
Output: status records
When an ASIN's page can't be classified as a normal offers page (not found, invalid ASIN, sign-in wall, CAPTCHA, rate-limited, or a genuinely empty offers panel), the actor emits one explicit status record instead of silently returning zero rows. Likewise, when offers were found but every single one was removed by the conditions/fulfillmentTypes filters, one FILTERED_OUT status record is emitted (carrying Amazon's real totalOfferCount) so an empty result set is never ambiguous:
productAsin,marketplace,requestContextpage.classification-- one ofNOT_FOUND,INVALID_ASIN,AUTH_REQUIRED,CAPTCHA,ROBOT_CHECK,DOG_PAGE_503,RATE_LIMITED,NO_OFFERS,FILTERED_OUT, etc.recordType: "status",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
asins |
array | – | ASINs to fetch, e.g. B0DCH8VDXF |
productUrls |
array | – | Full /dp/{ASIN} product URLs (marketplace domain auto-detected) |
conditions |
string | ALL |
ALL / NEW / USED / COLLECTIBLE / RENEWED |
fulfillmentTypes |
array | [] (no filter) |
Any of FBA / FBM / AMAZON; leave empty for no filter |
maxOffersPerProduct |
int | 20 |
Hard cap on offers emitted per ASIN (1-50) |
deliveryCountry |
string | – | 2-letter destination country; also picks the default marketplace domain |
postalCode |
string | – | Destination ZIP/postal code |
proxyConfiguration |
object | AUTO | Apify proxy config |
Example: single ASIN, all conditions
{
"asins": ["B0DCH8VDXF"],
"conditions": "ALL",
"maxOffersPerProduct": 10
}
Example: multiple ASINs, new only, destination-aware
{
"asins": ["B0DXXYS4BJ", "B0DCH8VDXF"],
"conditions": "NEW",
"deliveryCountry": "US",
"postalCode": "10001",
"maxOffersPerProduct": 20
}
Example: by product URL, UK marketplace
{
"productUrls": ["https://www.amazon.co.uk/dp/B0DCH8VDXF"],
"conditions": "ALL"
}
Use cases
- Price monitoring -- track how many sellers compete on a listing and at what price
- Buy-box tracking -- monitor which seller currently owns the buy box over time
- Repricing intelligence -- see competitor pricing, condition, and shipping terms side by side
- Seller research -- discover which third-party sellers list a given ASIN and their ratings
- Arbitrage / reselling -- compare New vs Used pricing spreads on the same product
FAQ
What is the All-Offers-Display panel? It's the list Amazon shows when you click "See All Buying Options" or "X used & new" on a product page -- every seller currently offering that ASIN, not just the buy-box winner.
Why do offer sets change by destination? Amazon only shows offers a seller can actually ship to your delivery address. Setting deliveryCountry/postalCode makes the results match what a real shopper in that location would see.
Why is sellerRating sometimes missing? Amazon only shows an independent seller-rating line for third-party sellers. Offers fulfilled and sold directly by Amazon (or "Amazon Resale") don't carry a separate rating line, so the field is correctly omitted rather than fabricated.
How is fulfillmentType determined? From Amazon's own "Ships from" and "Sold by" labels on each offer row -- FBA (Fulfilled by Amazon) when Amazon ships it but a third party sold it, AMAZON when Amazon both sold and shipped it, FBM (Fulfilled by Merchant) when the ships-from and sold-by names match (the seller ships it themselves). If the combination is ambiguous (e.g. a named third-party fulfillment center), the field is omitted rather than guessed.
Why is isFreeDelivery/shippingPrice sometimes missing? Only set when Amazon's delivery text gives explicit evidence either way ("FREE delivery..." or a stated shipping charge). An ambiguous delivery estimate with no free/paid wording leaves both fields omitted rather than assuming free.
What's the difference between USED and COLLECTIBLE/RENEWED in the condition filter? Amazon's own AOD panel surfaces up to 4 distinct top-level condition buckets on the same listing -- New, Used, Collectible (rare/specialty copies, common on books/media), and Renewed (Amazon's official refurbishment program). Each conditions filter value matches its own bucket exactly -- selecting USED will never silently include a Collectible or Renewed offer. Use ALL if you want every condition together.
Does the conditions filter work on non-English marketplaces? The output condition field always shows Amazon's own real, localized text (e.g. Polish "Nowe", Dutch "Nieuw", Italian "Nuovo" for New-condition offers) -- it's never translated or altered. The conditions input filter itself recognizes the English bucket names plus a small, evidence-based set of live-verified translations: New-condition words for Polish/Dutch/Italian/German/Japanese/Spanish/French, plus Used/Collectible words for Japanese ("中古商品"/"コレクター商品"), German ("Gebraucht"), Italian ("Usato"/"Da collezione"), Spanish ("De 2ª mano"), and French ("D'occasion"). Filtering by USED/COLLECTIBLE/RENEWED on a marketplace whose offers render those buckets in a language this actor hasn't yet verified a translation for may under-match (real offers in that bucket excluded rather than risking a wrong match) -- use ALL and inspect the real condition text yourself if you need every bucket on an untranslated marketplace.
Why did I get a status record instead of offers? The ASIN's page didn't classify as a normal offers listing -- it may be invalid, geo-restricted, temporarily rate-limited, or genuinely have no additional offers beyond the buy box. The page.classification field tells you exactly why.
I set maxOffersPerProduct to 50 but got fewer offers back -- is that a bug? No -- maxOffersPerProduct is a cap, not a guarantee. The actor automatically expands Amazon's own "See N more options" panel toggle before extracting, which recovers every offer on ASINs where Amazon had already rendered them all client-side behind that toggle. On ASINs with a much larger real offer count (popular used-book listings with dozens of sellers are the most common case), Amazon's client-side reveal itself only carries a further batch rather than literally every remaining offer -- reaching the rest would require a genuine server-side page-2 fetch this actor does not perform. Every returned offer record's page.totalOfferCount/page.moreOffersAvailable fields tell you the real total and whether more exist beyond what was captured, so you can always tell the difference from a genuinely-exhausted result.
Is this affiliated with Amazon? No. This is an independent, third-party actor that reads Amazon's publicly viewable product pages.
How fresh is the data? Every run fetches the live page at request time -- offers, prices, and the buy-box winner can change within minutes on Amazon, so treat each run as a point-in-time snapshot.
Why does sourceUrl / soldBy.profileUrl return an error if I open it with a bare script? Amazon's edge blocks plain, cookie-less, non-browser requests outright -- a raw request from a clean script with no session/cookies will get a "Service Unavailable" response even though the same URL loads fine for a real shopper. This actor itself reaches these pages successfully; the URLs in the output are the correct, canonical Amazon URLs and will render normally when opened in a browser.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build Vw92ArgIhYsmbT25L. Documentation is regenerated from the default published build; private drafts are not included.