AppSumo SaaS Deals Scraper avatar

AppSumo SaaS Deals Scraper

Pricing

Pay per event

Go to Apify Store
AppSumo SaaS Deals Scraper

AppSumo SaaS Deals Scraper

Search AppSumo's lifetime-deal marketplace by keyword and get structured rows for every matching SaaS deal — price, original price, discount, category, plan type, and buy link. No page-scraping guesswork, just clean JSON per search term.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share


🎯 What this scrapes

AppSumo is the web's biggest SaaS lifetime-deal marketplace, and its own search box is the only way to browse it. This Actor pastes your keywords into that search box for you — feed it 1-20 free-text terms like "seo", "crm", or "email marketing" and get back structured rows for every matching deal: current price, original price, discount math, category, plan type, rating votes, and the buy link. Built on curl-cffi with rotating browser impersonation and Apify Proxy so a run finishes clean even when AppSumo's own front end changes shape underneath it.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox TLS handshakes on every fetch, good hygiene on any target.
  • 🔁 Retries with exponential backoff on 408 / 429 / 503 and network errors — up to 5 attempts per query, Retry-After honoured.
  • 🧩 Per-query fault isolation — one malformed deal or an unparseable page skips just that item/query with a logged warning; it never sinks the whole run.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable deal IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. A search that runs and matches nothing still succeeds — no data, no charge beyond the warm-up fee.

💡 Use cases

  • Lifetime-deal hunting — track new SaaS deals matching your stack's keywords before they sell out.
  • SaaS review/blog content — pull structured deal data (price, discount, category) for roundup posts and comparison tables.
  • Procurement/ops tracking — monitor lifetime-deal pricing for tools your team is evaluating.
  • Competitive/market research — see which SaaS categories AppSumo is currently discounting and by how much.
  • Discount alerting — diff successive runs to flag newly-listed or price-dropped deals for a given keyword set.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchQueriesarrayyes['seo', 'crm', 'marketing']1-20 free-text AppSumo search terms (e.g. seo, crm, email marketing). Each term is a separate /browse/?query= fetch.
maxResultsPerQueryintegerno20Cap on rows returned per search query, clamped to [1, 20] (AppSumo's confirmed single-page ceiling).
proxyConfigurationobjectno{'useApifyProxy': True}Apify Proxy spec. We rotate exit IPs and browser fingerprints on every fetch by default; datacenter ships out of the box and we can bump you to residential if AppSumo ever tightens up.

Example input

{
"searchQueries": [
"seo",
"crm",
"marketing"
],
"maxResultsPerQuery": 5,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
search_querystringThe AppSumo search term that produced this row.
deal_idintegerAppSumo's internal numeric deal ID.
slugstringAppSumo product slug.
public_namestringDeal / product display name.
taglinestringOne-line product pitch.
deal_urlstringCanonical deal page URL.
logo_url['string', 'null']Product logo image URL.
featured_image_url['string', 'null']Featured/header image URL.
pricenumberCurrent lifetime-deal price in USD.
original_price['number', 'null']List / original price in USD.
is_freebooleanTrue when the deal is free.
plan_type['string', 'null']Human plan-type label (e.g. Lifetime Deal).
group['string', 'null']Top-level taxonomy group.
category['string', 'null']Taxonomy category.
subcategory['string', 'null']Taxonomy subcategory.
deal_statusstringAppSumo's browse_deal_status.
percent_claimed['number', 'null']Percent of deal codes/spots claimed.
total_votes_countintegerNumber of reviews/votes recorded.
reviews_summarystringAI-generated review summary text.
start_date['string', 'null']ISO-8601 deal start date.
end_date['string', 'null']ISO-8601 deal end date, null if open-ended.
search_total_resultsintegerTotal deals AppSumo reports for this query.
scraped_atstringISO-8601 UTC timestamp when the row's query was fetched.

Example output

{
"search_query": "seo",
"deal_id": 259504,
"slug": "nuwtonic",
"public_name": "Nuwtonic SEO",
"tagline": "Monitor rankings, optimize pages, and generate GEO-ready content for AI search",
"deal_url": "https://appsumo.com/products/nuwtonic/",
"logo_url": "https://appsumo2-cdn.appsumo.com/media/deals/images/as-email-Nuwtonic_SEO-800x800-0-2-1_uuid_363613c9-6535-4474-a869-fcab5232ace2.png",
"featured_image_url": "https://appsumo2-cdn.appsumo.com/media/deals/images/as-Header-Nuwtonic_SEO-16_9_boeVsgW_uuid_7758f36d-fd8d-42a1-b7a8-4465937edd6d.png",
"price": 69.0,
"original_price": 1200.0,
"is_free": false,
"plan_type": "Lifetime Deal",
"group": "Marketing",
"category": "SEO & Analytics",
"subcategory": "SEO",
"deal_status": "current",
"percent_claimed": null,
"total_votes_count": 0,
"reviews_summary": "",
"start_date": "2026-09-11T17:00:04Z",
"end_date": null,
"search_total_results": 50,
"scraped_at": "2026-09-14T12:00:00.000Z"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result-row$0.005Per unique dataset item

Example: 1 000 results at the rates above ≈ $5.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

v0.1 is a single-page-per-query scraper — AppSumo's /browse/ endpoint doesn't expose page 2 via a documented parameter, so breadth comes from adding more or narrower search_queries, not from paging deeper. Each row's search_total_results field tells you how many more deals exist for that term. Individual deal detail pages (deal codes remaining, personalized recommendations) are out of scope; the browse payload already covers price, category, and images.

❓ FAQ

Do I need an AppSumo account?

No. This Actor scrapes AppSumo's public /browse/ search page — no login required.

How do I widen my results?

AppSumo's own /browse/ endpoint doesn't expose page 2 via a simple parameter (v0.1 limitation). Add more or narrower search_queries instead — each row's search_total_results tells you how many more deals exist for that term.

What's max_results_per_query for?

AppSumo returns up to 20 deals per search fetch. This caps how many of those you keep per query; values above 20 are clamped, not rejected.

Do I need a residential proxy?

No — the default datacenter proxy plus our rotating browser-fingerprint sessions handle this target today. If AppSumo tightens its defenses later, this Actor is built to add a residential tier without any change on your end.

What happens if a query matches nothing?

The run succeeds with zero rows for that query and reports what was searched — a real zero-match result is not treated as a failure.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.