HomeOur actorsSubstack Scraper
Substack Scraper logo

Substack Scraper

Extract posts, full article text, likes, restacks, comments and podcast episodes from any Substack newsletter. Works with custom domains. No login needed.

$1.38 / 1,000 results100% successTested dailyNo browser, no platform fees

Why this one

Substack has no public API, and most newsletters sit on custom domains that generic crawlers handle badly. This actor talks to the same JSON endpoints Substack's own site uses, follows the domain redirects for you, and returns posts with the full article text, engagement numbers and, if you want, the whole comment thread.

  • Works with a subdomain, a custom domain or a single post URL; you do not need to know which one a publication uses.
  • Full article text as plain text and HTML, with paywalled posts clearly flagged as preview-only instead of silently truncated.
  • Comments come back threaded, with depth and parent IDs, so you can rebuild the conversation.
  • Substack's own archive search is exposed as an input, so a keyword run returns only matching posts.

What people use it for

  • Research on what the leading newsletters in a niche publish, how often, and which posts get the most likes and restacks.
  • A weekly digest of new posts from a list of publications delivered to Notion, Slack or e-mail.
  • Clean article text for a vector database or an AI agent, with the podcast audio URL when a post is an episode.
  • Engagement analytics for your own publication over time, exported to a sheet.

Input

FieldTypeDefaultWhat it does
publicationsarray["https://www.lennysnewsletter.com"]Substack newsletter URLs or subdomains, e.g.
maxPostsPerPublicationinteger50Newest posts first.
searchstringOptional keyword filter applied by Substack's own archive search.
postedAfterstringOptional ISO date such as `2026-01-01`.
includeBodybooleantrueFetch each post and add `bodyText` (plain text) and `bodyHtml`.
includeCommentsbooleanfalseAlso scrape the comment thread of each post as separate records (`type: "comment"`).
proxyConfigurationobjectSubstack rarely blocks.

Output

Each result is one JSON record. The main fields: type, publication, title, subtitle, postDate, authors, audience, likes, comments, restacks, wordCount, url. Download as JSON, CSV or Excel, or read it through the API.

Pricing

$1.38 / 1,000 results, charged per result with no Apify platform usage added on top. A run that returns nothing costs nothing beyond Apify's default start fee of $0.00005.

Frequently asked

Does it get paywalled posts?

It returns exactly what Substack shows to a non-subscriber, which is the free preview. The post is marked with bodyIsPreviewOnly so you can filter it out. It never bypasses a paywall.

Are Substack Notes included?

No. Notes are a separate social feed. The actor covers posts, podcasts and comments.

How many posts can one run fetch?

The whole archive if you want it. Posts are fetched 50 at a time and full text costs one extra request per post, so a 500-post archive with text takes a couple of minutes.

Full reference documentation, sample output and the changelog live on the Apify listing.