amazon-product-scraper-with-coupon-deal-prices
Pricing
Pay per usage
amazon-product-scraper-with-coupon-deal-prices
Scrape detailed Amazon product data with the Amazon Product Scraper. Extract titles, prices, descriptions, images, ratings, reviews, and stock info. Perfect for market research, competitor analysis, and price monitoring. Fast, accurate, and scalable for single or bulk products.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Amazon Product Scraper — Prices, Coupons & Deal Data
Amazon Product Scraper — Coupons & Deal Prices reads any Amazon search, category, or product URL and returns structured product data plus the layer most Amazon scrapers skip: clip coupons, deal badges, Subscribe & Save discounts, and the real final price after a coupon is applied. Every row is typed JSON — ASIN, price, rating, stock, and the full coupon/deal breakdown — ready to load into a spreadsheet, a repricing model, or hand straight to an LLM as grounding context. Point it at a keyword search to sweep a category, or at a list of /dp/ product pages to price-check known ASINs, then filter down to only the listings that are actually on sale.
What is Amazon Product Scraper — Coupons & Deal Prices?
It's an Apify Actor that opens Amazon search results, category listings, and individual product pages and extracts both the standard product record (title, price, rating, stock, images, seller) and a dedicated coupon-and-deal layer: whether a clip coupon is attached, its value, the deal badge text, any Subscribe & Save discount, and the computed final price after the coupon is applied at checkout. This is the section competing Amazon scrapers generally don't cover — the two closest Store listings return a list price and a computed discount percentage, but neither documents extracting a clip coupon object or a Subscribe & Save discount. No Amazon account, login, or Product Advertising API key is required — the Actor reads the same public, logged-out HTML any visitor gets, routed through Apify Proxy.
Key capabilities:
- 🔎 Two entry modes — an Amazon search/category URL (
https://www.amazon.com/s?k=...) to sweep many products, or a direct/dp/product URL for one ASIN. Any on-site facet (price, brand, rating) works in the search URL, and switching the domain (amazon.de,amazon.co.uk, …) switches marketplace automatically. - 🎟️ Coupon and deal extraction — clip coupons (
coupon), deal badges (dealType), Subscribe & Save (subscribeSaveDiscount), sticker discount (discountPercent), and the coupon-adjustedfinalPrice. - 📉 Built-in bargain filters —
minDiscountPercentanddealsOnlykeep only real deals; filtered-out products are still written to the dataset as uncharged accounting rows so a "100 in, 8 out" run is auditable, not broken-looking. - 🌍 Any Amazon marketplace and language —
proxyCountry,countryCode,zipCode, andlanguagetune the delivery location and locale the scraper sees. - 🧩 Optional depth on demand — per-offer seller listings (
maxOffers), seller detail lookups (scrapeSellers), variant price checks (scrapeProductVariantPrices), and up to N variants pulled as their own dataset rows (maxProductVariantsAsSeparateResults). - 🤖 Captcha handling — an optional CapSolver-backed solver for Amazon's image captcha, scoped to the
.comdomain.
🏷️ What data can you get with Amazon Product Scraper — Coupons & Deal Prices?
A single run can return five kinds of Amazon data, all keyed to the product ASIN so they join cleanly in a spreadsheet or a database.
| Result type | Extracted fields | Primary use case |
|---|---|---|
| Coupon & deal pricing | coupon, couponText, dealType, dealBadgeText, discountPercent, finalPrice, totalDiscountPercent, subscribeSaveDiscount, passedDiscountFilter | Deal feeds, bargain alerts, affiliate promotions |
| Product core | title, asin, price, listPrice, brand, stars, starsBreakdown, reviewsCount, inStock, breadCrumbs, features, productOverview, images | Catalog research, listing audits, price monitoring |
| Offers | offers[].price, offers[].shippingPrice, offers[].condition, offers[].isPrime, offers[].seller | Buy-box and multi-seller comparison |
| Sellers | seller.id, seller.name, seller.businessName, seller.phone, seller.address, seller.averageRating, seller.reviewsCount | Third-party seller vetting |
| Search/category ranking | categoryPageData.productPosition, categoryPageData.isSponsored, categoryPageData.bestsellerBadge, bestsellerRanks | Organic-vs-sponsored share, category rank tracking |
🎟️ Coupons & deal prices
This is the layer the Actor is built around. For every product page it opens, the scraper reads the buy-box/core-price container (#corePriceDisplay_desktop_feature_div, #buybox, and related containers — never the "customers also viewed" carousel), looks for a clip-coupon label, a deal badge, and a Subscribe & Save offer, then computes two discount numbers: discountPercent (sticker price vs. list price) and totalDiscountPercent (the best combined discount off list once the coupon is stacked on top of any deal price). The result is merged into every detail row:
{"coupon": {"available": true,"value": 10,"isPercent": true,"type": "percent","text": "Apply 10% coupon","appliedAtCheckout": true},"couponText": "Apply 10% coupon","dealType": "Limited time deal","discountPercent": 20,"finalPrice": { "value": 35.99, "currency": "$" },"totalDiscountPercent": 28.0,"subscribeSaveDiscount": { "available": false, "percent": null, "price": null },"passedDiscountFilter": true}
Coupons, deal badges, and Subscribe & Save appear only on the subset of listings Amazon actually shows them on — every field is null/false when absent, never guessed. Live deal countdowns and "% claimed" counters are JavaScript-hydrated on Amazon's side and are out of scope; only the deal badge label is captured.
📦 Product & pricing core
Every product also carries the standard record you'd expect from a general-purpose Amazon scraper: title, asin, price, listPrice, brand, stars plus a starsBreakdown percentage-by-star-count map, reviewsCount, inStock/inStockText, breadCrumbs, features, a productOverview key/value spec list, image URLs, delivery estimates, return policy text, and — when scrapeProductDetails is on — A+ content and brand-story text. This core object is a superset of what a plain Amazon product scraper returns; the coupon/deal fields above are merged on top of it, not shipped separately.
How does this differ from Amazon's own Product Advertising API?
Amazon's Product Advertising API (PA-API) is the platform's official product-data feed, but it's built for Associates running an approved affiliate account, not for open price and deal research — it's gated behind Associates Program enrollment and qualifying sales activity, and its published response schema does not document a clip-coupon, deal-badge, or Subscribe & Save field. Amazon Product Scraper — Coupons & Deal Prices works from the same public pages any shopper sees, with no Associates account, no approval wait, and no sales-eligibility requirement.
| Feature | Amazon Product Advertising API | This Actor |
|---|---|---|
| Access requirement | Approved Amazon Associates account with qualifying sales | Apify account only |
| Setup | API credentials + Associates approval process | Enter URLs, click Start |
| Coupon / clip-coupon data | Not part of the published response schema | coupon object with value, type, text |
| Deal badge / Subscribe & Save | Not part of the published response schema | dealType, subscribeSaveDiscount |
| Arbitrary competitor ASINs | Restricted to catalog items tied to your Associates use case | Any public product, search, or category URL |
| Output format | Amazon-defined XML/JSON schema | Flat Apify dataset — JSON, CSV, Excel, or API |
Use the PA-API when you're an approved Associate building an affiliate storefront against Amazon's own catalog feed. Use this Actor when you need coupon/deal data, arbitrary competitor coverage, or simply don't have (or want) Associates access.
What's the difference between the sticker discount and the total discount on Amazon?
The sticker discount is what a strike-through price implies; the total discount is what you actually pay once a clip coupon is stacked on top. discountPercent is computed purely from the buy-box current price against Amazon's own strike-through list price — it's the number Amazon itself is advertising. totalDiscountPercent goes one step further: it takes finalPrice (the buy-box price after the clip coupon is applied) and compares that against the list price, or against the pre-coupon price when no list price is shown. A product can show a 0% sticker discount and still be a real bargain once a coupon is clipped — discountPercent would read null while totalDiscountPercent reflects the coupon alone.
This distinction matters for filtering: minDiscountPercent is evaluated against totalDiscountPercent, not the sticker number, so a coupon-only deal with no visible strike-through price still passes the filter. dealsOnly is broader still — it keeps a row if there's any real deal signal (a discount, a coupon, a deal badge, or a Subscribe & Save offer), independent of the discount math. Both numbers are returned side by side on every row so you can decide which one your workflow cares about.
How to scrape Amazon coupons and deal prices with this Actor
- Open Amazon Product Scraper — Coupons & Deal Prices on the Apify Store and click Try for free (or Start, if you're already subscribed to the account).
- Enter one or more URLs in
categoryOrProductUrls— a search page (https://www.amazon.com/s?k=headphones), a category listing, or a direct product page (https://www.amazon.com/dp/B0B3BVWJ6Y). - Set the real query controls you need:
minDiscountPercentfor a discount floor,dealsOnlyto keep only listings with a live deal signal,language/countryCode/zipCodefor locale, andproxyCountryif you need to force a specific proxy exit country. - Click Start and watch the run — results stream into the default dataset in real time, and the Console log reports each product as it's scraped.
- Download the dataset as JSON, CSV, or Excel from the Storage tab, or pull it programmatically with the Apify API /
apify-client.
{"categoryOrProductUrls": ["https://www.amazon.com/s?k=headphones"],"minDiscountPercent": 20,"dealsOnly": true,"maxItemsPerStartUrl": 25}
How to run multiple URLs in one job
categoryOrProductUrls is an array — add as many search, category, or product URLs as you want and they're processed one after another in the same run, each governed by the same maxItemsPerStartUrl / maxSearchPagesPerStartUrl ceiling. Mix a category-sweep URL with a handful of known /dp/ product pages in one input to cover both discovery and tracking in a single job. Per-product concurrency is capped by maxConcurrentRequests (1–20, default 10) and applies across the whole run, not per start URL.
⬇️ Input
All fields below are read from .actor/actor.json — names, types, defaults, and constraints are reproduced exactly.
| Parameter | Required | Type | Default / constraints | Description |
|---|---|---|---|---|
categoryOrProductUrls | Yes | array of string | — (stringList editor) | Amazon search, category, or product URLs to check for coupons and deal prices. A search URL sweeps many products; a /dp/ URL checks one. Any Amazon domain switches marketplace automatically. |
maxItemsPerStartUrl | No | integer | default 10, minimum 0 | How many products to scrape and price-check per start URL before stopping. |
minDiscountPercent | No | integer | default 0, minimum 0, maximum 100 | Keep only products whose totalDiscountPercent (deal price + coupon combined) is at least this percent. 0 keeps everything. |
dealsOnly | No | boolean | default false | Keep only products with a real deal signal — a discount, a clip coupon, a deal badge, or a Subscribe & Save offer. |
language | No | string (enum, nullable) | no default | Site language. One of 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. If the chosen language isn't supported on the target domain, the scraper falls back to that domain's default. |
proxyCountry | No | string (enum) | default AUTO_SELECT_PROXY_COUNTRY | Proxy exit country — 252 enum values including AUTO_SELECT_PROXY_COUNTRY and NO_PROXY, plus the full ISO country list (e.g. US, GB, DE, IN). Auto mode matches the proxy country to the Amazon TLD in the first start URL. |
maxSearchPagesPerStartUrl | No | integer | default 9999, minimum 1 | Maximum search-result pages to paginate through per start URL. The scraper stops when either this or maxItemsPerStartUrl is reached, whichever comes first. |
maxProductVariantsAsSeparateResults | No | integer | minimum 0, no schema default (effectively off) | Maximum number of product variants to scrape and output as their own dataset rows. Most variant changes are already available via variantAsins; this is for when you need each variant's full detail page. |
maxOffers | No | integer | default 0, minimum 0 | Maximum number of per-seller offers to scrape per product (populates offers). 0 skips the offers request entirely. |
scrapeSellers | No | boolean | default false | Fetch seller detail (business name, phone, address, rating) for the featured-offer seller, and for every offer's seller when combined with maxOffers. |
ensureLoadedProductDescriptionFields | No | boolean | default false | Force-load seller-editable fields (description, aPlusContent, attributes) that Amazon sometimes hides as a blocking response. Increases request volume. |
useCaptchaSolver | No | boolean | default false | Auto-solve Amazon's image captcha via CapSolver. Works reliably only on the .com domain; some fields (attributes, manufacturer attributes, bestseller ranks) may still be missing on a solved page. |
scrapeProductVariantPrices | No | boolean | default false | Fetch and return the price of each variant ASIN separately (priceVariants). |
scrapeProductDetails | No | boolean | default true | On (default): opens every product page and extracts coupons, deal badges, Subscribe & Save, and discount math. Off: a fast lightweight pass returning only basic search-tile fields — no coupon or deal data at all. |
maxConcurrentRequests | No | integer | default 10, minimum 1, maximum 20 | Concurrent product-page requests. |
countryCode | No | string (enum, nullable) | no default | Delivery-location country code (240 ISO values) used for localized pricing and availability. |
zipCode | No | string | nullable | Delivery-location zip/postal code — more precise than countryCode alone in larger countries. |
locationDeliverableRoutes | No | array of string (enum) | default ["PRODUCT", "SEARCH", "OFFERS"] | Which page types (PRODUCT, SEARCH, OFFERS) the delivery-location settings apply to. Narrowing this speeds up runs where localized data isn't needed on every page type. |
proxyConfiguration | No | object (proxy editor) | prefilled { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] } | Apify Proxy configuration. Residential is recommended for the lowest block rate. |
Common pitfall: minDiscountPercent and dealsOnly only work when scrapeProductDetails is left on (the default). Turning scrapeProductDetails off switches to a fast search-tile-only pass that never fetches a product page, so no coupon, deal, or discount data is computed — every row is charged and the deal filters have no effect. If you need coupon or deal filtering, scrapeProductDetails must stay true.
⬆️ Output
Each dataset row is one product — a flat JSON object with the product core, offers, seller detail, and the coupon/deal layer merged together. Export as JSON, CSV, or Excel from the Apify Console, or stream it via the API/apify-client. Filtered-out products (when minDiscountPercent or dealsOnly is active) are written with passedDiscountFilter: false and are not charged — filter a downloaded dataset on passedDiscountFilter == true to see only the rows you paid for.
Scraped results
[{"title": "Wireless Over-Ear Headphones, Active Noise Cancelling","url": "https://www.amazon.com/dp/B0EXAMPLE1","asin": "B0EXAMPLE1","originalAsin": "B0EXAMPLE1","price": { "value": 39.99, "currency": "$" },"inStock": true,"inStockText": "In Stock","listPrice": { "value": 49.99, "currency": "$" },"brand": "AudioMax","shippingPrice": null,"stars": 4.5,"starsBreakdown": { "5star": 0.68, "4star": 0.19, "3star": 0.07, "2star": 0.03, "1star": 0.03 },"reviewsCount": 12480,"answeredQuestions": 214,"breadCrumbs": "Electronics > Headphones > Over-Ear Headphones","visitStoreLink": { "text": "Visit the AudioMax Store", "url": "https://www.amazon.com/stores/AudioMax" },"thumbnailImage": "https://m.media-amazon.com/images/I/71abc.jpg","galleryThumbnails": ["https://m.media-amazon.com/images/I/71abc.jpg"],"highResolutionImages": ["https://m.media-amazon.com/images/I/71abc._AC_SL1500_.jpg"],"description": "Premium over-ear headphones with 40-hour battery life...","features": ["Active noise cancelling", "40-hour battery", "Bluetooth 5.3"],"productOverview": [{ "key": "Connectivity", "value": "Bluetooth" }],"variantAsins": ["B0EXAMPLE2", "B0EXAMPLE3"],"reviewsLink": "/product-reviews/B0EXAMPLE1?reviewerType=all_reviews","hasReviews": true,"delivery": "Tuesday, July 28","fastestDelivery": "Monday, July 27","returnPolicy": "Free returns within 30 days","seller": { "id": "A1B2C3D4E5", "url": "https://www.amazon.com/sp?seller=A1B2C3D4E5", "name": "AudioMax Official", "businessName": null, "phone": null, "address": null },"bestsellerRanks": [{ "rank": 42, "category": "Over-Ear Headphones" }],"isAmazonChoice": true,"amazonChoiceText": "Amazon's Choice","priceRange": null,"aPlusContent": "Engineered for all-day comfort...","monthlyPurchaseVolume": "1K+ bought in past month","locationText": "Deliver to New York 10001","loadedCountryCode": "US","offers": [],"unNormalizedProductUrl": "https://www.amazon.com/s?k=headphones","categoryPageData": { "pageNumber": 1, "saleSummary": null, "isSponsored": false, "bestsellerBadge": null, "productPosition": 1 },"input": "https://www.amazon.com/s?k=headphones","discountPercent": 20,"finalPrice": { "value": 35.99, "currency": "$" },"coupon": { "available": true, "value": 10, "isPercent": true, "type": "percent", "text": "Apply 10% coupon", "appliedAtCheckout": true },"couponText": "Apply 10% coupon","dealType": "Limited time deal","dealBadgeText": "Limited time deal","subscribeSaveDiscount": { "available": false, "percent": null, "price": null },"totalDiscountPercent": 28.0,"passedDiscountFilter": true},{"title": "Compact Bluetooth Speaker, Waterproof","asin": "B0EXAMPLE4","price": { "value": 24.99, "currency": "$" },"listPrice": null,"discountPercent": null,"finalPrice": { "value": 24.99, "currency": "$" },"coupon": { "available": false, "value": null, "isPercent": null, "type": null, "text": null, "appliedAtCheckout": true },"couponText": null,"dealType": null,"subscribeSaveDiscount": { "available": false, "percent": null, "price": null },"totalDiscountPercent": null,"passedDiscountFilter": false},{"title": "Organic Coffee Pods, 100-Count","asin": "B0EXAMPLE5","price": { "value": 22.49, "currency": "$" },"listPrice": { "value": 29.99, "currency": "$" },"discountPercent": 25,"finalPrice": { "value": 22.49, "currency": "$" },"coupon": { "available": false, "value": null, "isPercent": null, "type": null, "text": null, "appliedAtCheckout": true },"dealType": "Deal of the Day","subscribeSaveDiscount": { "available": true, "percent": 15, "price": 19.12 },"totalDiscountPercent": 25.0,"passedDiscountFilter": true}]
Fields the source code carries on every row but does not currently populate — author, bookDescription, aiReviewsSummary, attributes, variantDetails, variantAttributes, manufacturerAttributes, productPageReviews, productPageReviewsFromOtherCountries, and videosCount — are always returned as null, [], or 0 rather than omitted, so the row shape stays consistent even when a value isn't available. When scrapeProductDetails is false, the row shape is much smaller: only asin, title, url, thumbnailImage, price, stars, reviewsCount, isSponsored, and a lighter categoryPageData (productPosition, isSponsored) are returned — no coupon or deal fields at all. When a run scrapes more than one start URL, input/unNormalizedProductUrl on every row currently reflects the first URL in categoryOrProductUrls, not necessarily the specific URL that produced that row — use asin and url to track provenance in multi-URL runs.
How can I use Amazon coupon and deal-price data?
- 🛍️ Deal-hunting & affiliate publishers: filter a category sweep with
dealsOnly: trueand aminDiscountPercentfloor, then publishfinalPriceandcouponTextas a live "today's deals" feed without hand-checking each listing. - 💰 Repricing & competitive intelligence teams: track
price,listPrice, andtotalDiscountPercentfor a fixed ASIN list across scheduled runs to see when a competitor drops price or clips a new coupon. - 🤖 AI engineers and LLM developers: the agent issues a query (a keyword or ASIN list), receives typed JSON with
finalPriceandcouponalready computed, and passes it to the model as grounded context — no prompt-side price parsing required. - 📊 Market researchers: use
totalDiscountPercentandsubscribeSaveDiscountacross a category to measure how deep and how common real discounting is versus sticker-price theater.
📈 How do you monitor Amazon coupons and deal prices over time?
Deal monitoring here means diffing the coupon/deal layer between runs on the same ASIN list or search query, not treating a single scrape as the answer. Amazon adds and removes clip coupons, starts and ends deal badges, and adjusts Subscribe & Save percentages independently of the sticker price, so a single snapshot only tells you what's true right now. Run the same categoryOrProductUrls on a schedule and diff finalPrice, couponText, dealType, and totalDiscountPercent between consecutive runs, keyed on asin — a coupon that disappears, a dealType that flips from null to "Limited time deal", or a totalDiscountPercent that jumps are all real, actionable events.
A practical loop: schedule a run across a fixed keyword set or ASIN list → keep the last run's dataset (or export it to your own store) → compare asin-by-asin on the fields above → alert when passedDiscountFilter flips from false to true, which means a product just crossed your minDiscountPercent threshold. Set dealsOnly: true on the recurring run itself to keep every scheduled pull down to just the deals worth re-checking.
For the recurring part, use Apify's built-in Schedule feature (Apify Console → Schedules) to run the same input on a cron interval — no external orchestrator required. Pair it with the Apify API or a webhook on run completion to pull the fresh dataset into your own alerting pipeline.
Integrate Amazon Product Scraper — Coupons & Deal Prices and automate your workflow
Amazon Product Scraper — Coupons & Deal Prices works with any language or tool that can send an HTTP request through the Apify API.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("<YOUR_USERNAME>/amazon-product-scraper-with-coupon-deal-prices").call(run_input={"categoryOrProductUrls": ["https://www.amazon.com/s?k=headphones"],"dealsOnly": True,"minDiscountPercent": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["asin"], item.get("finalPrice"), item.get("couponText"))
Run it once to get a snapshot, or wrap the same call in your own scheduler for repeated pulls.
Scheduled monitoring and delivery
Use Apify's Schedules (Console → Schedules, or the /actor-tasks + schedule API) to re-run the same input on a cron interval without any code of your own. Combine a schedule with an Apify webhook on the ACTOR.RUN.SUCCEEDED event to push the fresh dataset URL to your own endpoint the moment each run finishes, or simply poll the dataset via the API on your own interval.
Is it legal to scrape Amazon product, coupon and deal data?
Yes — scraping publicly accessible Amazon product pages for prices, coupons, and deal data is generally lawful; this Actor returns only what any visitor to Amazon.com already sees in their browser. The relevant U.S. precedent is hiQ Labs, Inc. v. LinkedIn Corp., 938 F.3d 985 (9th Cir. 2019), which held that scraping data from a publicly accessible website does not, on its own, violate the Computer Fraud and Abuse Act. Product listings, prices, and coupon text are business/catalog data, not personal data about an identifiable individual, so this is a terms-of-service and database-rights question rather than a GDPR/CCPA one — Amazon's Conditions of Use restrict automated access, and repeated or bulk collection can carry contractual risk independent of any statute. Scraping for one-off price research and scraping to build a persistent, redistributed dataset carry different risk profiles. Consult your legal team for commercial use cases involving bulk data storage or redistribution.
❓ Frequently asked questions
Which Amazon marketplaces and languages does it support?
Any Amazon domain reachable in a URL — pass an amazon.de, amazon.co.uk, amazon.in, etc. URL in categoryOrProductUrls and the scraper follows that marketplace automatically. language (24 supported codes) tunes the site language where the target domain supports it; countryCode and zipCode tune the delivery location for localized pricing and availability; proxyCountry (252 values, default AUTO_SELECT_PROXY_COUNTRY) picks the Apify Proxy exit country, auto-matched to the first URL's Amazon TLD by default.
How many products does it return per URL?
Up to maxItemsPerStartUrl (default 10) per start URL, or until maxSearchPagesPerStartUrl (default 9999 pages) is exhausted — whichever limit is hit first. There is no separate platform-imposed result cap beyond what Amazon's own search pagination returns. Per-run request concurrency is capped at maxConcurrentRequests (max 20); internally the scraper caps its warmed session pool at 12 concurrent sessions regardless of how high maxConcurrentRequests is set, so raising concurrency past 12 does not scale linearly.
How does the scraper handle Amazon's anti-bot measures?
It impersonates a real Chrome TLS/HTTP fingerprint per session (matched User-Agent, sec-ch-ua, and TLS profile), warms each session on the Amazon homepage before it's used, and keeps sessions sticky to one proxy IP until they're recycled (after ~200 requests, a sustained block rate, or roughly nine minutes). Blocked or captcha'd requests are retried with exponential backoff and randomized jitter, and the whole run backs off further if its rolling block rate crosses roughly 25%. useCaptchaSolver adds an optional CapSolver-backed image-captcha solve on top of that, scoped to the .com domain.
Does it extract clip coupons and Subscribe & Save discounts?
Yes — every product row scraped with scrapeProductDetails on (the default) carries a coupon object (available, value, isPercent, type, text) and a subscribeSaveDiscount object (available, percent, price). Both are only populated when Amazon actually shows that offer on the page; otherwise available is false and the rest are null.
What's the difference between minDiscountPercent and dealsOnly?
minDiscountPercent is a numeric floor evaluated against totalDiscountPercent — set it to 25 to keep only products at least 25% off combined (deal price plus coupon). dealsOnly is a broader boolean switch that keeps any product with a real deal signal — a discount, a coupon, a deal badge, or a Subscribe & Save offer — even if the combined discount percentage is small or unset. They can be combined; a row must pass both active filters to be charged.
Do I need an Amazon account or Product Advertising API key?
No. The Actor reads Amazon's public, logged-out pages — no Amazon account, login session, or Product Advertising API credentials are required.
How do I monitor Amazon deals and coupons over time?
Run the same categoryOrProductUrls on an Apify Schedule, keep dealsOnly: true (or your minDiscountPercent floor) on the recurring input, and diff finalPrice, couponText, dealType, and totalDiscountPercent between runs by asin. A passedDiscountFilter flip from false to true is the signal that a product just became a real deal.
Does it work with Claude, ChatGPT and AI agent frameworks?
Yes, as an HTTP endpoint — any agent framework that can call the Apify API or apify-client can trigger a run, poll the dataset, and use the coupon/deal fields as grounded, structured context before answering a user's price question.
How does it compare to other Amazon scrapers?
As checked on the Apify Store on 2026-07-26, harvestlab/amazon-scraper's listing advertises Best-Sellers-Rank time-series tracking, rank-change webhooks, and multi-provider AI competitive analysis across 19 marketplaces, and thirdwatch/amazon-product-scraper's listing advertises numeric-normalized search fields (price_value, rating_value) and incremental price/rating-change monitoring — neither documents extracting a clip coupon, deal badge, or Subscribe & Save discount, or computing a coupon-adjusted final price. This Actor is narrower in scope (no BSR time-series, no AI report) and focused specifically on the coupon/deal-price layer plus the full product detail page.
Can I use it without managing my own proxies or Amazon credentials?
Yes. proxyConfiguration defaults to Apify Proxy on the RESIDENTIAL group, and session warm-up, sticky IPs, and retry/backoff are all handled internally — you only need an Apify account. No Amazon login, cookies, or API key are needed.
💬 Your feedback
Found a bug or a field that's missing from your run? Open an issue from the Actor's Issues tab on its Apify Store page, or message Scrapier directly through the Apify platform. Reports get triaged into upcoming releases — this listing is actively maintained.