Substack Scraper: Newsletter Posts, Likes & Comments
Pricing
from $1.28 / 1,000 posts
Substack Scraper: Newsletter Posts, Likes & Comments
Export any Substack newsletter's posts: title, subtitle, date, authors, free or paid, likes, comments, restacks, word count, podcast audio and optional full text. Paste publication URLs or names. Keyword and date filters. $1.50 per 1,000 posts, no big start fee.
Pricing
from $1.28 / 1,000 posts
Rating
0.0
(0)
Developer
Larkmoor Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Share
Export every post of any Substack newsletter into a clean table: title, subtitle, publish date, authors, free or paid, likes, comment count, restacks, word count, cover image, podcast audio and, if you want it, the full public text. Paste newsletter URLs (or just their names), set how far back to go, and download the results as JSON, CSV or Excel.
It reads each newsletter's own public archive data (the same JSON the newsletter's archive page loads in your browser), respects robots.txt, and never logs in.
What you can use it for
- Competitor and market research: see which topics get the most likes, comments and restacks in your niche
- Content strategy: find the best-performing posts of the top newsletters in a category before you write your next issue
- Sponsorship and partnership scouting: compare how active and engaged newsletters are before you pitch or buy an ad
- Monitoring: run it daily with "only posts from the last 1 day" to get new posts from a list of newsletters in a spreadsheet, Slack or your CRM
- AI and research datasets: export the full text of free posts for summarisation, topic modelling or sentiment analysis
- Writers: back up your own archive with all engagement numbers in one file
Why this one
- Cheap and predictable: $1.50 per 1,000 posts and a $0.001 start fee. No $0.09 start fee, no monthly rental.
- Engagement numbers on every row: likes, comments, restacks and word count, so you can rank posts immediately
- Free vs paid flag on every post (
audience,isPaid), so you can measure how much of a newsletter is paywalled - Any address works:
name.substack.com, custom domains (www.lennysnewsletter.com),substack.com/@nameor justname - Filters that save money: date window, keywords and "skip paid posts" are applied before you are charged
- Full archive depth: page through the whole archive, newest first or most popular first
Input
| Field | What it does |
|---|---|
publications | List of newsletters: URL, custom domain, substack.com/@name or just the name |
maxPostsPerPublication | How many posts per newsletter (default 50, up to 5,000) |
sort | new (newest first) or top (most popular first) |
maxAgeDays | Only posts from the last N days (with newest first) |
keywords | Keep only posts whose title, subtitle, description or preview contains one of these words |
skipPaidPosts | Leave out paid-subscribers-only posts |
includeContent | Add the post body as plain text (free posts are complete; paid posts give their public preview) |
previewChars | Length of the short preview text (0 = none) |
maxResults | Hard cap across all newsletters, keeps the cost predictable |
Example input:
{"publications": ["https://www.lennysnewsletter.com", "noahpinion"],"maxPostsPerPublication": 100,"sort": "new","maxAgeDays": 90,"includeContent": false}
Output
One row per post:
{"publication": "noahpinion.substack.com","title": "A Nobel for New Keynesian macro, at last!","subtitle": "...","url": "https://noahpinion.substack.com/p/...","publishedAt": "2026-10-13T...Z","authors": ["Noah Smith"],"audience": "everyone","isPaid": false,"type": "newsletter","tags": [],"likes": 441,"comments": 120,"restacks": 35,"wordCount": 2753,"coverImage": "https://substackcdn.com/...","description": "...","preview": "First 300 characters of the post...","podcastUrl": null,"podcastDurationSec": null,"language": "en"}
With includeContent on, each row also gets contentText (plain text) and contentIsFull (true for free posts).
A summary (newsletters read, posts returned, and any newsletter that could not be read with the reason) is saved as OUTPUT in the run's key-value store.
How much does it cost?
Pay per result: $1.50 per 1,000 posts on the Free plan plus $0.001 per run, with automatic discounts on paid Apify plans. Platform compute is included. Posts removed by your filters are not charged, and a newsletter that cannot be read costs nothing.
Worked examples:
- Weekly check of 30 newsletters in your niche,
maxAgeDays: 7, about 2 posts each: 60 posts = $0.09 a week - Top 100 posts of 20 big newsletters with
sort: top: 2,000 posts = $3.00 - Full archive of one newsletter with about 800 posts: $1.20
Set maxResults to cap any run.
FAQ
Is it legal to scrape Substack? This actor only reads data that each newsletter publishes openly to every visitor: its public archive listing and public post pages. It respects robots.txt, does not log in, does not bypass the paywall and does not collect subscriber lists or personal data. Paid posts return only what Substack shows the public (title, numbers and preview). As always, use the data in line with the newsletter's terms and copyright: analysis and research are fine, republishing someone's writing is not.
Can I get the full text of paid posts?
No. Paid posts give their public preview only (contentIsFull: false). Free posts are complete.
Does it work with custom domains?
Yes. Most big newsletters use their own domain (for example www.lennysnewsletter.com); paste it as is.
Can I search all of Substack by keyword?
This actor works per newsletter. Give it a list of newsletters and use keywords to keep only posts about your topic.
How fresh is the data? Live: every run reads the newsletter's archive at that moment, including like and comment counts.
Why is a newsletter missing from the results?
It has moved off Substack, is private, or the address is wrong. The reason is listed in the OUTPUT summary.
Can I schedule it?
Yes. Use Apify Schedules (for example daily at 8:00) with maxAgeDays: 1 and connect the dataset to Google Sheets, Slack, Zapier or Make.
Integrations
Results work with every Apify integration: Google Sheets, Slack, Zapier, Make, Airtable, webhooks, the Apify API and the Python and JavaScript clients. Download as JSON, CSV, Excel, XML or HTML.
Changelog
- 2026-10-20 — First release: posts with likes, comments, restacks, word count, free/paid flag, podcast info, optional full text; date, keyword and paid filters; custom domains and
@nameprofiles.