Substack Scraper - Posts, Dates, Subtitles, Subscriber Counts avatar

Substack Scraper - Posts, Dates, Subtitles, Subscriber Counts

Pricing

from $1.00 / 1,000 posts

Go to Apify Store
Substack Scraper - Posts, Dates, Subtitles, Subscriber Counts

Substack Scraper - Posts, Dates, Subtitles, Subscriber Counts

Scrape any Substack newsletter by name or URL: post title, URL, publish date, subtitle, free preview snippet, paywall flag, likes, comments, restacks, word count and the publication's public subscriber count. No login, no browser, no proxy needed.

Pricing

from $1.00 / 1,000 posts

Rating

0.0

(0)

Developer

Anatolian Data

Anatolian Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Get the post list of any Substack newsletter as clean JSON, CSV or Excel. Give a newsletter name, subdomain or URL; the Actor returns one row per post with title, URL, publish date, subtitle, the free preview snippet, paywall flag, likes, comments, restacks and word count, plus the publication's public subscriber count.

  • No login, no cookies, no browser, no proxy needed
  • Works with custom domains (e.g. www.lennysnewsletter.com) and *.substack.com
  • Filters: newest or top posts, free-only or paywalled-only, keyword, date range
  • Fast: ~100 posts in about 10 seconds

What it does not collect

Only data that Substack shows publicly on the newsletter's archive page:

  • No paywalled content. For paid posts you get the title, subtitle, date and the public free preview only.
  • No full article text, no subscriber or email lists, no author or reader personal data.

Input

FieldDescription
publicationsList of newsletters: noahpinion, Lenny's Newsletter, https://www.lennysnewsletter.com, https://example.substack.com, or any post URL. Names are matched with Substack's own search; unrelated matches are rejected.
maxPostsPerPublicationMax posts per newsletter (default 50).
sortnew (newest first) or top (most popular).
audienceall, free or paid.
keywordOptional, uses the newsletter's own archive search.
dateFrom, dateToOptional date range, e.g. 2026-01-01.

Example:

{
"publications": ["noahpinion", "https://www.lennysnewsletter.com"],
"maxPostsPerPublication": 50,
"sort": "new",
"dateFrom": "2026-01-01"
}

Output

One row per post:

{
"publicationName": "The Pragmatic Engineer",
"publicationUrl": "https://newsletter.pragmaticengineer.com",
"subscriberCount": 1100000,
"subscriberCountText": "Over 1,100,000 subscribers",
"paidSubscribersText": null,
"postId": 183694080,
"title": "When AI writes almost all code, what happens to software engineering?",
"subtitle": "No longer a hypothetical question, this is a mega-trend set to hit the tech industry",
"url": "https://newsletter.pragmaticengineer.com/p/when-ai-writes-almost-all-code-what",
"publishedAt": "2026-01-06T17:41:49.383Z",
"type": "newsletter",
"audience": "everyone",
"isPaywalled": false,
"freeSnippet": "This article was originally a paid one...",
"wordCount": 6843,
"reactionCount": 1076,
"commentCount": 41,
"restackCount": 104,
"coverImage": "https://substack-post-media.s3.amazonaws.com/...",
"tags": [],
"scrapedAt": "2026-10-17T21:00:00.000Z"
}

Other fields: publicationId, publicationSubdomain, publicationTagline, publicationLanguage, hasCustomDomain, slug, description, section, language, podcastDurationSecs, input.

subscriberCount is the number Substack displays on the newsletter page ("Over 460,000 subscribers"). It is null when the publication hides it.

A run summary (posts per newsletter, skipped inputs) is saved in the key-value store as RUN_SUMMARY.

Pricing

Pay per result: $0.001 per post (that is $1 per 1,000 posts) plus a tiny start fee. Platform usage is included. Set a maximum cost per run in the Apify console and the Actor stops exactly there.

Use cases

  • Track competitors' or partners' publishing frequency and engagement
  • Build a list of newsletters in a niche with their subscriber counts for sponsorship outreach
  • Monitor new posts from a set of newsletters (schedule the Actor daily with dateFrom)
  • Research datasets of titles, subtitles and engagement over time

Notes

  • If a name matches no newsletter, the run skips it and tells you why; use the URL instead.
  • Newsletters that left Substack (e.g. moved to Ghost) are skipped with a clear message.
  • Questions or a missing field? Open an issue on the Actor page.