Substack Scraper – Newsletter Posts, Search & Publication Info
Pricing
from $1.00 / 1,000 posts
Substack Scraper – Newsletter Posts, Search & Publication Info
Scrape Substack newsletter posts from any publication URL or search all of Substack by keyword. Get title, date, author, URL, likes, comments, restacks, word count and free/paid flag, plus publication info. Public JSON API, no login.
Pricing
from $1.00 / 1,000 posts
Rating
0.0
(0)
Developer
Ben Barazandeh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape posts from any Substack newsletter, or search all of Substack by keyword. For each post you get the title, subtitle, publish date, author(s), URL, likes, comments, restacks, word count, tags, cover image and a free/paid flag. You can also get one publication row per newsletter with its name, author, description, logo, language, subscriber band (for example "1.2M+") and whether paid subscriptions are enabled. It uses Substack's public JSON endpoints, so you don't need a login, cookies or a browser.
Try it now: the input is pre-filled with Lenny's Newsletter. Click Start.
What can you do with it?
- Newsletter research and competitor tracking: export every post a newsletter has published, with engagement, to see which topics work.
- Content monitoring: schedule a daily run with
dateFromto get new posts from a list of newsletters. - Topic discovery: search Substack for a keyword like
ai agentsand find the writers and newsletters covering it. - Creator and sponsor prospecting: build lists of newsletters with author names, subscriber bands and paid status.
- Datasets for AI and NLP: turn on
includeContentto get the publicly visible post text.
Input
| Field | Notes |
|---|---|
publicationUrls | https://name.substack.com, a custom domain such as https://www.lennysnewsletter.com, or just name. |
searchQueries | Keywords searched across all of Substack. |
maxPostsPerSource | Per publication or per query. Default 50. |
sort | new (default) or top, for publication archives. |
dateFrom / dateTo | YYYY-MM-DD, UTC. dateTo includes the whole day. |
audience | all, free or paid. |
includeContent | Adds text: the full text for free posts, the public preview for paid posts. |
includePublicationInfo | One publication row per newsletter (default on). |
Output
Sample post:
{ "type": "post", "publicationName": "Lenny's Newsletter", "title": "How to tell if a startup has a moat","url": "https://www.lennysnewsletter.com/p/how-to-tell-if-a-startup-has-a-moat", "postDate": "2026-10-13T12:45:41.160Z","author": "Dan Hockenmaier", "isPaid": true, "audience": "only_paid", "likes": 375, "comments": 2, "restacks": 22, "wordcount": 4153 }
Sample publication:
{ "type": "publication", "name": "Lenny's Newsletter", "url": "https://www.lennysnewsletter.com", "authorName": "Lenny Rachitsky","language": "en", "subscriberBand": "1.2M+", "paidEnabled": true, "createdAt": "2019-06-01T15:35:37.885Z" }
Download the results as JSON, CSV, Excel or HTML, or use the API. The dataset has Posts and Publications views.
Pricing
Pay per event, with no start fee:
- $0.001 per post ($1 per 1,000 posts)
- $0.002 per publication info row
Set Maximum cost per run and the Actor stops cleanly when it reaches the limit.
Limits
- Paid posts: you get the metadata and the public preview only. Paywalled text is never accessed.
- Search uses Substack's own search, so results are ranked by relevance and capped by Substack. Expect up to a few hundred posts per query.
- Exact subscriber counts aren't public.
subscriberBandis the band Substack shows publicly. - Requests are spaced out and retried with backoff on HTTP 429 and 5xx errors.
FAQ
Is it allowed? It reads only public pages and the public JSON that Substack's own website uses. Respect authors' copyright and applicable privacy law when you use the data.
Affiliation? This Actor is independent and not affiliated with Substack Inc.