Substack Scraper: Posts & Newsletters avatar

Substack Scraper: Posts & Newsletters

Pricing

from $0.48 / 1,000 post scrapeds

Go to Apify Store
Substack Scraper: Posts & Newsletters

Substack Scraper: Posts & Newsletters

Scrape posts from any Substack newsletter (subdomain or custom domain): titles, dates, authors, likes, comments, restacks, tags, paid/free status and full text of free posts. Newest or most popular first. No login. $0.90 per 1,000 posts with or without full text, down to $0.48 on higher Apify plans.

Pricing

from $0.48 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

J

J

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

Get the posts of any Substack newsletter as clean, structured data: title, subtitle, date, author, likes, comment count, restacks, word count, tags, cover image, podcast link, paid/free status and, if you want it, the full text of free posts. Works with *.substack.com publications and custom domains. No login, no browser, fast. $0.90 per 1,000 posts (less on paid plans), the same price with or without full text, and no start fee.

What you can do with it

  • Track newsletters you follow or compete with: what they publish, how often, and which posts get the most likes and comments.
  • Research a niche: pull the most popular posts of a set of publications (Most popular first) to see what resonates.
  • Feed an LLM or a search index: collect the full text of free posts from the newsletters you choose.
  • Monitor topics: keep only posts that mention your keywords, or use each publication's own archive search.
  • Build a reading list or digest: newest posts since a date across many publications in one dataset.

Input

FieldWhat it does
publicationsSubdomains (astralcodexten), name.substack.com, custom domains (www.lennysnewsletter.com) or any link to a publication or post.
sortnew (newest first) or top (most popular first).
includeContentAdds bodyText for free posts (default off). includeHtml also adds bodyHtml.
searchWithinPublicationUses each publication's own archive search.
keywordsKeep only posts that mention one of these. You pay only for posts that match.
dateFromOnly posts published on or after this date.
maxPostsPerPublicationCap per publication (default 25).
maxItemsHard cap for the whole run, and your cost (default 50, 0 = no limit).

Example:

{ "publications": ["astralcodexten", "www.lennysnewsletter.com"], "sort": "top", "includeContent": true, "maxPostsPerPublication": 50 }

Output

One item per post:

{
"postId": 210686641,
"title": "Your Book Review: We Present Television",
"subtitle": "Finalist #11 in the Book Review Contest",
"url": "https://www.astralcodexten.com/p/your-book-review-we-present-television",
"postDate": "2026-10-10T01:05:13.124Z",
"type": "newsletter",
"audience": "everyone",
"isPaywalled": false,
"wordcount": 8651,
"likes": 134,
"commentCount": 91,
"restacks": 7,
"tags": [],
"authors": [{ "name": "Scott Alexander", "handle": "astralcodexten" }],
"publication": { "name": "Astral Codex Ten", "subdomain": "astralcodexten", "customDomain": "www.astralcodexten.com", "author": "Scott Alexander" },
"bodyText": "…full text when includeContent is on and the post is free…"
}
FieldMeaning
postId, slug, urlSubstack's post id, slug and canonical link.
title, subtitle, description, previewHeadline, subtitle, short description and the public preview text.
postDate, type, section, tags, languagePublication date (UTC), newsletter / podcast / thread, section and tags.
audience, isPaywalledeveryone for free posts, only_paid / founding for paid ones.
likes, reactions, commentCount, restacks, wordcountEngagement and length.
coverImage, podcastUrl, podcastDurationSecMedia links when present.
authorsName and Substack handle of each byline.
publicationName, subdomain, custom domain, main author, tagline, logo, created date, whether paid plans are on.
bodyText, bodyHtmlFull post body, free posts only, when requested.
source, inputapi (or rss fallback) and the publication you entered.

How to use

  1. Enter one or more publications (a name like astralcodexten or a domain).
  2. Pick the order, and turn on full text if you need it.
  3. Run, then download the dataset as JSON, CSV or Excel, or read it through the Apify API.

Pricing

Pay per result: $0.90 per 1,000 posts on the Free plan, down to $0.48 on higher plans (post-scraped), with or without full text, no start fee. Keyword filters and caps apply before you are charged. A run that finds nothing fails instead of silently returning an empty dataset.

Apify plan tierFreeBronzeSilverGoldPlatinumDiamond
per 1,000 posts$0.90$0.80$0.62$0.48$0.48$0.48

Limits and notes

  • Paywalled posts return metadata and the public preview only. The scraper never tries to get around a paywall.
  • Very large archives take a few minutes.
  • If a publication's full archive cannot be read, you get its latest ~20 posts with fewer fields.
  • Comments themselves, Substack Notes, subscriber lists and Substack-wide search are not included.
  • Public data only. Respect the authors' copyright: post text belongs to its authors, so check your use (quotation, analysis, internal research) is allowed before republishing it.
  • This actor is not affiliated with, endorsed by or sponsored by Substack Inc.