AppSumo Deals Scraper and New Lifetime-Deal Alert avatar

AppSumo Deals Scraper and New Lifetime-Deal Alert

Pricing

from $0.70 / 1,000 deal scrapeds

Go to Apify Store
AppSumo Deals Scraper and New Lifetime-Deal Alert

AppSumo Deals Scraper and New Lifetime-Deal Alert

Every AppSumo deal as one flat row: name, price, list price, discount %, codes left, start date, live or ended, rating and review count, features, URL. Filter to live deals started in the last N days, by rating, price or keyword.

Pricing

from $0.70 / 1,000 deal scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Every deal on AppSumo, one flat row each: name, price, list price, discount %, codes left, start date, whether it is live or ended, rating and review count, feature list, deal URL. Filter to live deals that started in the last N days and schedule the run daily for a new lifetime-deal alert feed, or turn the filters off and pull the whole catalogue (about 4,400 deals, back to 2017).

No account, no login, no API key. It reads the public JSON API AppSumo's own site uses.

Input

FieldNotes
maxItemsReturn at most this many deals, newest start date first, after every filter (default 100).
onlyLiveDefault on: only deals AppSumo currently lists as on sale. Off also returns the expired ones (about 88% of the list).
startedWithinDaysOnly deals that went on sale in the last N days. The new-deal alert filter.
startedAfterOnly deals that went on sale on or after this date (2026-10-01, or a full ISO timestamp). With startedWithinDays the later date wins.
minRatingMinimum average rating, 0 to 5. Deals with no reviews have no rating and are left out when this is set.
minReviewsMinimum number of reviews.
maxPriceMaximum price in US dollars.
searchWords that must all appear in the deal's name or URL slug, any case. Name only: see "What the list does not have".
proxyConfigurationRequired, Apify datacenter proxy by default. A run with no proxy stops before it fetches or charges anything.

Every run reads the whole list

AppSumo's API takes page and per_page and nothing else. Measured on 2026-10-13: ordering, sort and the other filter parameters tried are ignored, so there is no server-side way to ask for "newest" or "live". The actor therefore reads every page (44 pages of 100 for the 4,368 deals listed that day), filters and sorts locally, and only then writes rows.

  • You are charged per row written, not per page fetched. A filter that leaves 9 deals costs 9 rows plus the start fee, even though 44 pages were read.
  • A full sweep takes about 6 minutes (352 s measured from this VM, 44 of 44 pages, no retries): the API answers an uncached page in 6 to 10 seconds, and a page is about 2 MB of JSON (about 460 KB compressed on the wire, so roughly 20 MB of proxy traffic per run).
  • per_page above 100 is not used. 101 works; 250 and 1000 answered HTTP 502 after 15 to 30 seconds.
  • The list shifts while it is being paged (new deals arrive at the top), so a deal at a page boundary can show up on two pages and another can be skipped. Measured on the same day: 4,368 rows read, 4,361 distinct deals. The actor dedupes by deal_id; a skipped one is picked up by the next run.
  • If a page cannot be read after the retries, the run goes on with the rest, logs sweep has holes, and a newer deal may be missing. The run fails only if the first page, which carries the page count, cannot be read.

Output

FieldNotes
deal_id, slug, url, nameAppSumo's numeric id, the /products/<slug>/ slug, the deal page, the product name.
status, is_livestatus is AppSumo's browse_deal_status: current (on sale) or expired. is_live is true exactly when it is current.
has_started, has_ended, availabilityAppSumo's own flags and in stock / out of stock. They are not the same as status: a deal listed as "coming soon" is expired and has neither started nor ended.
price, original_price, discount_percentUS dollars. discount_percent is round(100 * (1 - price / original_price)), computed here. price 0.0 is a free deal, as sent.
codes_remaining, uses_codesUnsold codes. 0 means sold out. See "Honest nulls".
plan_typeThe default plan's type: Lifetime Deal, Limited License, Digital Download or One Time Purchase.
is_marketplaceTrue for a deal from AppSumo's marketplace programme rather than a vendor-negotiated launch, as sent.
start_date, end_dateWhen the deal went on sale, and when it ends, as AppSumo prints them (ISO-8601 with its Central-time offset). end_date is null on most deals, ended ones included.
rating, review_countAverage of the 1 to 5 ratings, and how many reviews.
featuresThe bullet list of what the deal includes. Empty when AppSumo lists none.
product_url, image_url, logo_urlThe vendor's site, the deal image, the product logo.

Honest nulls

A field AppSumo did not give is null, never 0 or "".

  • rating is null for a deal with no reviews, not 0 stars (AppSumo sends null).
  • original_price is null where AppSumo shows no list price. The API sends 0.0 there (537 of 4,368 deals); that is "none shown", and discount_percent is null with it.
  • codes_remaining is null on a deal with no code pool (uses_codes false: AppSumo's licensing deals). The API sends 0 for those whether or not the deal can be bought: 253 of the 542 live deals on 2026-10-13 were "in stock" with 0. Reading that as "sold out" would be wrong, so it is null. A positive number is passed through; 0 on a deal that does use codes is a real sell-out.
  • start_date is passed through untouched. One old deal (Vectera) carries a start date in 2030. Such a deal is never counted as "started within N days".

What the list does not have

The API's list has no category, no tagline or description, and only the default plan's price. So there is no category filter, search matches the name and slug only, and a column of nulls was not added in their place.

Pricing

Pay per event:

  • $0.002 per run (actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing.
  • $0.00069 per deal row written (deal-scraped), i.e. $0.69 per 1,000 deals. Deals read and filtered out are not charged.

For reference, the other AppSumo scrapers on the Store charge $0.001 per deal.

How it fetches

The API is public JSON. The actor presents a browser's TLS fingerprint (curl_cffi, current Chrome) through Apify datacenter proxy. Plain curl from an ordinary connection and a curl_cffi probe through Apify datacenter proxy both got HTTP 200; a probe's 200 only proves the probe's client, so the actor uses the impersonating client rather than assuming a plain one works from the platform.

HTTP 403, 429, 202 and 5xx, and a 200 that is not a deals page (a challenge, an error body), are retried from a fresh exit address. A genuine 404 (the API answers {"detail":"Invalid page."} for a page past the end) and any other status are not retried.