Substack Posts Scraper
Every post of any Substack publication — custom domains included, no login.
Plus $1 per 1,000 posts when you ask for the full text. Pay per result on Apify; runs that return nothing cost nothing; Apify's free plan includes $5 of usage a month.
Paste publication URLs, subdomains or author handles, set how many posts you need or a date like “90 days”, and get title, date, likes, comments, restacks, authors and the paid/free flag for every post — optionally with the full text — as JSON, CSV or Excel, or through the Apify API and integrations.
It reads the same public archive that powers each publication's own Archive page, so custom domains work, nothing needs a login, and paywalled posts return exactly what an anonymous reader sees: metadata plus the public preview.
What you get
- • Any number of publications per run; newest posts first with a date cut-off
- • Custom domains and moved subdomains resolved automatically; @handles accepted
- • Engagement per post: likes, comments, restacks, word count, paid/free
- • Optional full text of free posts (and the public preview of paid ones)
- • Monitored daily; fixed within 24 hours when Substack changes its API
Typical uses
- • Newsletter monitoring and competitive research across dozens of publications
- • Feeding posts into an LLM for summaries or topic tracking
- • Engagement benchmarks (likes, comments, restacks per post) over time
- • Archiving a publication to CSV or a database
Output
| publication, publicationName, publicationAuthor | Host, name and author of the publication |
| id, slug, url, title, subtitle, description, date, type | The post and its listing summary; newsletter, podcast, thread or video |
| audience, isPaid, wordCount | Free vs paywalled, length |
| reactions, reactionCount, commentCount, restacks | Engagement as shown publicly |
| authors, tags, section, coverImage, podcastUrl | Bylines with handles, tags, section, media |
| previewText, bodyText, bodyHtml | Listing preview; full text and HTML when requested |
Run it from code
Same Actor, same output, from your own scripts (any language) or from n8n, Make and Zapier.
curl -X POST "https://api.apify.com/v2/acts/chorelet~substack-posts-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"publications":["lenny","https://www.astralcodexten.com"],"maxPostsPerPublication":50,"postedAfter":"90 days","includeContent":false}'