Substack Scraper: Posts, Likes, Comments, Full Text avatar

Substack Scraper: Posts, Likes, Comments, Full Text

Pricing

from $1.50 / 1,000 posts

Go to Apify Store
Substack Scraper: Posts, Likes, Comments, Full Text

Substack Scraper: Posts, Likes, Comments, Full Text

Scrape any Substack newsletter, custom domains included: title, date, authors, likes, comments, restacks, tags and subscriber count. Optional full text as plain text and Markdown, comment threads, and keyword search across Substack. No login.

Pricing

from $1.50 / 1,000 posts

Rating

0.0

(0)

Developer

Plainsource

Plainsource

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share

This Substack scraper downloads posts from any Substack newsletter, including the ones on their own domain, with title, date, authors, likes, comments, restacks, tags and the publication's subscriber count. Turn on full text to get each article as plain text and Markdown, and turn on comments to get the discussion under each post. No Substack account, cookie or API key needed.

  • Paste any kind of Substack link. A name like noahpinion, a substack.com URL, a custom domain like www.lennysnewsletter.com, an author profile like @noahpinion, or a single post URL all work.
  • Get the whole archive. Posts come newest first and the Actor keeps paging until it hits your limit or a date like 2026-01-31 or 30 days.
  • Hidden sections included. Many newsletters keep podcast notes or guest series out of their main archive. This Actor reads those sections too and merges them by date.
  • Search all of Substack by keyword to collect posts from newsletters you don't know yet.

What data you get

FieldWhat it holds
title, subtitle, url, publishedAtThe post and when it went out
authors, authorNamesEvery byline with name, handle and profile link, guests included
likes, commentCount, restacksEngagement counts
audience, isPaidWhether the post is free or for paid subscribers
wordCountLength of the full post, also for paid posts
tags, section, coverImage, podcastTags, section name, cover image URL, and audio URL for podcast episodes
publicationName, publicationUrl, publicationSubscribersThe newsletter, its home page and its public subscriber count ("Over 461,000 subscribers", plus publicationSubscribersMin as a number)
text, markdown, textIsPreviewFull article as plain text and Markdown (with Include full text)
commentsComment threads with author, date, text, likes and nested replies (with Include comments)

How to use it

  1. Add one or more publications or post URLs, or a search query.
  2. Set Max posts per publication.
  3. Optional: set Only posts newer than, and turn on Include full text or Include comments.
  4. Run it and export to JSON, CSV or Excel, or call it from the API, Make, Zapier, n8n or an AI agent through the Apify MCP server.

Full text and comments each cost one extra request per post, so a run with both on takes a few seconds per post instead of a few seconds per 50 posts.

Example input

{
"publications": ["noahpinion", "www.lennysnewsletter.com"],
"maxPostsPerPublication": 3,
"onlyPostsNewerThan": "30 days",
"includeFullText": true,
"includeComments": true,
"maxCommentsPerPost": 5
}

Example output (one post, text and comments shortened)

{
"publicationName": "Noahpinion",
"publicationUrl": "https://www.noahpinion.blog",
"publicationSubdomain": "noahpinion",
"publicationSubscribers": "Over 461,000 subscribers",
"publicationSubscribersMin": 461000,
"postId": 222264141,
"title": "Roundup #90: In which Noah joins a Japanese VC firm",
"url": "https://www.noahpinion.blog/p/roundup-90-in-which-noah-joins-a",
"publishedAt": "2026-10-27T07:17:34.767Z",
"updatedAt": "2026-10-27T07:18:58.872Z",
"type": "newsletter",
"audience": "everyone",
"isPaid": false,
"authors": [
{ "name": "Noah Smith", "handle": "noahpinion", "id": 8243895, "profileUrl": "https://substack.com/@noahpinion", "isGuest": false }
],
"authorNames": "Noah Smith",
"wordCount": 3167,
"likes": 278,
"commentCount": 34,
"restacks": 17,
"coverImage": "https://substackcdn.com/image/fetch/$s_!KCl-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5caa2f-6bdf-48cc-9785-963744ee4cae_1006x600.jpeg",
"tags": [],
"language": "en",
"text": "I have a fun announcement today, which is that I have a new side gig. I’ll be joining the Japanese VC firm Coral Capital as a Venture Partner! ...",
"markdown": "![](https://substackcdn.com/image/fetch/...)\n\nI have a fun announcement today, which is that I have a new side gig. ...",
"textWordCount": 3177,
"textIsPreview": false,
"comments": [
{
"id": 371442049,
"parentId": null,
"author": "Fallingknife",
"date": "2026-10-27T09:13:44.880Z",
"text": "Dying or mean reverting? ...",
"likes": 21,
"replies": [
{ "id": 371957546, "parentId": 371442049, "author": "cp6", "date": "2026-10-27T20:47:34.043Z", "text": "I agree. ...", "likes": 7, "replies": [] }
]
}
],
"commentsFetched": 5,
"source": "noahpinion"
}

How much does it cost?

You pay per post saved. Comments are stored inside their post, so they never add items. Inputs that fail (a wrong link, a deleted post, a site that is not on Substack) cost nothing and are listed in the PROBLEMS record of the run's key-value store.

Each post costs $0.0015, plus $0.0005 once per run. Full text and comments are included at no extra cost. 1,000 posts cost about $1.50, and Apify's free plan credit of $5 a month covers about 3,300 posts.

Use cases

  • Newsletter research: compare how often a set of newsletters post, how long the posts are and which ones get the most likes and restacks.
  • Content monitoring: run it on a schedule with Only posts newer than set to 1 day to collect new posts from the newsletters you follow.
  • AI and search datasets: collect free articles as Markdown for summaries, RAG pipelines or topic analysis.
  • Audience research: read the comment threads to see what readers ask and argue about.

FAQ

Can it get paid posts? It gets every paid post's title, date, authors, word count, likes, comments count and restacks. The text is only the free preview that Substack shows to non-subscribers, and those posts have textIsPreview: true. Substack also hides the comments on paid posts from non-subscribers, so commentsNote says so instead.

Does it work with custom domains? Yes. Give the custom domain (www.thefp.com) or the substack.com subdomain, which redirects to it. If a domain is not a Substack site, the input is listed in PROBLEMS with that reason.

What about rate limits? Substack starts answering "Too Many Requests" when one IP asks too fast. The Actor spaces its requests about a second apart, and when Substack still says no it waits longer and retries, up to six times per request. If you scrape thousands of posts with full text, turn on Apify Proxy to spread the load.

How many posts can I get from one newsletter? The whole public archive. Set Max posts per publication to a number larger than the archive.

Do I need a Substack account? No. The Actor reads the same public data your browser loads when you open a newsletter's archive.

Is this legal? It only reads what newsletters publish publicly. You are responsible for how you use the data, especially personal data in comments, under laws like GDPR.

Other Actors by this developer