Skip to main content
RTILA Marketplace

Turn one AppSumo search into a structured catalog of deals, prices, ratings, reviews and countdown timers

Search AppSumo and collect deal names, prices, ratings, review counts and countdown data from every listing.

E-commerce Beginner Experimental v1.0.0 Updated Updated 2026-10-05 10 min read
Download
  • Windows x86_64

    BOT_appsumo-product-catalog-scraper.exe

    64.5 MB

    Download
  • macOS Apple Silicon chmod +x

    BOT_appsumo-product-catalog-scraper.sh

    58.0 MB

    Download
  • macOS Intel chmod +x

    BOT_appsumo-product-catalog-scraper.sh

    64.9 MB

    Download
  • Linux x86_64 chmod +x

    BOT_appsumo-product-catalog-scraper.sh

    82.3 MB

    Download

Do not rename the downloaded file - the filename carries the bot's configuration id.

This tab summarises what the bot does, what it costs, the technical requirements it places on your machine, and how the author is credited - the starting point before you download anything.

Key facts

What it does
Search AppSumo and collect deal names, prices, ratings, review counts and countdown data from every listing.
What it outputs
BOT_appsumo-product-catalog-scraper.exe
Difficulty
beginner
Platforms
windows, macos, macos_intel, linux
Estimated run time
3-20 minutes depending on catalog size and how many load-more rounds the search needs
Internet at launch
Required
On this page

Overview

The AppSumo Product Catalog Scraper is an AppSumo scraper: a standalone desktop bot that opens the AppSumo search page, expands the results grid until every deal card is rendered, and pulls roughly thirty catalog fields per listing into the appsumo_listings dataset. It never leaves the search page - there are no per-product page visits in this configuration - which is why a full-catalog run finishes in minutes instead of hours. Everything it reads is exactly what a logged-out shopper sees on appsumo.com: deal names, taglines, categories, current and original prices, star ratings, review counts, countdown badges, AppSumo Select flags and card images.

This listing is not affiliated with or endorsed by AppSumo. One honesty note on the selectors: they target AppSumo’s current public markup and will need updating when AppSumo redesigns its cards - when that happens, a run ends with empty fields or zero rows rather than invented ones.

What does the AppSumo Product Catalog Scraper do?

The run is one expansion phase followed by one extraction. The bot lands on the AppSumo search URL, composed from a single optional settings variable, search_query. Leave that variable empty and the search returns the full catalog - 334-plus active products at the time this configuration was written. Type a keyword such as seo or video hosting and the same run collects only the matching slice of AppSumo’s deals.

Expansion happens in two passes because the deal grid lazy-loads in two ways. First the run presses Escape once to dismiss cookie or promo overlays that would otherwise sit on top of the load-more control. Then it scrolls the page twice with a 2500 ms pause to wake lazy rendering, and enters a click loop: as long as a load-more control is visible - the configuration carries four label variants (Show More Results, Load More, Show more results, View More) to survive minor copy changes - the bot clicks it and waits three seconds for the next batch of cards. When no load-more control remains, a single extraction pass walks every card. The item selector anchors on AppSumo’s deal price container inside each card and climbs to the enclosing card element, so the dataset stays bound to real listing cards rather than arbitrary grid children. product_url and product_name are declared required fields, and rows are deduplicated by product_url, so a card rendered twice during expansion lands exactly once.

Because everything runs on your own machine, your research footprint stays yours: which categories you size, which competitors you benchmark, which price bands you study never passes through a third-party service’s dashboard or logs.

Who uses an AppSumo scraper?

The SaaS founder pricing an AppSumo launch asks “what discount depth do comparable tools open at?” and needs price_current next to price_original across a whole category. The affiliate and newsletter operator asks “which AppSumo deals expire this week, and which are rated well enough to recommend?” and needs deal_days_remaining, rating and review_count in one dated table. The market researcher asks “how dense is AppSumo’s productivity category, and how fast do new launches accumulate reviews?” and re-runs monthly to measure review velocity. The vendor-side competitive analyst asks “do rival products carry the AppSumo Select badge, and at what billing period?” and needs is_appsumo_select and price_period per row.

How does an AppSumo catalog scrape run, step by step?

Every command in the run links to its reference page. First, press sends the Escape key to the page root, clearing any consent or promo overlay. Second, infinite_scroll runs a capped pass - two scrolls maximum, 2500 ms apart - which is enough to trigger the lazy-rendered grid without chasing the footer endlessly. Third, a while loop checks for a visible load-more button across four label variants, and each iteration clicks it and waits 3000 ms for the next batch to render. Fourth, extract_data pulls the appsumo_listings dataset once, after expansion is complete - card-level extraction, one pass, deduplicated by product_url. This release sets no fixed export filename, so rows land in the launcher’s local results store and you export them from the results view; nothing is uploaded anywhere except the configuration fetch and download telemetry listed on this page.

What does the output look like?

The table mirrors the published sample row (fourteen of the roughly thirty fields - the dataset carries the rest). Sample values are illustrative placeholders that show the shape of a real row:

product_nameproduct_slugtaglinecategory_nameprice_currentprice_originalprice_currency_symbolprice_periodratingreview_countdeal_badge_typedeal_days_remaininglisting_positionproduct_url
FlowDesk Proflowdesk-proVisual workflow planner for solo consultantsProductivity59240$lifetime4.5312deal_ending41https://appsumo.com/products/flowdesk-pro

product_name is the deal title and a required field - an empty name means the card never rendered properly, and the row is logged rather than trusted.

product_url and product_slug identify the listing; product_url is the deduplication key (the appsumo.com/products/ link, with any anchor fragment stripped), and the slug is regex-extracted from it, giving you a short stable join key when you diff two dated snapshots.

tagline is the clamped card description - the one-line pitch AppSumo shows shoppers.

category_name, category_url, category_slug, category_group_slug and category_parent_slug capture AppSumo’s category taxonomy at three levels - the group and parent slugs are parsed straight out of the appsumo.com path structure - and categories is a nested list of every category link on the card with its name, URL and depth level.

price_current and price_original are the deal price and the struck-through reference price, both cast to numbers with a null fallback; an empty original means the card shows no discount. price_currency_symbol, price_period and price_raw keep the symbol, the billing period (lifetime, year, month) and the untouched display text for auditing.

rating, rating_label, review_count, review_count_text and review_url are the aggregate social-proof signals pulled from the star image and the reviews anchor - numeric casts fall back to null on brand-new listings, and review text is never collected.

deal_badge_text is the countdown strip verbatim; deal_badge_type normalises it to deal_ending, price_increase or plus_access_ending, empty otherwise; deal_days_remaining is the integer day count parsed out of the strip.

is_appsumo_select counts the AppSumo Select badge image and appsumo_select_badge_url keeps its source; plus_exclusive_label captures the Plus exclusive suffix on the product name when present.

product_image_url (tracking query stripped), product_image_url_resized and product_image_alt carry the card artwork.

listing_position is the 1-based card order in the results, and card_text_snapshot is the full collapsed text of the card - a fallback field that keeps a run useful even when one specific selector breaks.

Can AppSumo deal data feed competitive research?

Yes - with the boundary stated plainly. This bot gives you a dated, structured snapshot of card-level truth on AppSumo: what is listed, in which category, at what price against what reference price, with what social proof and what urgency signals. What it does not do is go deeper or enrich: no product detail pages, so no full descriptions, plan tiers, launch dates or vendor information; no review text; no validation against third-party databases. The intended analysis pattern is diffing two snapshots on product_url - price moves, review velocity, badge changes, new launches and quiet removals all fall out of that comparison. For the review stream itself, the sibling AppSumo Product Reviews Scraper is the companion configuration.

How does lifetime deal research work with AppSumo data?

Lifetime-deal economics live in a handful of these columns. price_period separates true lifetime deals from disguised subscriptions. Discount depth - price_original against price_current - shows how aggressively a category prices its AppSumo launches. deal_days_remaining and deal_badge_type turn the catalog into a prioritised expiry calendar for roundups or last-look competitive reviews. is_appsumo_select and plus_exclusive_label segment the editorially promoted slice from the open catalog, which is where pricing norms for featured placement become visible. Run the snapshot weekly, join on product_url, and the panel data builds itself.

How does it compare to hosted AppSumo scraping services?

Copy-pasting cards by hand produces a handful of rows an hour and no consistency at all. Hosted robot and actor marketplaces do offer AppSumo collectors, but the structure is the opposite of this bot: they meter by the result or by the month, the data lands in their cloud under their retention terms, and your search history - the categories you size, the competitors you watch - lives on their servers. Here the marginal cost of a bigger search is your own time and bandwidth, the datasets stay on your disk, and the workflow configuration is yours to keep, modify and re-run. The trade is real: no dashboards, no built-in scheduling, no cloud-side retry. You get an artifact and a workflow you own outright.

How do you set it up on Windows, macOS and Linux?

Download the launcher for your operating system from this page. On Windows, run the downloaded .exe directly - there is no installation step; SmartScreen may ask for confirmation on first launch, so verify the published checksum, then choose More info and Run anyway. On macOS, two launchers are published - pick the one matching your machine’s chip (Apple menu, About This Mac: Apple Silicon or Intel) - then make it executable with chmod +x, clear the Gatekeeper quarantine with xattr -d com.apple.quarantine /path/to/BOT_appsumo-product-catalog-scraper.sh and launch. On Linux, chmod +x ./BOT_appsumo-product-catalog-scraper.sh then ./BOT_appsumo-product-catalog-scraper.sh. At first run the launcher asks for the optional search_query value - empty for the full AppSumo catalog, a keyword for a slice - and starts the run. To repeat a snapshot on a cadence, schedule the launcher with your OS scheduler (Task Scheduler, cron or launchd).

What do I check when a run returns zero rows?

Work in order. Zero rows: did the AppSumo search page render in an ordinary browser, or did a consent wall, region lock or challenge greet the fresh session - the single Escape press dismisses common overlays, not all of them. A suspiciously small row count: the load-more loop exits when none of its four button labels matches, so a copy change on that control truncates the run silently - compare the row count against what appsumo.com shows interactively before trusting a snapshot. Rows present but one column empty across every row: that field’s selector most likely changed in an AppSumo redesign; check one card by hand. Empty rating or review_count on scattered rows: completely normal for new listings - the numeric casts fall back to null rather than failing the row. The contract is that failure is loud - empty values and zero rows, never fabricated data.

What are the bot’s limits?

It reads AppSumo search-result cards only: no detail-page fields, no review text, no photos beyond card images, no vendor or company data. It ships without proxy rotation or CAPTCHA solving enabled - if a challenge stops the run, the run stops; nothing bypasses it. Expansion is bounded by the load-more labels it recognises, so an AppSumo redesign can truncate coverage, which is why the row-count check above matters. One run covers one search term. It is a snapshotter, not a monitor - nothing re-runs, diffs or alerts on its own. Deduplication applies within a run on product_url; merging across runs is your step.

What is responsible AppSumo data collection?

The fields collected here are public commercial data - product names, prices, aggregate ratings - and this configuration deliberately stops short of review text and reviewer identities, which keeps personal data out of the dataset entirely. That does not remove your obligations: automated collection may conflict with AppSumo’s terms of service, so review those terms with open eyes before each run and let the acceptable-use policy govern it. Keep request volume at what a patient human could sustain - the built-in waits already pace the run that way. Date every snapshot, and if you republish derived analysis, do so in ways AppSumo permits. This bot is an independent tool, not affiliated with or endorsed by AppSumo.

#appsumo#ecommerce#product-catalog#software-deals#lifetime-deals#price-tracking

Sample output

The first rows a finished run produces. The Output tab documents every dataset and field.

product_nameproduct_urlproduct_slugproduct_image_urlproduct_image_url_resizedproduct_image_altis_appsumo_selectappsumo_select_badge_urldeal_badge_textdeal_badge_typedeal_days_remainingcategory_namecategory_urlcategory_slugcategory_group_slugcategory_parent_slugcategoriestaglineratingrating_labelreview_count_textreview_countreview_urlprice_rawprice_currentprice_currency_symbolprice_periodprice_originalplus_exclusive_labellisting_positioncard_text_snapshot
FlowDesk Prohttps://appsumo.com/products/flowdesk-proflowdesk-prodeal_ending4ProductivityVisual workflow planner for solo consultants4.531259$lifetime2401

Related resources

Technical details

Launcher version
1.0.0
Minimum runtime version
1.0.0
Internet required at launch
Yes
Update channel
live
Config encoding
plain

Requirements

  • Minimum launcher runtime version: 1.0.0.
  • Supported operating systems: Windows x86_64, macOS Apple Silicon, macOS Intel, Linux x86_64.
  • On macOS Apple Silicon and macOS Intel and Linux x86_64 the launcher is a shell script: if your system flags it as quarantined or strips the executable bit, grant execute permission with chmod +x BOT_appsumo-product-catalog-scraper.sh and approve the launcher in Gatekeeper (macOS security settings) before the first run.
  • First launch requires an internet connection to fetch the bot's configuration by id.

Responsible use

See our acceptable use policy and takedown process.

Commands this bot uses

These are the commands the published configuration actually uses.

The count is how many times each command appears in the published configuration; it is derived from the project, not hand-authored.

Frequently asked questions

How do I scrape AppSumo to CSV?
Run the launcher, leave the search_query field empty to collect the full AppSumo catalog or type a keyword to collect a slice, and the bot expands the search results grid and extracts every deal card into the appsumo_listings dataset. Rows land in the launcher's local results store; export them from the results view - CSV is the common working format for this table, and JSON and XLSX exports are available too. No selector work is required from you.
What data can I collect from AppSumo listings?
Roughly thirty card-level fields per deal: product name, URL and slug, tagline, the full AppSumo category taxonomy (name, URL, three slug levels and a nested categories list), current price, original price, currency symbol, billing period, raw price text, rating, rating label, review count, review count text, review URL, deal badge text, normalised badge type, days remaining, the AppSumo Select flag and badge URL, the Plus exclusive label, three image fields, listing position and a full card text snapshot.
How do I scrape the whole AppSumo catalog?
Leave the search_query field empty at launch. The start URL is the AppSumo search page with an empty query, which returns the entire active catalog - 334-plus products at the time this configuration was written, and it grows as new deals launch. The bot scrolls the grid, clicks every load-more control until none remain, then extracts all cards in one pass, deduplicated by product URL.
How do I scrape only one AppSumo category or keyword?
Type a keyword into the search_query field at launch - something like seo or video hosting. The bot URL-encodes it into the AppSumo search query, so the run collects only matching results. One run covers one query; for several categories, run the launcher once per term and keep the exports separate, then join them later on product_url if you need one master table.
How do I track AppSumo deal prices and review counts?
The bot is a snapshotter, so tracking means re-running it on a cadence and diffing the results yourself. Schedule the launcher weekly with your OS scheduler (Task Scheduler, cron or launchd), export each run with a date, and join the snapshots on product_url - the dataset's deduplication key and the most stable identifier in the row. Price moves show up as changes in price_current or price_original; review velocity shows up as the delta in review_count between two dated runs.
Can I scrape AppSumo deal countdown timers?
You can scrape the countdown strip, at day granularity. deal_badge_text keeps the visible strip verbatim, deal_badge_type normalises it to deal_ending, price_increase or plus_access_ending (empty when the strip shows something else), and deal_days_remaining parses the integer day count out of the text. There is no exact expiry timestamp on the card, so none is invented - the row tells you which day to check by hand.
What is the AppSumo Select flag in the output?
is_appsumo_select counts the AppSumo Select badge image on the deal card, so it reads 0 for ordinary listings and 1 or more for editorially selected ones; appsumo_select_badge_url keeps the badge image source. The separate plus_exclusive_label field captures the Plus exclusive suffix on the product name for membership-gated deals. Together they let you segment the curated slice of the catalog from the open listings.
How long does a full AppSumo catalog scrape take?
Minutes, not hours. The bot never visits individual product pages - it expands the search grid with two capped scrolls and a load-more click loop that waits three seconds per batch, then extracts every card in a single pass. A full-catalog run of several hundred listings typically finishes in well under twenty minutes; a keyword-filtered search is faster. Compare that with detail-page crawlers, where run time scales with one page visit per listing.
Does the scraper collect AppSumo review text?
No - only aggregate signals, deliberately. The dataset captures rating, rating_label, review_count, review_count_text and the review_url link, never review bodies and never reviewer names. That keeps personal data out of the output entirely (this listing is flagged piiHandled false). If you need the reviews themselves, the sibling AppSumo Product Reviews Scraper collects them as a separate configuration with its own compliance bar.
Is scraping AppSumo allowed?
The data collected here is public commercial data - product names, prices, aggregate ratings - but automated collection may still conflict with AppSumo's terms of service, and that review is yours to do before each run. Keep request volume at what a patient human could sustain (the built-in waits already pace the run that way), date every snapshot, and do not republish derived data in ways AppSumo prohibits. This bot is not affiliated with or endorsed by AppSumo.
Why are some price or rating fields empty?
Empty is normal and expected in three cases: brand-new listings carry no reviews yet, so rating and review_count fall back to null through their cast defaults; not every card shows a struck-through original price or a countdown badge; and the Plus exclusive label only exists on membership-gated deals. The transformations fall back to empty values rather than failing the row, and the failure contract is loud - empty values or zero rows, never fabricated data.
Does the bot need an internet connection to run?
Yes on first run: the launcher fetches its configuration by id from the backend at launch, so an internet connection is required at least the first time it starts.
Can I rename the downloaded file?
No. The downloaded file must keep its exact name - the filename carries the per-bot configuration id, and renaming it breaks the configuration fetch at launch.