· 17 min read
Amazon Deals Scraper: Up to 1,000 Free Results a Month (2026)
Extract every discounted product's ASIN, title, images, brand, and department across 23 Amazon marketplaces. Each record of a deal carries 29 fields, including deal price, list price, savings amount/percent, deal type, brand, and department IDs. You can filter by category, brand, rating, price range, and discount range. Apify's free plan includes $5.00 of monthly usage, which covers up to 1,000 results of this Actor before run-start charges, making it easy to try out. This Actor is designed for deal aggregators and competitive intelligence analysts. It is not for anyone needing per-deal star ratings for filtering, as the Deals grid does not expose this data.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Amazon Deals Scraper on Apify and run the prefilled example.
How reliable is Amazon Deals Scraper in production?
Across the last 30 days of public runs on the Apify platform, Amazon Deals Scraper recorded 112 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 111 | 99.1% |
| Failed | 0 | 0.0% |
| Aborted by the user | 1 | 0.9% |
| Timed out | 0 | 0.0% |
| Total | 112 | 100.0% |
No run failed or timed out in the last 30 days; the 1 that did not finish was stopped by the people who started them. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.
What does it cost to run Amazon Deals Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.
The number of results written to the dataset largely drives the billing, at $0.005 per result. The maxItems input control has the largest effect on the bill, as it directly caps the number of deal records emitted. To test the Actor efficiently, use the default maxItems of 30, which will cost at most $0.15 in result charges for a first run.
How do you run Amazon Deals Scraper from the API?
The schema marks 1 of its 12 controls as required: marketplace. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~amazon-deals-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"marketplace":"amazon.com","dealType":"","category":"","brand":"","maxItems":30,"maxPages":5,"proxyConfiguration":{"useApifyProxy":true}}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"marketplace": "amazon.com",
"dealType": "",
"category": "",
"brand": "",
"maxItems": 30,
"maxPages": 5,
"proxyConfiguration": {
"useApifyProxy": True
}
}
run = client.actor("crawlerbros~amazon-deals-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"marketplace": "amazon.com",
"dealType": "",
"category": "",
"brand": "",
"maxItems": 30,
"maxPages": 5,
"proxyConfiguration": {
"useApifyProxy": true
}
}
const run = await client.actor('crawlerbros~amazon-deals-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Amazon Deals Scraper inputs matter, and which can you skip?
The marketplace input is required and dictates which Amazon domain's Deals page is scraped. You can narrow down your results using dealType, category, and brand filters, which act as free-text substring matches against the deal's metadata. For a first run, it is best to leave most optional settings at their defaults and specify only the marketplace and a low maxItems value, such as 30, to quickly assess the output.
marketplace(string): Which Amazon domain's Today's Deals page to scrape. Default:"amazon.com".dealType(string): Only emit deals belonging to this collection bubble (the real filter chips Amazon shows atop the Deals page). Department-scoped bubbles (e.g. Customers' Most-Loved) are enforced by matching each deal's department IDs; tag-scoped bubbles (Lightning Deals, Coupons, Outlet) can't be verified per-deal from the grid data and pass through unfiltered.(any deal type)applies no filter. Default:"".category(string): Free-text filter matched against each deal's department/category name (case-insensitive substring, e.g.Electronics,Home,Toys). Leave empty for all categories. Default:"".brand(string): Free-text filter matched against each deal's brand name (case-insensitive substring, e.g.Anker,Samsung). Leave empty for all brands. Default:"".minRating(integer): Only emit deals with a star rating at or above this value. Deals without a visible rating pass through unless this is set.priceMin(integer): Drop deals priced below this amount (in the marketplace's local currency).priceMax(integer): Drop deals priced above this amount (in the marketplace's local currency).discountMin(integer): Drop deals with a savings percentage below this value.discountMax(integer): Drop deals with a savings percentage above this value.maxItems(integer): Hard cap on emitted deal records. Default:30.maxPages(integer): Hard cap on how many grid pages (up to 30 items each) to walk (each page is a fresh in-browser fetch of the widget's own pagination request). Default:5.proxyConfiguration(object): Apify proxy used to fetch the Deals page. AUTO (datacenter) is used by default; the actor escalates to residential automatically only after repeated block detections within a run. Default:{"useApifyProxy":true}.
Fixed-choice controls: marketplace accepts 23 values (default amazon.com), including amazon.com (United States (amazon.com)), amazon.co.uk (United Kingdom (amazon.co.uk)), amazon.de (Germany (amazon.de)), amazon.fr (France (amazon.fr)); dealType accepts 38 values (default ""), including "" ((any deal type)), deals-collection-lightning-deals (Lightning Deals), deals-collection-coupons (Coupons), us-outlet (Outlet).
What does Amazon Deals Scraper return?
Each record contains comprehensive deal information, including ASIN, title, images, deal and list prices, savings, and brand details. Records also show Amazon's internal deal classification like dealState and dealPromotionType. Notably, the output may not always include dealPrice, listPrice, or savingsPercent for every deal, as Amazon's Deals grid itself often omits this for certain promotions.
Output per deal
asin- Amazon Standard Identification Numbertitle- product titlesourceUrl- canonical product URLimages[]- product image URLs (hi-res and low-res variants)dealPrice,listPrice-{value, currency, display}- included whenever Amazon's Deals grid carries live pricing for that specific deal (a real subset of deals - typically roughly half on any given fetch - genuinely have no price data attached, e.g. brand-level coupon promos; never fabricated, see FAQ)savingsAmount,savingsPercent- included whenever Amazon exposes them (derived from the deal's own price fields and/or its badge percentage, whichever is present)dealBadgeText- the deal grid's own badge label (e.g."15% off"), when showndealBadgeMessage- the badge's messaging line (e.g."Limited time deal"), when showndealEndsAt- ISO-8601 UTC expiry timestamp for a Lightning-Deal-style countdown badge (e.g."Ends in"), when Amazon exposes one for that dealpercentClaimed,percentClaimedMessage- live claim-progress for the deal (e.g.34.0,"34% claimed"), when Amazon exposes it for that dealdealState- the deal's live state as Amazon reports it (e.g.AVAILABLE)dealPromotionType- Amazon's internal promotion classification for the deal (e.g.BEST_DEAL,LIGHTNING_DEAL)isLightningDeal- boolean, whether Amazon's own cart data flags this as a Lightning DealbrandId,brandName- Amazon's internal brand ID and its resolved display namedepartmentIds[],departmentNames[]- Amazon's internal department/category IDs and resolved namescategorySymbol,productType- Amazon's internal category taxonomy codesbrandLogoUrl- the brand's logo image, when shownvariationDimensions- variant/size/color options and their ASINs (when present)isPinned- whether Amazon pinned this dealdealId- stable deal/promotion ID (when exposed by the widget)position- 1-based rank in the deals gridrecordType: "deal",scrapedAt
When no deals are emitted
success: false- the Deals grid was never reached, with areasonofBLOCKED(couldn't get past bot-detection/redirect handling after retries - checkclassificationfor the specific cause),WIDGET_NOT_FOUND(page fetched cleanly but the deals widget wasn't present), orNO_ENTRIES(widget found but empty)success: true, reason: "NO_MATCHES"- the Deals grid was fetched and parsed successfully, but every entry was filtered out by yourcategory/brand/priceMin-priceMax/discountMin-discountMax/dealTypefilters (or the marketplace's grid was genuinely empty that day)
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Amazon Deals Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Set the marketplace input to the Amazon domain you want to scrape, such as amazon.com or amazon.co.uk.
- Optionally, specify a dealType, category, or brand filter to narrow down the results to relevant deals.
- Run a test with maxItems set to a low number, like 30, to ensure your filters are returning the expected results.
- Review the output dataset for deal records, checking that dealPrice, listPrice, and savingsPercent are present for deals where Amazon shows them.
- Verify that the recordType: "status" records appear when no deals are found and that the reason matches your expectation.
- Increase maxItems and maxPages to capture a wider range of deals, and set up a schedule for continuous monitoring.
How do you apply it? Three worked playbooks
These are Amazon Deals Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Deal aggregators
Outcome: Build a curated "today's deals" catalog feed
Configure: Set marketplace to "amazon.com". Set dealType to a specific category like "electronics". Configure maxItems to 500.
Working method: Start by focusing on a single marketplace and a broad category. Review the initial output to ensure the deal fields (title, images, dealPrice, savingsAmount) are consistently populated for a sufficient number of records. Integrate the deal data into your catalog, prioritizing deals with a dealBadgeText.
Deliverable: A daily CSV feed of discounted products, including ASINs, titles, images, deal prices, and savings percentages, filtered by your chosen categories.
Stop condition: The output dataset contains a significant number of records with missing dealPrice or savingsPercent, indicating Amazon's grid is not consistently providing pricing data for the chosen filters.
Use case 2: Competitive intelligence
Outcome: See which brands/categories Amazon is currently discounting
Configure: Set marketplace to "amazon.de". Leave dealType and category empty for a broad view. Set maxItems to 2000 and maxPages to 50.
Working method: Run the Actor with broad parameters to capture a wide range of deals. Group the results by brandName and departmentNames. Analyze the distribution of discounts and deal types across different brands and categories to identify trends. Look for prominent brands or categories frequently featured in the deals.
Deliverable: A report summarizing top brands and categories by number of discounted products and average discount percentage over a specific period, segmented by marketplace.
Stop condition: The run log indicates a "BLOCKED" reason for multiple runs, suggesting the Actor is unable to consistently access the Deals grid, which will skew competitive intelligence.
Use case 3: Merchandising research
Outcome: Track which products get pinned/featured in the Deals grid
Configure: Set marketplace to "amazon.com.au". Set maxItems to 500 and maxPages to 10.
Working method: Run the Actor daily for your target marketplace and examine the isPinned field in the output. Identify products with isPinned: true to understand what Amazon is featuring. Over time, track changes in pinned products to observe merchandising strategies. Combine this with position to see top-ranked pinned items.
Deliverable: A historical database of pinned Amazon deals, including product ASINs, titles, images, and the dates they were featured, along with their grid position.
Stop condition: The isPinned field is consistently false for all records across multiple runs, or the field is entirely absent, indicating a change in Amazon's page structure or data availability.
What breaks, and how do you design around it?
- Over the last 30 days, 0.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.
When dealing with Amazon's rate limiting, split your scraping tasks into smaller batches. Instead of attempting to fetch thousands of items in one run, consider breaking it down into multiple runs with lower maxItems and maxPages limits. If a dealType filter seems to have no effect, check the run logs; the Actor will log a warning and pass all deals through rather than returning zero results if Amazon does not present a matching filter bubble.
When should you not use Amazon Deals Scraper?
This Actor is specifically designed to scrape the Today's Deals grid (/deals). If you need to extract customer reviews, this is not the right tool. For comprehensive review data, including filtering by star rating, verified purchases, and review text, consider using the Amazon Reviews Scraper or Amazon Reviews Scraper Pro. Similarly, if your goal is to gather detailed product page information beyond the deal context, such as full product specifications or variations not listed in the deals grid, you would need a dedicated product scraper. For instance, if you require a brand's curated storefront navigation or creative modules, the Amazon Brand Store Scraper would be a more appropriate choice. This Actor is also not suitable for collecting keyword suggestions; for that, use the Amazon Keyword Suggestions Scraper. If you require all seller offers for specific ASINs, refer to the Amazon Offers Scraper (All Offers Display).
What should you check before trusting the output?
- Check for records where dealPrice or listPrice seem implausibly large compared to similar products; these may be inflated values from Amazon's side.
- Verify that dealBadgeText and dealBadgeMessage are present for most deals, as their absence for too many records may indicate a parsing issue.
- When using dealType filters for promotion-style bubbles like Lightning Deals or Coupons, check the run log for warnings if the filter appears to have no effect.
- Confirm that departmentIds and departmentNames are populated for all deal records.
- If your workflow relies on discount ranges, ensure that savingsPercent is present for records matching your discountMin/Max criteria, and filter out those without it if necessary.
None of this proves a record is correct. It gives a scheduled Amazon Deals Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
How much does it cost to scrape 1,000 Amazon deals?
On Apify's free plan, scraping 1,000 results with this Actor will cost $5.00 in result charges. This amount is covered by the $5.00 of monthly usage included in the free plan. Additional platform usage charges will apply based on your Apify plan, but the result charges for 1,000 items remain $5.00 on the free tier. This allows you to test the Actor and collect a substantial dataset without incurring upfront costs.
How fresh is the data returned by the Amazon Deals Scraper?
The data is as current as the live Amazon Deals page at the time of your run. Amazon continuously updates its Deals grid throughout the day, so each run provides a fresh snapshot of available discounts and promotions. For the most up-to-date information, schedule your runs to occur frequently, such as every few hours or daily, depending on your data freshness requirements.
Can I filter deals by minimum star rating using this Actor?
While the input schema includes a minRating field, it currently has no practical effect on filtering. Amazon's Deals grid data does not expose per-deal star ratings. The Actor passes all deals through for this filter rather than risk wrongly dropping real matches due to missing data. If you need rating-based filtering, you will need to process the output dataset yourself after the run.
Why might some deal records be missing price or savings data?
Amazon's own Deals grid data frequently omits price, badge, or claim-progress information for a subset of deals, particularly for brand-level coupon promotions without a single 'deal price' to display. This Actor never fabricates these fields; it populates them only when Amazon's page explicitly provides them for a specific deal. Structural fields like title, images, brand, and category are always populated if Amazon shows them.
What should I do if my category or brand filter returns zero results?
The category and brand inputs are free-text substring filters matched against Amazon's department names, category codes, or brand names. If a run returns no deals, it likely means your filter is too specific or does not match any currently available deals. Try widening your filter by using broader terms or clearing the filter entirely to capture all deals. Check the run log for NO_MATCHES status records to confirm successful fetching with no matching deals.
Where to go next
When you are ready to run it, open Amazon Deals Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the Amazon Deals Scraper Actor page for the current input schema, pricing tier, and run history.
It is part of the Amazon Scraping Suite, which puts every related Actor on one page with its price and run history.
Other Actors we maintain for related data:
- Amazon Reviews Scraper: Extract customer reviews from any Amazon product with filtering by star rating, verified purchases, and sorting options.
- Amazon Reviews Scraper Pro: Extract customer reviews from any Amazon product across 19+ domains with star-rating filtering and sort options.
- Amazon Brand Store Scraper: Scrape Amazon Brand Store pages (/stores/{Brand}/page/{ID}) - curated storefront navigation, creative modules (images/video/CTAs), and every validated product link found on the page.
- Amazon Keyword Suggestions Scraper: Discover Amazon's search-autocomplete keyword suggestions for any seed keyword, across 23 marketplaces.
- Amazon Offers Scraper (All Offers Display): Scrape every seller offer for one or more Amazon ASINs from the All-Offers-Display panel: condition, price, seller name/rating, ships-from, delivery estimate, and buy-box winner flag.
- Amazon Creator Shop Scraper: Scrape Amazon influencer/creator storefronts (/shop/{handle}): profile info, affiliate disclosure, curated Idea Lists with products and creator comments, and creator videos.
- Amazon Seller & Shop Scraper: Scrape Amazon third-party seller intelligence: seller profile pages (business name/address/phone, star rating, feedback windows, ratings histogram) and seller storefront catalogs (/s?me=).
- Amazon Wishlist & Registry Scraper: Scrape public/shareable Amazon wishlists, gift lists, baby registries, and wedding registries from URLs you supply.
Related guides:
- Amazon Reviews Scraper Pro: Setup Guide and Playbooks
- Amazon Reviews Scraper Guide: Setups and Extraction
- Amazon Brand Store Scraper: 3 Practical Use Cases
- Amazon Keyword Suggestions Scraper: 3 Practical Use Cases
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-10-05.
Actor last updated by its maintainers on 2026-09-04.
Run outcome figures cover the 30 day public window ending 2026-10-05.
Featured actors
Amazon Deals Scraper
Scrape Amazon's Today's Deals grid (/deals) - discounted products with deal price, list price, savings amount/percent, deal type, brand and department IDs. Filter by category, brand, rating, price range and discount range across 20+ Amazon marketplaces.
Run on Apify ↗