Substack Posts Scraper avatar

Substack Posts Scraper

Pricing

from $0.26 / 1,000 post results

Go to Apify Store
Substack Posts Scraper

Substack Posts Scraper

Scrape posts from any Substack publication (subdomain or custom domain): full HTML and plain text for public posts, paywall signal and teaser for paid posts. Flat, LLM-ready JSON. $0.0002 per post.

Pricing

from $0.26 / 1,000 post results

Rating

0.0

(0)

Developer

Leonardo Santos

Leonardo Santos

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Fetch the posts of any Substack publication — a .substack.com subdomain or a custom domain like www.slowboring.com — as clean, flat, LLM/agent-ready JSON. Free posts come back with full HTML and plain text; paywalled posts come back with the paywall signal plus whatever public teaser the publication provides. One item per post, newest-first, ready to drop straight into a pipeline.

Why this actor?

  • 💵 $0.0002 per post — undercuts the field: the category leader charges a $0.005 start fee before you get a single item, and the next-cheapest credible competitor is still 50% more per item. No start fee here — you only pay for posts delivered.
  • 🎯 Reliability-first — built and monitored on a first-party JSON API (/api/v1/posts), not brittle HTML scraping. Contract-checked by an automated watchdog with smoke tests on every run.
  • 🌐 Works with custom domains — subdomains and mapped custom domains (www.slowboring.com, astralcodexten.com) are handled identically.
  • 🔒 No personal data — public post content only. This actor never returns subscriber lists, author emails, or any contact data.
  • ⏱️ Incremental crawls built inpublishedAfter stops pagination as soon as it reaches older posts, so scheduled re-runs only pay for new content.
  • 🤖 body_text ready for LLM pipelines — tag-stripped, entity-decoded plain text alongside the raw body_html, so you can feed posts straight into an LLM without writing your own HTML cleaner.

Input

{
"publications": ["astralcodexten", "www.slowboring.com"],
"maxPostsPerPublication": 50,
"publishedAfter": "2026-01-01",
"includeBodyHtml": true
}

publications accepts a bare name (astralcodextenastralcodexten.substack.com), a subdomain, a custom domain, or a post/homepage URL — up to 50 publications per run, deduplicated. See the input schema for proxyConfiguration.

Output

One item per post:

{
"input": "astralcodexten",
"publication_host": "astralcodexten.substack.com",
"post_id": 148213567,
"slug": "links-for-july",
"url": "https://astralcodexten.substack.com/p/links-for-july",
"title": "Links For July",
"subtitle": "Highlights from the comments, some AI news, and more",
"post_date": "2026-07-14T13:05:00.000Z",
"type": "newsletter",
"audience": "everyone",
"is_paywalled": false,
"body_html": "<p>Here's a bunch of stuff I found interesting this month...</p>",
"body_text": "Here's a bunch of stuff I found interesting this month...",
"word_count": 3120,
"description": "Highlights from the comments, some AI news, and more",
"cover_image": "https://substackcdn.com/image/fetch/astralcodexten/links-for-july-cover.jpg",
"comment_count": 412,
"reaction_count": 987,
"error": null,
"scraped_at": "2026-07-17T00:00:00.000Z"
}

A paywalled post comes back the same shape with is_paywalled: true, audience: "only_paid", body_html: null, and body_text set to whatever teaser the publication exposes (may be empty — not every publication ships one).

Pricing

Pay per result: one post-result event at $0.0002 per delivered post item — free and paywalled posts are both charged, since metadata plus the paywall signal is a delivered result either way. Error items (bad input, publication not found, no posts match) are always free. This is a Pay per event + usage actor — you also pay Apify platform usage for the run's compute, same as our other actors.

Limitations

  • Up to 50 publications per run, up to 2,000 posts per publication.
  • Paywalled post bodies are not included. You get the paywall signal (is_paywalled, audience) and whatever public teaser the publication provides — never the paid content itself.
  • No comments and no Notes in v1 — post metadata and content only.

Use cases

  • 🗞️ Content monitoring — track new posts from publications you follow or compete with, with publishedAfter for cheap incremental runs.
  • 🤖 LLM pipelines / RAG — flat, pre-cleaned body_text for summarization, search indexing, or agent tool use.
  • 📊 Research & analysis — post cadence, paywall mix, and engagement signals (comment_count, reaction_count) across a set of publications.

FAQ

Can I get the full text of paywalled posts? No — this actor never attempts to circumvent paywalls. Paid posts return the paywall signal and any public teaser only.

Does this work on custom domains, not just *.substack.com? Yes, custom domains are handled identically to subdomains — just pass the domain as the publication.

Do I pay for posts that fail? No — error items (invalid input, publication not found, no matching posts) are always free.


This Actor is an independent tool, not affiliated with or endorsed by Substack Inc.