Amazon Product Details Scraper: Buy Box, Stock & Price Changes avatar

Amazon Product Details Scraper: Buy Box, Stock & Price Changes

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Amazon Product Details Scraper: Buy Box, Stock & Price Changes

Amazon Product Details Scraper: Buy Box, Stock & Price Changes

Amazon Product Details Scraper extracts product titles, ASINs, prices, Buy Box sellers, stock status, ratings, reviews, and availability. Track price and inventory changes to monitor competitors, identify pricing trends, and support Amazon product research.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

1

Bookmarked

17

Total users

3

Monthly active users

a day ago

Last modified

Share

Amazon Scraper — Extract Buy Box Price, Stock & Price Changes as JSON

This Amazon scraper reads live product pages by ASIN and returns the featured-offer (Buy Box) price, the seller behind it, current stock status, and — when you compare runs — the exact price and stock changes since your last check. Every response is typed, normalized JSON: no HTML, no CSS selectors, nothing to parse. Feed it ASINs or product URLs and get structured pricing, availability and change data ready for a repricing tool, a dashboard, or an AI agent.

What is the Amazon Buy Box, Stock & Price Changes scraper?

This is an Apify Actor that fetches Amazon product detail pages and extracts the price actually charged to a buyer — the price bound to the page's featured-offer (Buy Box) container — together with stock status, seller/fulfillment details, and the full product record shown on the page. No Amazon account, login, or Seller Central access is required; it reads whatever a normal, unauthenticated visitor sees.

It handles three things at once:

  • 💵 Buy Box pricing — the price a shopper is actually charged, never a number borrowed from a used offer or a nearby item
  • 📦 Stock & availability — in-stock, limited, or unavailable, plus units-left counts and warehouse text
  • 📈 Price & stock change history — this run compared against your own previous run of the same baseline
  • Full product record — reviews, rating, images, variations, attributes and categories present on the page
  • 📤 Export as JSON or CSV, or pull it through the Apify API/client into your own pipeline

What data does the Amazon Buy Box, Stock & Price Changes scraper collect?

Each run returns one row per ASIN, covering six distinct kinds of data pulled from the same product page:

Data TypeKey FieldsJSON Field Names
Buy Box & pricingBuy box price, list price, savings, per-unit price, couponprice, buyBoxPresent, priceSource, listPrice, savingsPercent, pricePerUnit, couponText
Stock & availabilityStock state, units left, warehouse textstockStatus, inStock, unitsLeft, warehouseAvailability
Seller & fulfillmentWho sells it, who ships it, delivery costsoldBy, shipsFrom, fulfilledBy, sellerId, shippingPrice, deliveryMessage
Price & stock change historyDeltas vs. your last run, first-seen/last-changed timestampspreviousPrice, priceChange, priceChangePct, availabilityChanged, runsObserved, firstSeenAt, lastChangedAt
Reviews & ratingStar rating, review count, individual reviews shown on the pageproductRating, ratingValue, countReview, reviews, reviewsOnPage
Product attributes & mediaBrand, specs, images, variations, categoriesmanufacturer, productDetails, productSpecification, imageUrlList, mainImage, variations, categoriesExtended

Need more Amazon data?

If you need to build the ASIN list this Actor prices, API-Empire's Amazon Search Scraper By Price, Brand & Rating Filters finds products by keyword and filter first. For a competitor-focused view, Amazon Price Tracker: Seller & Buy Box Data covers the same buy-box/seller ground with a different input shape, and Amazon DE Sellers Leads Scraper: Multi-Niche Lead Sourcing goes further into seller lead data on the German marketplace.

How does this differ from the official Amazon APIs?

Amazon's own product-data APIs are gated by business relationships, not by a simple API key. The Product Advertising API (PA-API 5), the affiliate-facing API for product data, has been deprecated: as of the Amazon Associates program's own documentation (checked 2026-08-15), PA-API 5 "has been deprecated and is being replaced by the Creators API," and calls against the old API now return an HTTP 403 directing developers to migrate. The Selling Partner API (SP-API), Amazon's seller-side API, requires a Professional Selling account (US $39.99/month) and an approved developer profile, and its access terms have been unsettled through 2025–2026: Amazon announced a $1,400/year subscription fee plus usage charges on November 3, 2025, delayed it on January 27, 2026, postponed it indefinitely on March 9, 2026, then withdrew the fee structure entirely on May 12, 2026 (per Amazon's own Solutions Partner communications, as reported by novadata.io, checked 2026-08-15).

FeatureAmazon PA-API / SP-APIThis Actor
Access requirementAmazon Associate enrollment (PA-API, deprecated) or Professional Seller account + approval (SP-API)Apify account, no Amazon account needed
ScopeYour own catalogue (SP-API) or affiliate product data (PA-API, now Creators API)Any public ASIN, any of the 22 supported marketplaces
Buy Box visibilitySeller-side offer data onlyThe exact price shown to a shopper on the page
Setup timeDeveloper approval process, per-marketplace credentialsAdd ASINs, run
Change trackingNot providedBuilt in, per baseline, across runs

Use Amazon's own APIs when you sell on Amazon and need order, inventory or account-scoped data under Amazon's terms. Use this Actor when you need the price and stock a shopper actually sees for ASINs you don't control — competitor monitoring, MAP compliance, or a price feed for products outside your own seller account.

Why do developers and teams scrape Amazon buy box and price data?

For pricing analysts and repricing teams

Repricing decisions depend on the price actually charged, not a list price or a used-offer price. Feeding price, buyBoxPresent and priceSource into a repricing rule engine, alongside previousPrice and priceChangePct from the built-in change tracking, gives a clean signal of when a competitor's Buy Box price moved and by how much — without hand-parsing a product page every time.

For brand owners monitoring MAP and resellers

Brands enforcing minimum advertised price (MAP) policies need to know when a reseller's Buy Box price drops below the floor, and who is selling it. soldBy, sellerId and shipsFrom identify the offer; minPriceChangePercent and onlyChangedSinceLastRun let a scheduled run report only the ASINs that actually moved, instead of re-checking every product by hand.

For AI engineers and agent builders

An agent that needs live Amazon pricing as a tool call gets typed JSON back — price, stockStatus, unitsLeft — with no HTML to strip or selectors to maintain when Amazon's markup shifts. The change-tracking fields (isFirstCheck, runsObserved) let an agent distinguish "first time I've seen this ASIN" from "this is a real price move" without building its own state store.

For procurement and sourcing teams

Buyers tracking supplier or component pricing across ASINs can pull price, unitsLeft and warehouseAvailability on a schedule to catch stockouts and price movement before they affect a purchase order, using changeBaselineName to keep separate product lists on separate comparison baselines.

How to scrape Amazon Buy Box, stock and price data (step by step)

  1. Open the Amazon Product Details Scraper: Buy Box, Stock & Price Changes Actor on its Apify Store listing.
  2. Provide the required input — asins, a list of ASINs or full product URLs, one entry per product.
  3. Choose the marketplace (marketplaceDomain) and, if you want it, turn on trackChangesBetweenRuns to compare against your previous run.
  4. Start the run from the Console, or trigger it via the Apify API / apify_client / a schedule.
  5. Download the results as JSON or CSV from the run's dataset, or read them with the API.

What to do when Amazon changes its page structure

The Actor is maintained, and the output schema — field names and types — stays stable on your end even when Amazon changes its page markup underneath. No numeric turnaround time is promised here; if a field consistently comes back empty after an Amazon layout change, that's worth reporting through the feedback channel below.

What changed in Amazon's data-access model recently?

Amazon's official product-data APIs have gone through real churn since late 2025. The Product Advertising API (PA-API 5) — the API affiliate tools used for product data — has been deprecated in favor of the new Creators API; as of Amazon's own documentation (checked 2026-08-15), calls against PA-API 5 now return an HTTP 403 directing developers to migrate. On the seller side, Amazon announced a $1,400/year Selling Partner API (SP-API) subscription fee plus per-call usage charges on November 3, 2025, delayed the rollout on January 27, 2026, postponed it indefinitely on March 9, 2026, and withdrew the fee structure entirely on May 12, 2026 (per Amazon's Solutions Partner communications, as reported by novadata.io, checked 2026-08-15).

For teams that need Buy Box price and stock data for ASINs outside their own seller account, neither API was ever the right tool — PA-API is affiliate-scoped and SP-API is seller-scoped to your own catalogue. This Actor's approach (reading the public product page directly) isn't affected by either API's access terms, since it was never routed through them. What's publicly visible on an Amazon product page — price, stock text, seller name — remains accessible the same way; what's changed is the availability and cost of the official programmatic alternatives.

⬇️ Input

The Actor takes one required parameter (asins) and a set of optional switches for price integrity, change tracking, and marketplace/connection settings.

ParameterRequiredTypeConstraintsDescription
asinsYesarray of stringseditor: stringListOne entry per product: an ASIN (B07GBZ4Q68) or a full product URL (https://www.amazon.com/dp/B07GBZ4Q68). Each entry returns one row.
watchAsinsNoarray of stringseditor: stringListAdditional ASINs or product URLs, merged with asins and de-duplicated. Useful for a fixed core list plus ad-hoc products for one run.
requireBuyBoxNobooleandefault falseOff: a product with no featured offer is still returned, with price = null and buyBoxPresent = false. On: that product is skipped entirely, so every returned row carries a real price.
includeUnitPriceNobooleandefault trueReturns pricePerUnit (e.g. $0.32/count) when the product shows one.
includeCouponsNobooleandefault trueReturns couponText with the promotion shown next to the price, e.g. "Coupon: Save 15%".
trackChangesBetweenRunsNobooleandefault trueStores this run's price, stock state, rating and review count per product, and compares the next run against it. The first run for a product reports null deltas and runsObserved = 1 — no history is invented.
changeBaselineNameNostringdefault "default", editor: textfieldKeeps separate comparison baselines apart. Runs sharing a baseline name compare against each other; a new name starts a fresh baseline. Example: weekly-audit.
onlyChangedSinceLastRunNobooleandefault falseEmits a product only when its price, stock state or rating differs from the stored baseline. Products seen for the first time are always emitted.
minPriceChangePercentNointegerdefault 0, min 0, max 100Used with the option above: a product whose price moved by less than this percentage is treated as unchanged. Example: 5 reports only moves of 5% or more.
marketplaceDomainNostring (enum)default "amazon.com", editor: selectThe marketplace to read from — see the full list below. The exit country follows this choice automatically.
pageLanguageNostring (enum)default "", editor: selectRequests the product page in this language. Empty uses the marketplace default.
exitCountryNostring (enum)default "US", editor: selectThe country the marketplace is read from. Amazon shows different prices, delivery figures and offers per country. AUTO follows the marketplace above.
proxyConfigurationNoobjecteditor: proxyConnection settings used to reach the marketplace. Keeping this on is recommended — otherwise prices may be read from an unpredictable country. Prefill: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}.

Legacy compatibility parameters — kept so an input built for the original Amazon Product Details Scraper still runs unchanged. Each is used only when its replacement above is left empty/on AUTO.

ParameterRequiredTypeConstraintsDescription
amazonDomainNostringdefault "amazon.com", editor: textfieldLegacy key for marketplaceDomain.
languageNostring (enum)default ""Legacy key for pageLanguage. Enum: "", "en-US", "en-GB", "de-DE", "fr-FR", "es-ES", "it-IT", "ja-JP", "zh-CN".
proxyCountryNostring (enum)default "AUTO"Legacy key for exitCountry. Enum: "AUTO", "US", "GB", "DE", "FR", "ES", "IT", "CA", "AU", "JP".

marketplaceDomain full enum: amazon.com (United States), amazon.co.uk (United Kingdom), amazon.de (Germany), amazon.fr (France), amazon.es (Spain), amazon.it (Italy), amazon.ca (Canada), amazon.com.au (Australia), amazon.co.jp (Japan), amazon.in (India), amazon.com.mx (Mexico), amazon.nl (Netherlands), amazon.se (Sweden), amazon.pl (Poland), amazon.sg (Singapore), amazon.ae (United Arab Emirates), amazon.sa (Saudi Arabia), amazon.com.br (Brazil), amazon.com.tr (Turkey), amazon.eg (Egypt), amazon.ie (Ireland), amazon.com.be (Belgium).

pageLanguage full enum: "" (marketplace default), en-US, en-GB, de-DE, fr-FR, es-ES, it-IT, ja-JP, zh-CN.

exitCountry full enum: AUTO (follow the marketplace), US, GB, DE, FR, ES, IT, CA, AU, JP, IN, MX, NL, SE, PL, SG, AE, SA, BR, TR, EG, IE, BE.

Example input:

{
"asins": ["B07GBZ4Q68", "B01N5IB20Q"],
"watchAsins": [],
"requireBuyBox": false,
"includeUnitPrice": true,
"includeCoupons": true,
"trackChangesBetweenRuns": true,
"changeBaselineName": "weekly-audit",
"onlyChangedSinceLastRun": false,
"minPriceChangePercent": 5,
"marketplaceDomain": "amazon.com",
"pageLanguage": "en-US",
"exitCountry": "US",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

⚠️ The most common input mistake is turning proxyConfiguration off, or leaving exitCountry on AUTO while switching marketplaceDomain between regions. Amazon shows different prices per exit country for the same ASIN, so an unpinned connection can silently return a price from the wrong country.

⬆️ Output

Results are written to the run's dataset as one JSON row per submitted ASIN, and can be exported as JSON, CSV, Excel, or the other formats the dataset export supports. The dataset's default view surfaces 38 of these columns as a table; every field below is present in the underlying row.

Scraped product row (page read successfully)

FieldTypeDescription
typestringAlways "product".
asinstringThe product's ASIN.
urlstringThe product page URL that was fetched.
titlestring | nullProduct title.
manufacturerstring | nullBrand, read from the product details table or byline.
amazonDomainstringThe marketplace domain used for this row.
statusCodenumber200 for a successfully read page.
statusMessagestring"FOUND" (title and either a buy box or a confirmed unavailable state), "PARTIAL" (title found but no buy box/stock signal), or "NOT_FOUND".
successbooleanfalse only when statusMessage is "NOT_FOUND".
scrapedAtstringUTC timestamp of the fetch, ISO 8601.
buyBoxPresentbooleanWhether a featured-offer price was found.
priceSourcestring"buy-box" or "unavailable".
pricenumber | nullThe featured-offer (Buy Box) price.
listPricenumber | nullThe struck-through / "was" price, when shown.
listPriceSourcestring"list-price" or "unavailable".
retailPricenumber | nullSame value as listPrice.
priceSavingnumber | nulllistPrice - price, when both are known.
savingsPercentnumber | nullDiscount percentage, when both prices are known.
pricePerUnitstring | nulle.g. "$0.32/count". Returned only when includeUnitPrice is on.
couponTextstring | nullCoupon/promo text next to the price. Returned only when includeCoupons is on.
warehouseAvailabilitystring | nullRaw availability text as shown on the page.
inStockboolean | nullnull when availability could not be determined.
stockStatusstring"in-stock", "limited", "unavailable", or "unknown".
unitsLeftnumber | nullParsed from "Only N left" wording, when present.
soldBystring | nullSeller name behind the featured offer.
shipsFromstring | nullFulfillment source text.
fulfilledBystring | nullSame value as shipsFrom.
sellerIdstring | nullSeller ID parsed from a seller link, when present.
deliveryMessagestring | nullDelivery estimate/cost text as shown.
priceShippingInformationstring | nullSame value as deliveryMessage.
shippingPricenumber | nullParsed shipping cost, 0.0 when marked free.
productRatingstring | nullRaw rating text, e.g. "4.6 out of 5 stars".
ratingValuenumber | nullNumeric rating parsed from productRating.
countReviewnumber | nullTotal review count shown on the page.
featuresarray of strings"About this item" bullet points.
aboutProductarray of {name, value}Product overview table rows.
productDetailsarray of {name, value}Merged attribute set from all detail layouts on the page.
productSpecificationarray of {name, value}Specification table rows specifically.
attributeCountnumberCount of productDetails entries.
productDescriptionstringProduct description block text (empty string if none).
imageUrlListarray of stringsAll gallery image URLs found.
mainImageobject{imageUrl, width, height, imageResolution}.
mainImageUrlstring | nullSame URL as mainImage.imageUrl.
videoeUrlListarray of stringsGallery video URLs (.mp4/.m3u8). Field name as returned by the Actor.
variationsarray of {variationName, values: [{value, asin, dpUrl, selected, available, price, imageUrl}]}Variant options (size/color/etc.), when the page exposes them.
bookVariationsarray of {format, price, asin, url}Book/media format-and-edition swatches.
categoriesExtendedarray of {name, url, node}Breadcrumb category trail.
importantInformationarray of stringsSafety/legal/ingredient notices, when present.
pastSalesstringSocial-proof "bought in past month" text, empty string if absent.
reviewsarray of {text, date, rating, title, userName, url, reviewId, reviewCountry, verifiedPurchase}Individual reviews rendered on the product page itself.
reviewsOnPagenumberCount of review nodes found on the page.
languagestringPresent only when pageLanguage/language was set.
proxyCountrystringPresent only when exitCountry/proxyCountry was set to something other than AUTO.

Change-tracking fields — always present, either as real deltas or as nulls (see the change-tracking note below):

FieldTypeDescription
isFirstCheckboolean | nulltrue on the first run seen for this ASIN under this baseline; null when trackChangesBetweenRuns is off.
previousPricenumber | nullPrice recorded on the previous run.
priceChangenumber | nullprice - previousPrice.
priceChangePctnumber | nullPercentage change vs. the previous run.
previousStockStatusstring | nullstockStatus from the previous run.
availabilityChangedboolean | nullWhether stock status differs from the previous run.
ratingChangedboolean | nullWhether the numeric rating differs from the previous run.
reviewCountChangenumber | nullChange in countReview vs. the previous run.
runsObservednumber | nullHow many runs this ASIN/baseline combination has been seen in.
firstSeenAtstring | nullTimestamp of the first run this ASIN/baseline was seen.
lastChangedAtstring | nullTimestamp of the most recent run where something actually changed.

⚠️ Products that couldn't be read are pushed with fewer fields, not null-filled ones. When a page returns a 404 or stays unreadable after retries, the row carries only identity, price/stock/seller fields (all null) and statusCode/statusMessage/success — catalogue fields like manufacturer, features, reviews, imageUrlList, variations and the rest are absent from the row entirely, not set to null. Check for the key's presence, not just its value, if your pipeline expects it.

Product that couldn't be read (blocked or delisted)

{
"type": "product",
"asin": "B000000000",
"url": "https://www.amazon.com/dp/B000000000",
"title": null,
"amazonDomain": "amazon.com",
"scrapedAt": "2026-08-15T09:12:41Z",
"statusCode": 404,
"statusMessage": "NOT_FOUND",
"success": false,
"buyBoxPresent": false,
"priceSource": "unavailable",
"price": null,
"listPrice": null,
"listPriceSource": "unavailable",
"retailPrice": null,
"priceSaving": null,
"savingsPercent": null,
"pricePerUnit": null,
"couponText": null,
"warehouseAvailability": null,
"inStock": null,
"stockStatus": "unknown",
"unitsLeft": null,
"soldBy": null,
"shipsFrom": null,
"fulfilledBy": null,
"sellerId": null,
"isFirstCheck": null,
"previousPrice": null,
"priceChange": null,
"priceChangePct": null,
"previousStockStatus": null,
"availabilityChanged": null,
"ratingChanged": null,
"reviewCountChange": null,
"firstSeenAt": null,
"lastChangedAt": null,
"runsObserved": null
}

⚠️ Every row consumes one row_result charged event — including this one. The Actor charges row_result for every row it pushes, whether the product was read successfully or came back 404/blocked. There is no separate uncharged accounting event. The only way to avoid paying for unreadable products is requireBuyBox: true, which also skips real products that simply have no featured offer — so it trades away legitimate no-Buy-Box rows to filter out the failed ones.

How many products can you scrape with this Actor?

There is no hard cap in the Actor itself on how many ASINs you submit to asins/watchAsins in a single run — each entry becomes one row. Products are processed sequentially, one page fetch at a time, with a randomized 0.8–2 second pause between products and up to four fetch attempts per product (exponential backoff with jitter) before it's marked unavailable and moved past. There is no result pagination to configure, since output is one row per submitted ASIN rather than a search feed.

Integrate this Amazon scraper and automate your workflow

This Actor works with any language or tool that can send an HTTP request, since it runs on the Apify platform like every other Apify Actor.

REST API integration

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run_input = {
"asins": ["B07GBZ4Q68", "B01N5IB20Q"],
"trackChangesBetweenRuns": True,
"marketplaceDomain": "amazon.com",
}
run = client.actor("amazon-product-details-scraper-buy-box-stock-and-price-changes").call(
run_input=run_input
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["asin"], item["price"], item["stockStatus"])

Works in Python, Node.js, Go, Ruby, or cURL against the same Apify API endpoint.

Automation platforms (n8n, Make, LangChain)

Apify's own Apify node for n8n and Apify app for Make can run this Actor by ID and pass its dataset downstream in either platform's workflow builder, without writing a custom HTTP request node. For LangChain-based pipelines, the apify-client package (or the ApifyWrapper utility documented in LangChain's own integration docs) can call this Actor and load its dataset directly into a chain or agent tool.

Scraping publicly available Amazon product pages for pricing and stock data is generally lawful; this Actor only returns what an unauthenticated browser can already see — no login-gated pricing, no Seller Central data, no private account information. Amazon's product listings, prices and stock levels are business/product data, governed by Amazon's own Terms of Service and by database-rights law in relevant jurisdictions, not by GDPR — GDPR governs personal data, and a price/stock feed keyed by ASIN isn't that. The one place personal data can appear is the optional reviews field, which carries a reviewer's displayed username exactly as Amazon shows it publicly on the page; treat that field as personal data if you store or process it. Consult legal counsel for commercial use cases, especially ones involving reseller enforcement or bulk data retention.

Frequently asked questions

Does this Actor work without an Amazon account?

Yes. It reads public product pages the same way an unauthenticated visitor would — no Amazon login, Associate account, or Seller Central credentials are needed.

How often is the data updated? Is this a live fetch?

Every run fetches the current product page live; nothing is cached or served from a stored snapshot. The optional change-tracking feature (trackChangesBetweenRuns) compares this run's live result against the values stored from your previous run of the same baseline — it isn't a historical price-tracking service, and there's no data before your first run.

What happens when a product has no Buy Box, or is out of stock?

By default the product is still returned, with price = null, buyBoxPresent = false, and whatever stockStatus the page shows. Set requireBuyBox: true if you only want rows that carry a real price — that setting skips products with no featured offer entirely.

The row comes back with success: false and statusMessage of "NOT_FOUND" (a genuine 404) or "UNAVAILABLE" (the page couldn't be confirmed readable after retries). These rows carry only identity and null price/stock fields — catalogue fields like reviews or imageUrlList are simply absent rather than null — and they still consume a row_result charged event.

Can I scrape login-gated or restricted Amazon content?

No. Only what a public, unauthenticated product page shows is returned — no wholesale/business pricing behind a login, no Seller Central inventory data, no data requiring an Amazon account.

Can I track the same ASINs against more than one comparison baseline?

Yes. changeBaselineName keys the stored comparison history, so weekly-audit and competitor-watch build up entirely separate change histories for the same ASINs, without one overwriting the other.

Does this Actor work for AI agent workflows and LLM pipelines?

Yes. It's callable as an HTTP endpoint (via the Apify API or apify_client) by any agent framework, and every response is typed JSON with stable field names — no HTML or selectors to strip before handing results to an LLM.

How does it handle Amazon's anti-bot defenses?

The Actor routes requests through Apify Proxy, escalating to a residential proxy group automatically after a failed attempt if you haven't already chosen a proxy group yourself. It detects and retries against known challenge/CAPTCHA response pages and short-circuits on confirmed 404s rather than retrying a dead link, using exponential backoff with jitter across up to four attempts per product.

Why does a row's statusMessage show "PARTIAL" instead of "FOUND"?

"PARTIAL" means the product title was found but the page showed neither a confirmed Buy Box price nor a confirmed unavailable state — usually a page that rendered incompletely. "FOUND" requires either a real Buy Box price or a clearly confirmed unavailable status alongside the title.

Can I use this Actor without managing proxies?

Yes — proxyConfiguration uses Apify Proxy and comes pre-filled with a residential proxy group. Leaving it on is recommended: turning it off removes country pinning, and Amazon prices vary by exit country for the same ASIN.

What happens when Amazon changes its page structure?

The Actor is maintained on an ongoing basis, and the output schema — field names and types — stays stable on your end even after an Amazon markup change. No specific turnaround time is promised.

💬 Your feedback

Found a bug, or a field that's coming back empty on a product that clearly has it? Open an issue from this Actor's Issues tab in Apify Console, or reach out through the API-Empire Store listing — reports of real, reproducible field mismatches are the fastest way to get them fixed.