AppSumo Deals Scraper and New Lifetime-Deal Alert
Pricing
from $0.70 / 1,000 deal scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
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
| Field | Notes |
|---|---|
maxItems | Return at most this many deals, newest start date first, after every filter (default 100). |
onlyLive | Default on: only deals AppSumo currently lists as on sale. Off also returns the expired ones (about 88% of the list). |
startedWithinDays | Only deals that went on sale in the last N days. The new-deal alert filter. |
startedAfter | Only deals that went on sale on or after this date (2026-10-01, or a full ISO timestamp). With startedWithinDays the later date wins. |
minRating | Minimum average rating, 0 to 5. Deals with no reviews have no rating and are left out when this is set. |
minReviews | Minimum number of reviews. |
maxPrice | Maximum price in US dollars. |
search | Words that must all appear in the deal's name or URL slug, any case. Name only: see "What the list does not have". |
proxyConfiguration | Required, 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_pageabove 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
| Field | Notes |
|---|---|
deal_id, slug, url, name | AppSumo's numeric id, the /products/<slug>/ slug, the deal page, the product name. |
status, is_live | status is AppSumo's browse_deal_status: current (on sale) or expired. is_live is true exactly when it is current. |
has_started, has_ended, availability | AppSumo'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_percent | US dollars. discount_percent is round(100 * (1 - price / original_price)), computed here. price 0.0 is a free deal, as sent. |
codes_remaining, uses_codes | Unsold codes. 0 means sold out. See "Honest nulls". |
plan_type | The default plan's type: Lifetime Deal, Limited License, Digital Download or One Time Purchase. |
is_marketplace | True for a deal from AppSumo's marketplace programme rather than a vendor-negotiated launch, as sent. |
start_date, end_date | When 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_count | Average of the 1 to 5 ratings, and how many reviews. |
features | The bullet list of what the deal includes. Empty when AppSumo lists none. |
product_url, image_url, logo_url | The vendor's site, the deal image, the product logo. |
Honest nulls
A field AppSumo did not give is null, never 0 or "".
ratingis null for a deal with no reviews, not 0 stars (AppSumo sends null).original_priceis null where AppSumo shows no list price. The API sends0.0there (537 of 4,368 deals); that is "none shown", anddiscount_percentis null with it.codes_remainingis null on a deal with no code pool (uses_codesfalse: 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_dateis 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.