Substack Newsletter Scraper: Posts, Full Text, Stats
Pricing
Pay per event
Substack Newsletter Scraper: Posts, Full Text, Stats
Scrape every post from any Substack newsletter: title, date, authors, paywall status, likes, comments, restacks, tags and full article text (free posts). URLs, custom domains or names. No login, no proxies. $1 per 1,000 posts, full text included.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Trevor Staubach
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Substack Newsletter Scraper: Posts, Full Text & Engagement Stats
Export every post from any Substack newsletter as clean, structured data: title, subtitle, URL, publish date, authors, paywall status, likes, comments, restacks, word count, tags, section, cover image, and the full article text for free posts (the public preview for paid ones). Works with name.substack.com, custom domains and substack.com/@handle links. $1 per 1,000 posts, full text included. No login, API key or proxies needed.
Why this scraper
- Full text at the metadata price. Other Substack scrapers charge about twice as much for posts with content. Here the price is the same with or without text.
- Engagement stats. Likes, comments and restacks for every post, so you can rank a newsletter's best content or benchmark competitors.
- Incremental runs.
postedSincestops at the first older post, so daily monitoring costs only the new posts. - Clean text, ready for AI. HTML is converted to readable paragraphs, which makes it suitable for summarisation, RAG, sentiment and topic analysis.
- Many newsletters per run, each logged separately; a failing one never stops the run.
Use cases
Content and competitor research, newsletter sponsorship prospecting, media monitoring, training/RAG datasets, trend analysis, archiving your own newsletter.
Input
| Field | Description |
|---|---|
publications | Newsletter URLs, custom domains, substack.com/@handle or subdomain names. |
maxPostsPerPublication | Newest first. Empty = whole archive. |
postedSince | Only posts on or after this date. |
keywords | Keep posts whose title/subtitle contains any of these. |
freeOnly | Skip paid-only posts. |
includeContent | Full text (default on). |
maxTotalPosts | Hard cap for the run. |
{ "publications": ["https://www.lennysnewsletter.com", "platformer", "https://substack.com/@noahpinion"], "postedSince": "2026-09-01" }
Output
{"publication": "www.lennysnewsletter.com", "postId": "215694124","title": "All of the Lenny & Friends Summit talks are now online","subtitle": "Plus, some reflections and takeaways from the day","url": "https://www.lennysnewsletter.com/p/all-of-the-lenny-and-friends-summit","type": "newsletter", "postDate": "2026-09-29T13:15:57.512Z","audience": "everyone", "isPaywalled": false, "authors": ["Lenny Rachitsky"],"wordcount": 1276, "reactionCount": 289, "commentCount": 7, "restacks": 5,"tags": [], "sectionName": null, "coverImage": "https://substack-post-media.s3.amazonaws.com/...","description": "Plus, some reflections and takeaways from the day","previewText": "👋 Hey there, I'm Lenny...","contentText": "👋 Hey there, I'm Lenny. Each week, I share...","contentIsPreviewOnly": false}
type can be newsletter, podcast or thread. For paid posts contentText holds only the public preview and contentIsPreviewOnly is true.
Pricing
$1.00 per 1,000 posts ($0.001 each), full text included, plus a tiny $0.00005 per run start. Use maxTotalPosts to cap spend.
Notes
- Only public data is collected. Paid content beyond the free preview is never accessed.
- Respect authors' copyright when reusing text.
FAQ
Does it work with custom domains? Yes, paste the newsletter's homepage URL.
Can I get only new posts every day? Yes, schedule it with postedSince.
Export formats? JSON, CSV, Excel, XML, or via the Apify API.