AppSumo SaaS Deals Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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 rotation —
curl-cffiimpersonates real Chrome / Firefox TLS handshakes on every fetch, good hygiene on any target. - 🔁 Retries with exponential backoff on
408 / 429 / 503and network errors — up to 5 attempts per query,Retry-Afterhonoured. - 🧩 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
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searchQueries | array | yes | ['seo', 'crm', 'marketing'] | 1-20 free-text AppSumo search terms (e.g. seo, crm, email marketing). Each term is a separate /browse/?query= fetch. |
maxResultsPerQuery | integer | no | 20 | Cap on rows returned per search query, clamped to [1, 20] (AppSumo's confirmed single-page ceiling). |
proxyConfiguration | object | no | {'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.
| Field | Type | Notes |
|---|---|---|
search_query | string | The AppSumo search term that produced this row. |
deal_id | integer | AppSumo's internal numeric deal ID. |
slug | string | AppSumo product slug. |
public_name | string | Deal / product display name. |
tagline | string | One-line product pitch. |
deal_url | string | Canonical deal page URL. |
logo_url | ['string', 'null'] | Product logo image URL. |
featured_image_url | ['string', 'null'] | Featured/header image URL. |
price | number | Current lifetime-deal price in USD. |
original_price | ['number', 'null'] | List / original price in USD. |
is_free | boolean | True 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_status | string | AppSumo's browse_deal_status. |
percent_claimed | ['number', 'null'] | Percent of deal codes/spots claimed. |
total_votes_count | integer | Number of reviews/votes recorded. |
reviews_summary | string | AI-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_results | integer | Total deals AppSumo reports for this query. |
scraped_at | string | ISO-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:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
result-row | $0.005 | Per 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.