Substack Scraper: Posts, Full Text, Comments, Newsletter Data
Pricing
from $0.40 / 1,000 post returneds
Substack Scraper: Posts, Full Text, Comments, Newsletter Data
Scrape Substack newsletters: posts with likes, comments, restacks, word count and audience, full post text on request, comments as rows, and newsletter details with author and subscriber tier. Custom domains, new posts only; JSON, CSV, API.
Pricing
from $0.40 / 1,000 post returneds
Rating
0.0
(0)
Developer
deriverge s.r.o.
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
Substack Scraper
What does Substack Scraper do?
Substack Scraper reads Substack newsletters through the public interface every Substack site serves to its own readers, and returns three kinds of clean rows:
- Newsletter header: name, author, description, launch date, first post date, subscriber tier as Substack shows it (for example "Tens of thousands of paid subscribers"), free subscriber count where published, language, whether it sells paid plans and whether it has a podcast.
- Posts from the archive, newest first or most liked first: title, subtitle, date, audience (free or paid), type, section, authors, word count, likes, comments, restacks, cover image, podcast audio, tags and the preview text. With
includeBody, the full text as plain text and as HTML. - Comments under each post, with author name and handle, date, text, likes, replies and thread depth.
Name newsletters any way you like: a subdomain such as lenny, a substack.com address, a custom domain such as www.noahpinion.blog, or a link to any post. No browser, no proxies, no login, no API key.
You pay only for posts returned, from $0.40 per 1,000, with no start fee. The $5 of monthly credit in Apify's Free plan covers about 6,200 posts, so you can try it for free.
Fields
| Post row | What you get |
|---|---|
title, subtitle, description, previewText | What Substack shows in the archive. |
publishedAt, audience, postType, section | Date, everyone or only_paid, newsletter / podcast / thread / video. |
likes, comments, restacks, wordCount | The metrics on the post. |
authors | Bylines as name and handle. |
bodyText, bodyHtml, bodyIsPreview | With includeBody. Paid posts return the free preview and bodyIsPreview is true. |
podcastUrl, podcastDurationSeconds, coverImage, tags | When the post has them. |
| Comment row | What you get |
|---|---|
author, authorHandle, publishedAt, body | The comment as published. |
likes, replies, depth, parentId | Thread structure; replies are their own rows. |
Nothing is guessed. A field Substack did not publish is null.
A new-post alert, not an export
Turn on newOnly, give the run a watch name or save it as a task, and schedule it daily. Each run compares against the previous snapshot and returns only the posts and comments that appeared since. You pay for the new rows and nothing else.
Filters that stop the noise before it is charged
publishedAftercuts the archive off at a date.audiencekeeps free posts only or paid posts only.keywordskeeps only posts whose title, subtitle, description or preview mention one of your words.maxPostsPerNewslettertakes the newest N; archives go back years.
Posts removed by a filter are never charged.
How much does it cost to scrape Substack?
You pay per result. There is no start fee and no charge for compute time or proxies.
| Free plan | Starter | Scale | Business | |
|---|---|---|---|---|
| 1,000 posts | $0.80 | $0.64 | $0.52 | $0.40 |
| Full post text, per 1,000 posts (optional) | $0.50 | $0.40 | $0.33 | $0.25 |
| 1,000 comments (optional) | $0.30 | $0.24 | $0.20 | $0.15 |
| Newsletter header, per 1,000 newsletters | $1.00 | $0.80 | $0.65 | $0.50 |
For example, a batch of 1,000 posts with their metrics costs $0.80 on the Free plan and $0.40 on the Business plan. The $5 of monthly credit in Apify's Free plan covers about 6,200 posts.
Posts removed by your filters and rows already returned in new-only mode are never charged.
How to scrape Substack
- Click Try for free (or Start if you are signed in) to open the actor in Apify Console.
- In Newsletters, add Substack subdomains, custom domains or post links, one per line.
- Click Start. Rows appear in the Output tab within seconds.
- Download the results as JSON, CSV, Excel or HTML, or read them through the API.
- To repeat it, click Save as a task and add a schedule. A scheduled task keeps its own snapshot, so change and new-only modes work without any setup.
Input
{"newsletters": ["lenny", "https://www.noahpinion.blog", "astralcodexten"],"sort": "new","maxPostsPerNewsletter": 50,"audience": "all","includeBody": false,"includeComments": false,"includeNewsletterInfo": true,"newOnly": false}
Output
A post row:
{"type": "post","key": "post:216826341","id": 216826341,"slug": "the-problems-with-utilitarianism","url": "https://www.noahpinion.blog/p/the-problems-with-utilitarianism","newsletter": "Noahpinion","newsletterSubdomain": "noahpinion","newsletterUrl": "https://www.noahpinion.blog","title": "The problem(s) with utilitarianism","subtitle": "Why I am not a utilitarian, and why you probably should not be either","description": "Why I am not a utilitarian, and why you probably should not be either","publishedAt": "2026-09-22T09:31:07.000Z","audience": "everyone","postType": "newsletter","section": null,"authors": [{ "name": "Noah Smith", "handle": "noahpinion" }],"wordCount": 2646,"likes": 349,"comments": 51,"restacks": 38,"coverImage": "https://substackcdn.com/image/fetch/...","podcastUrl": null,"podcastDurationSeconds": null,"tags": [],"previewText": "Utilitarianism is the idea that ...","bodyText": null,"bodyHtml": null,"bodyIsPreview": null}
A newsletter row:
{"type": "newsletter","key": "newsletter:noahpinion","id": 35345,"name": "Noahpinion","subdomain": "noahpinion","customDomain": "www.noahpinion.blog","url": "https://www.noahpinion.blog","author": "Noah Smith","authorHandle": "noahpinion","description": "Economics and other interesting stuff","logo": "https://substackcdn.com/image/fetch/...","language": "en","launchedAt": "2020-03-28T03:32:51.086Z","firstPostAt": "2020-11-24T18:26:23.401Z","paidEnabled": true,"subscriberTier": "Tens of thousands of paid subscribers","freeSubscribers": 458000,"hasPodcast": true,"explicit": false,"checkedAt": "2026-09-23T14:20:00.000Z"}
What it does not collect
Nothing about readers. Authors are the public bylines; commenters appear with the display name and handle they chose to publish under. Subscriber lists, emails and paywalled text are not collected: a paid post returns the free preview that Substack itself shows to everyone.
Integrations and API
Connect the actor to Make, Zapier, n8n, Google Sheets, Slack or any webhook, or call it from your own code. With the Python client:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("deriverge/substack-scraper").call(run_input={"newsletters": ["lenny", "https://www.noahpinion.blog"]})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["type"], row.get("title"))
The API tab on this page has the same call for Node.js and cURL, and AI agents can run the actor through the Apify MCP server.
Is it legal to scrape Substack?
The actor reads only what Substack shows publicly to every visitor: public posts, public comments and newsletter pages. Paywalled text is not collected; paid posts return the free preview. Respect authors' copyright if you republish.
FAQ
Does it work with custom domains?
Yes. lenny, lenny.substack.com and www.lennysnewsletter.com are the same newsletter; the actor follows Substack's redirect and reads from the domain the newsletter actually uses.
What about paid posts?
The archive lists them with all metrics. With includeBody, Substack returns the free preview that it shows to non-subscribers, and the row carries bodyIsPreview: true. Comments under paid posts are visible only to subscribers, so they come back empty.
How many posts can I get?
The whole archive. maxPostsPerNewsletter and publishedAfter keep a run affordable; a monitor uses newOnly.
Can I get subscriber numbers?
Substack publishes a tier, not a number, for paid subscribers, and a free subscriber count for some newsletters. Both come through as published.
Where do I find the leaderboards?
In Substack Newsletter Directory, the sibling actor that lists every category leaderboard. Substack Comments Scraper does comments only.
Support and feedback
Missing a field or found something that does not work? Open an issue in the Issues tab and it will be answered, usually within a day. If the actor saves you time, a short review helps other people find it.