Substack Data & API Alternative | Posts, Comments | $0.25 / 1K
Pricing
from $1.70 / 1,000 actor starteds
Substack Data & API Alternative | Posts, Comments | $0.25 / 1K
Substack data without a login or key: full post text, word count, reactions, restacks and comment threads from any Substack-hosted newsletter. Incremental mode returns only new posts. $0.25 per 1,000 posts, $0.12 per 1,000 comments, $0.0017 per run. Paid posts return the free preview only.
Pricing
from $1.70 / 1,000 actor starteds
Rating
0.0
(0)
Developer
Hriday Rungta
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Substack data export: posts, full text and comments from any Substack newsletter
Get Substack data as clean rows: every post with full body HTML, word count, reactions and restacks, plus optional comment threads. The Actor calls the same public JSON endpoints a publication's own website uses to render its archive. No login, no API key, no browser, no proxy. Turn on incremental mode to get only the posts published since your last run.
$0.25 per 1,000 posts, $0.12 per 1,000 comments, $0.0017 start fee per run.
What people use it for
- Download a Substack newsletter archive: export a publication newest-first, with full post HTML, for backups, offline reading or analysis.
- Monitor competitor and industry newsletters: track a list of publications and get only new posts on each run. Good for content research and market intelligence.
- Substack posts dataset for AI: full text, titles, subtitles and dates for LLM, RAG or topic-modelling datasets.
- Substack comments export: every comment with author, score, timestamp, depth and parent id, for audience research and sentiment analysis.
- Engagement research: reactions, restacks, comment counts and word count per post, to see what topics and lengths perform.
- Newsletter curation: pull the latest posts from the writers you follow into a sheet, a Notion table or a digest.
Why use this instead of the Substack API?
Substack has no official public API for reading publications. The endpoints this Actor uses are undocumented but stable and are what the Substack website itself calls, which is why no proxy or browser is needed. The Actor adds:
- Full post bodies: the archive listing has no body, so the Actor fetches each post you receive.
- Comment trees flattened with
depthandparentId. - Incremental mode, tracked per publication in a key-value store in your own account.
- Scheduling, webhooks, CSV, Excel and JSON export from Apify.
Limits, stated plainly
- Publications hosted on Substack only. Use
name.substack.comURLs or bare names. Custom domains work when the publication still runs on Substack (for exampleastralcodexten.com), but sites that left Substack or never used it return web pages instead of data. Stratechery's own domain returned HTML in our checks. - Paid posts return the public preview only. There is no login. Check the
audiencefield (everyoneoronly_paid); foronly_paidpostsbodyHtmlholds just the free preview, usually shorter thanwordcount. - Not covered: Substack Notes, subscriber lists, publication search or leaderboards, and paid-subscriber data.
- Comment rows for deleted comments are marked and their body and author are blanked.
Incremental mode
Set mode to changes. The first run per publication takes posts since firstRunSince (30 days by default, all for a deliberate backfill). Every later run returns only posts newer than the last one for that publication. A run cut short by maxItems still advances the mark from what it emitted, so no duplicates and no skipped posts.
Input
| Input | Default | Notes |
|---|---|---|
publications | required | One per line: platformer, platformer.substack.com or a custom domain that runs on Substack |
mode | all | all or changes (incremental) |
includeComments | false | Fetch each post's comment thread |
maxCommentDepth | 5 | 0 is top-level comments only |
maxItems | 100 | Cost cap: posts and comments count together, and publications are read in the order listed, so a low cap can be used up by the first one |
firstRunSince | 30 days | changes mode only |
Example input, a publication archive with full text:
{ "publications": ["noahpinion.substack.com"], "mode": "all", "maxItems": 50 }
Example input, track two newsletters (schedule it):
{ "publications": ["astralcodexten.substack.com", "noahpinion.substack.com"], "mode": "changes", "firstRunSince": "14 days", "maxItems": 100 }
Output
One row per post, plus one row per comment if comments are on. Real example, a post row (bodyHtml shortened):
{"postId": 206469842,"title": "Against Against Handover","slug": "against-against-handover","type": "newsletter","audience": "everyone","wordcount": 4492,"bodyHtml": "<p>...</p>","postDateUtc": "2026-10-20T20:32:59.315Z","commentsCount": 318,"reactions": { "❤": 201 },"restacks": 25,"canonicalUrl": "https://www.astralcodexten.com/p/against-against-handover","publicationHost": "astralcodexten.substack.com"}
Post rows also include subtitle, description and coverImage. Comment rows carry commentId, postId, parentId, depth, body, authorName, authorHandle, score, reactionCount, createdAtIso and deleted.
Pricing: pay per event, worked examples
| Event | Price |
|---|---|
| Actor started | $0.0017, once per run |
| Post scraped | $0.00025 ($0.25 per 1,000) |
| Comment scraped | $0.00012 ($0.12 per 1,000) |
| Run | Cost |
|---|---|
| 50 posts, no comments | about $0.014 |
| 1,000 posts | about $0.25 |
| 1,000 comments | $0.12 |
| Daily incremental run with 3 new posts | about $0.0025 |
Every post already includes the full body, with no separate tier. maxItems is your hard cost cap. Platform usage is included.
Integrations and scheduling
- Apify Schedules: run incremental mode hourly or daily.
- Webhooks, Make, n8n and Zapier: send new posts to Slack, email, Notion or a CRM.
- Google Sheets: export datasets to a sheet.
- API and clients (JavaScript, Python), and Apify's MCP server for AI agents.
FAQ
Does Substack have an API? Not an official public one for reading newsletters. This Actor uses the public endpoints the website itself relies on.
Can I download a whole Substack newsletter? Yes for free posts, newest-first. Paid posts give the public preview only.
Can I scrape a newsletter on a custom domain? If the publication is still hosted on Substack, usually yes. If the domain returns a normal website, the Actor cannot read it.
How do I export Substack comments? Set includeComments to true. Each comment is one row.
How do I get only new posts? Use mode: changes and schedule it.
Is it legal? It reads public pages' data without logging in. Respect each author's copyright when reusing content.
What are alternatives? qpayre/substack-scraper, automation-lab/substack-scraper and easyapi/substack-notes-scraper (for Notes, which this Actor does not cover). Compare current pricing and features on their pages.
Related Actors
- Telegram Channel Scraper: public channel posts and views.
- Reddit Scraper & API Alternative: subreddit and comment monitoring.
- Website to Markdown Crawler: turn any site into LLM-ready Markdown.
- easyapi/substack-notes-scraper: third-party Actor for Substack Notes.
- automation-lab/substack-scraper: third-party Substack Actor with publication metadata.