Substack Newsletter Scraper · Find Active Newsletters + Leads
Pricing
from $5.00 / 1,000 scraped newsletters
Substack Newsletter Scraper · Find Active Newsletters + Leads
Find Substack newsletters by keyword or category and qualify them in one row: subscriber figure, paid-subscriber band, bestseller tier, paid price, last post date, posts per 30/90 days, median likes and comments. Optional post rows. No login.
Pricing
from $5.00 / 1,000 scraped newsletters
Rating
0.0
(0)
Developer
TheQuietStack
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Find Substack newsletters by keyword, category leaderboard or URL, and get one qualified row per newsletter: public subscriber figure, paid-subscriber band, Bestseller tier, paid price, last post date, posting frequency and median engagement per post. Dead newsletters and ones outside your size range are filtered out before you pay for them. No login, no API key.
Built for sponsorship buyers, newsletter-swap and cross-promotion outreach, PR lists, and anyone researching a Substack niche.
Why this scraper
- Qualified, not just listed. A keyword search on Substack returns plenty of newsletters with 0–100 subscribers and no post in a year. Every row here carries
daysSinceLastPost,postsLast30Days,postsLast90Days,medianLikes,medianComments,medianRestacksandlikesPer1kSubscribers, so you can sort by who is actually read, not by who has the biggest headline number. Measured on 23 Sep 2026 for the search term "ai marketing": one newsletter shows 107K+ subscribers and gets a median of 0 likes per post; another with 9.3K+ gets a median of 73.5. - Paid-side signals in one row. Substack's own paid-subscriber band (e.g. "Tens of thousands of paid subscribers"), the Bestseller tier (100+ / 1,000+ / 10,000+ paid), and the monthly, yearly and founding-member price.
- Filters that save money.
minSubscribers,maxSubscribers,activeWithinDays,onlyPaidEnabled,onlyBestsellers,languages. Filtered-out newsletters are never charged. - No silently missing posts. Substack's archive API returned only 23 of 50 posts for a
limit=50request in our tests (23 Sep 2026), without any error. This Actor pages in steps of 20, which returned every post. - Custom domains work.
lennysnewsletter.com,noahpinion.blogor@handle— if a custom domain fails, the*.substack.comaddress is tried as a fallback. Publications that have left Substack are listed in the run summary instead of failing silently.
Input example
{"searchTerms": ["ai marketing"],"categories": ["technology"],"categoryRanking": "paid","newsletters": ["https://www.lennysnewsletter.com", "@noahpinion"],"minSubscribers": 1000,"activeWithinDays": 30,"maxNewsletters": 200}
Set "includePosts": true to also get one row per post (title, URL, date, likes, comments, restacks, paywalled flag, word count, preview text).
Output example (newsletter row, measured 23 Sep 2026)
{"name": "Lenny's Newsletter","url": "https://www.lennysnewsletter.com","authorName": "Lenny Rachitsky","authorProfileUrl": "https://substack.com/@lenny","twitter": "https://x.com/lennysan","subscribersShown": 1200000,"subscribersLabel": "1.2M+","paidSubscribersBand": "Tens of thousands of paid subscribers","paidSubscribersAtLeast": 10000,"isBestseller": true,"bestsellerTier": "10,000+ paid subscribers","priceMonthly": 20,"priceYearly": 200,"priceFoundingMember": 400,"priceCurrency": "USD","lastPostDate": "2026-09-22T12:45:14.998Z","daysSinceLastPost": 1,"postsLast30Days": 4,"postsLast90Days": 11,"postsAnalyzed": 20,"medianLikes": 453,"medianComments": 6.5,"medianRestacks": 24.5,"likesPer1kSubscribers": 0.38,"paywalledShare": 0.75,"topPostTitle": "How to turn your AI into a world-class designer","topPostLikes": 1011,"source": "url:https://www.lennysnewsletter.com"}
| Field | Meaning |
|---|---|
subscribersShown / subscribersLabel | The subscriber figure the newsletter shows publicly ("1.2M+"). Substack rounds it and it is a floor, not an exact count. null when the writer hides it. |
paidSubscribersBand | Substack's own paid band text, e.g. "Hundreds of paid subscribers". null when not shown. |
bestsellerTier | Bestseller badge: 100+, 1,000+ or 10,000+ paid subscribers. |
priceMonthly / priceYearly / priceFoundingMember | Paid plan prices in priceCurrency. |
postsLast30Days / postsLast90Days | Posts published in that window — exact, or null if the newsletter posts so often that the window exceeds 100 posts; postsLast90DaysAtLeast then gives the lower bound. |
medianLikes / medianComments / medianRestacks | Median over the latest postsToAnalyze posts that are older than 48 hours. |
likesPer1kSubscribers | Median likes per 1,000 shown subscribers — an engagement indicator, based on the rounded subscriber figure. |
paywalledShare | Share of analyzed posts that are for paid subscribers only. |
source | Which search term, category or URL found this newsletter. |
A run summary (SUMMARY in the key-value store) lists candidates per source, how many newsletters each filter dropped, failed publications with the reason, and HTTP status counts.
Honest limits
- Public data only. Paywalled posts are returned as metadata (title, date, likes, comments, word count, preview) — never their full text. No login, no paywall access.
- Subscriber numbers are Substack's rounded public figures. Nobody outside Substack has the exact count; we label the field accordingly instead of pretending.
- Keyword search depth: Substack's search returns about 80 publications per term. Use several terms or the category leaderboards (up to 525 per category) for bigger lists.
- Substack rate-limits fast clients. The Actor keeps concurrency low, retries with backoff and a fresh proxy IP; failures are listed in the summary, not hidden.
Pricing (pay per event)
- Actor start: small flat fee per run
- Per scraped newsletter: charged only for newsletters that pass your filters and are written to the dataset
- Per scraped post: only when post rows are switched on