Substack Scraper: Posts, Likes, Comments, Full Text
Pricing
from $1.50 / 1,000 posts
Substack Scraper: Posts, Likes, Comments, Full Text
Scrape any Substack newsletter, custom domains included: title, date, authors, likes, comments, restacks, tags and subscriber count. Optional full text as plain text and Markdown, comment threads, and keyword search across Substack. No login.
Pricing
from $1.50 / 1,000 posts
Rating
0.0
(0)
Developer
Plainsource
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
This Substack scraper downloads posts from any Substack newsletter, including the ones on their own domain, with title, date, authors, likes, comments, restacks, tags and the publication's subscriber count. Turn on full text to get each article as plain text and Markdown, and turn on comments to get the discussion under each post. No Substack account, cookie or API key needed.
- Paste any kind of Substack link. A name like
noahpinion, asubstack.comURL, a custom domain likewww.lennysnewsletter.com, an author profile like@noahpinion, or a single post URL all work. - Get the whole archive. Posts come newest first and the Actor keeps paging until it hits your limit or a date like
2026-01-31or30 days. - Hidden sections included. Many newsletters keep podcast notes or guest series out of their main archive. This Actor reads those sections too and merges them by date.
- Search all of Substack by keyword to collect posts from newsletters you don't know yet.
What data you get
| Field | What it holds |
|---|---|
title, subtitle, url, publishedAt | The post and when it went out |
authors, authorNames | Every byline with name, handle and profile link, guests included |
likes, commentCount, restacks | Engagement counts |
audience, isPaid | Whether the post is free or for paid subscribers |
wordCount | Length of the full post, also for paid posts |
tags, section, coverImage, podcast | Tags, section name, cover image URL, and audio URL for podcast episodes |
publicationName, publicationUrl, publicationSubscribers | The newsletter, its home page and its public subscriber count ("Over 461,000 subscribers", plus publicationSubscribersMin as a number) |
text, markdown, textIsPreview | Full article as plain text and Markdown (with Include full text) |
comments | Comment threads with author, date, text, likes and nested replies (with Include comments) |
How to use it
- Add one or more publications or post URLs, or a search query.
- Set Max posts per publication.
- Optional: set Only posts newer than, and turn on Include full text or Include comments.
- Run it and export to JSON, CSV or Excel, or call it from the API, Make, Zapier, n8n or an AI agent through the Apify MCP server.
Full text and comments each cost one extra request per post, so a run with both on takes a few seconds per post instead of a few seconds per 50 posts.
Example input
{"publications": ["noahpinion", "www.lennysnewsletter.com"],"maxPostsPerPublication": 3,"onlyPostsNewerThan": "30 days","includeFullText": true,"includeComments": true,"maxCommentsPerPost": 5}
Example output (one post, text and comments shortened)
{"publicationName": "Noahpinion","publicationUrl": "https://www.noahpinion.blog","publicationSubdomain": "noahpinion","publicationSubscribers": "Over 461,000 subscribers","publicationSubscribersMin": 461000,"postId": 222264141,"title": "Roundup #90: In which Noah joins a Japanese VC firm","url": "https://www.noahpinion.blog/p/roundup-90-in-which-noah-joins-a","publishedAt": "2026-10-27T07:17:34.767Z","updatedAt": "2026-10-27T07:18:58.872Z","type": "newsletter","audience": "everyone","isPaid": false,"authors": [{ "name": "Noah Smith", "handle": "noahpinion", "id": 8243895, "profileUrl": "https://substack.com/@noahpinion", "isGuest": false }],"authorNames": "Noah Smith","wordCount": 3167,"likes": 278,"commentCount": 34,"restacks": 17,"coverImage": "https://substackcdn.com/image/fetch/$s_!KCl-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5caa2f-6bdf-48cc-9785-963744ee4cae_1006x600.jpeg","tags": [],"language": "en","text": "I have a fun announcement today, which is that I have a new side gig. I’ll be joining the Japanese VC firm Coral Capital as a Venture Partner! ...","markdown": "\n\nI have a fun announcement today, which is that I have a new side gig. ...","textWordCount": 3177,"textIsPreview": false,"comments": [{"id": 371442049,"parentId": null,"author": "Fallingknife","date": "2026-10-27T09:13:44.880Z","text": "Dying or mean reverting? ...","likes": 21,"replies": [{ "id": 371957546, "parentId": 371442049, "author": "cp6", "date": "2026-10-27T20:47:34.043Z", "text": "I agree. ...", "likes": 7, "replies": [] }]}],"commentsFetched": 5,"source": "noahpinion"}
How much does it cost?
You pay per post saved. Comments are stored inside their post, so they never add items. Inputs that fail (a wrong link, a deleted post, a site that is not on Substack) cost nothing and are listed in the PROBLEMS record of the run's key-value store.
Each post costs $0.0015, plus $0.0005 once per run. Full text and comments are included at no extra cost. 1,000 posts cost about $1.50, and Apify's free plan credit of $5 a month covers about 3,300 posts.
Use cases
- Newsletter research: compare how often a set of newsletters post, how long the posts are and which ones get the most likes and restacks.
- Content monitoring: run it on a schedule with Only posts newer than set to
1 dayto collect new posts from the newsletters you follow. - AI and search datasets: collect free articles as Markdown for summaries, RAG pipelines or topic analysis.
- Audience research: read the comment threads to see what readers ask and argue about.
FAQ
Can it get paid posts?
It gets every paid post's title, date, authors, word count, likes, comments count and restacks. The text is only the free preview that Substack shows to non-subscribers, and those posts have textIsPreview: true. Substack also hides the comments on paid posts from non-subscribers, so commentsNote says so instead.
Does it work with custom domains?
Yes. Give the custom domain (www.thefp.com) or the substack.com subdomain, which redirects to it. If a domain is not a Substack site, the input is listed in PROBLEMS with that reason.
What about rate limits? Substack starts answering "Too Many Requests" when one IP asks too fast. The Actor spaces its requests about a second apart, and when Substack still says no it waits longer and retries, up to six times per request. If you scrape thousands of posts with full text, turn on Apify Proxy to spread the load.
How many posts can I get from one newsletter? The whole public archive. Set Max posts per publication to a number larger than the archive.
Do I need a Substack account? No. The Actor reads the same public data your browser loads when you open a newsletter's archive.
Is this legal? It only reads what newsletters publish publicly. You are responsible for how you use the data, especially personal data in comments, under laws like GDPR.
Other Actors by this developer
- Telegram Channel Scraper: posts, views and reactions from public Telegram channels, no login.
- Google Trends Scraper: interest over time, by region and related searches, built to survive Google's rate limits.