Substack Scraper – Posts, Notes, Authors & Rankings avatar

Substack Scraper – Posts, Notes, Authors & Rankings

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Substack Scraper – Posts, Notes, Authors & Rankings

Substack Scraper – Posts, Notes, Authors & Rankings

Scrape Substack newsletters, search posts across Substack, get the top newsletters of any category, and writer profiles with their Notes: reactions, comments, full text, audience size, paid tier, followers and leaderboard rank. No login or API key needed.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Sheshinmcfly

Sheshinmcfly

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Features

Limited permissions

Share

Substack Scraper — Posts, Notes, Authors, Rankings & Subscriber Counts

Scrape any Substack newsletter — subdomain or custom domain — search all of Substack by keyword, pull the top newsletters of any category, or get writers' profiles and their Substack Notes. Every post comes with engagement (reactions, restacks, comments), the free preview text, language and authors; every newsletter with its audience as Substack shows it ("Over 1,200,000 subscribers", "Tens of thousands of paid subscribers"). Add comments with nested replies, full post HTML, the newsletters each publication recommends and the topics trending on Substack. No login, no account, no API key.

🏆 Category rankingsThe top newsletters — or top paid newsletters — of any of Substack's 35 categories, up to ~525 each, with author, audience and X account
✍️ Authors & NotesA writer's profile (exact followers, audience, leaderboard rank, X account, publications) plus their latest Notes with likes, restacks and replies
🔍 Search all of SubstackFind posts on any topic across every newsletter, each with its publication and audience size
👥 Audience sizeSubscriber range and paid-subscriber tier for every publication
🤝 RecommendationsThe newsletters each publication recommends — map a niche, find prospects
📬 Full archivesHundreds of posts per newsletter, newest, top or pinned
💬 CommentsEvery comment with nested replies (optional)

Data you get

Per post

FieldDescription
postId / title / subtitle / descriptionPost identity and summary
url / slug / postDateCanonical link, slug, publish date (ISO 8601)
type / audience / isPaidnewsletter, podcast…; everyone or only_paid
wordcount / languageLength and language
freeExcerptThe preview text Substack shows publicly (also for paid posts)
authors / tags / sectionNameBylines, tags, section
reactionCount / reactions / restacksEngagement (reactions broken down by emoji)
commentCount / childCommentCountComments and replies to comments
restackedFromPublicationWhen the post is a restack of another newsletter
coverImage / hasVoiceover / podcastUrl / podcastDurationMedia
bodyHtmlFull HTML (optional)
publicationUrl / publicationIdThe newsletter it belongs to
publicationName / publicationAuthor / subscriberCountText…Search mode: the newsletter and its audience

Per publication (recordType: publication_metadata)

FieldDescription
name / title / descriptionNewsletter name and description
authorName / authorHandleAuthor
subscriberCountText / subscriberCountApproxe.g. "Over 461,000 subscribers", "461K+"
subscriberTier / paidSubscriberTiere.g. "Hundreds of thousands of subscribers", "Tens of thousands of paid subscribers"
paidSubscriptionsEnabled / hasPodcastMonetization and podcast
language / createdAt / firstPostDateLanguage and age
subdomain / customDomain / logoUrl / coverImageBranding

Substack publishes audience as ranges, not exact numbers; the fields carry its exact wording. When a newsletter does not show its audience, those fields are null.

Per comment (optional) — commentId, postId, body, authorName, authorHandle, authorPhoto, date, editedAt, reactionCount, reactions, restacks, childrenCount, score, ancestorPath

Per recommendation (optional) — recommendedBy, name, publicationUrl, authorName, description, paidSubscriptionsEnabled, logoUrl, createdAt

Per ranked newsletter (recordType: ranking, Rankings mode)

FieldDescription
rank / category / rankingTypePosition in the category, which category, top or paid
name / publicationUrl / description / subdomain / customDomain / logoUrlThe newsletter
authorName / authorHandle / authorProfileUrl / authorBio / twitterUrlIts writer
subscriberCountText / subscriberCountApprox / subscriberTier / paidSubscriberTierAudience as Substack shows it
paidSubscriptionsEnabled / hasPodcast / language / createdAt / firstPostDateMonetization, podcast, language and age

Per author (recordType: author, Authors mode) — name, handle, profileUrl, bio, photoUrl, followerCount (exact), subscriberCountText ("466K+ subscribers"), subscriberCountApprox, bestsellerTier, leaderboardCategory / leaderboardRank / leaderboardType, twitterUrl, twitterVerified, links, primaryPublicationName, primaryPublicationUrl, publications (name, URL, role), profileCreatedAt.

Per note (recordType: note, Authors mode) — noteId, noteUrl, date, body, quotedText (when the note quotes a post), attachedPostTitle / attachedPostUrl / attachedPublication (when it shares a post), images, reactionCount, restacks, replyCount, language, authorName, authorHandle.

Per trending topic (recordType: trendingTopic, optional) — rank, isFeatured, title, query, description, category, relatedQueries, searchUrl, updatedAt.

Quick start

A newsletter's last 100 posts with its audience

{ "publications": ["www.lennysnewsletter.com"], "maxPostsPerPublication": 100 }

Search all of Substack

{ "mode": "search", "searchQueries": ["venture capital", "artificial intelligence"], "maxPostsPerPublication": 50 }

Top 200 paid newsletters in Technology and Finance

{ "mode": "rankings", "categories": ["technology", "finance"], "rankingType": "paid", "maxPublicationsPerCategory": 200 }

Writers' profiles and their last 100 Notes

{ "mode": "authors", "authors": ["garymarcus", "https://substack.com/@noahpinion"], "maxNotesPerAuthor": 100 }

Map a niche through recommendations

{ "publications": ["www.noahpinion.blog", "www.natesilver.net"], "maxPostsPerPublication": 5, "includeRecommendations": true }

Posts with full text and every comment

{ "publications": ["www.noahpinion.blog"], "maxPostsPerPublication": 20, "includeFullContent": true, "includeComments": true }

How to use

  1. Choose a Mode: Publications I list, Search all of Substack by keyword, Top newsletters by category or Authors and their Notes.
  2. Add publications (a subdomain like noahpinion, a domain, or any URL from the newsletter), search keywords, categories (e.g. technology, us-politics) or authors (a handle or substack.com/@ link).
  3. Set the limits — posts per publication or keyword, newsletters per category, notes per author — and turn on comments, full content, recommendations or trending topics if you need them.
  4. Run. The status message shows what each run returned by record type, and names any publication, category or author that was not found.

Use cases

  • Sponsorship & lead generation — the top newsletters of a category with their audience size, paid tier, writer and X account; or the newsletters a niche recommends.
  • Creator research — a writer's reach (followers, audience, leaderboard rank) and what they post on Notes, with engagement.
  • Content research — analyze a newsletter's posting frequency, topics and engagement over time.
  • Competitive monitoring — track competitor newsletters' output and reader engagement.
  • Trend & topic tracking — search all of Substack for a keyword and see who writes about it and how it lands.
  • Network mapping — follow recommendations to map who recommends whom in a niche.

Input

FieldTypeDescription
modeselectpublications (default), search, rankings or authors
publicationsarrayNewsletters to scrape (Publications mode)
searchQueriesarrayKeywords to search across Substack (Search mode)
categoriesarrayCategories to rank, by name or slug (Rankings mode)
rankingTypeselectall (top newsletters) or paid (top paid)
maxPublicationsPerCategoryintegerHow far down each ranking (default 100, up to ~525)
authorsarrayWriters by handle or profile link (Authors mode)
maxNotesPerAuthorintegerLatest notes per author (default 50, 0 = profile only)
sortselectnew, top or pinned
maxPostsPerPublicationintegerMax posts per publication or keyword (default 50)
includePublicationMetadatabooleanOne profile record per publication, audience included (default true)
includeFullContentbooleanFull HTML of each post
includeCommentsbooleanEvery comment and reply
includeRecommendationsbooleanNewsletters each publication recommends
includeTrendingTopicsbooleanTopics Substack features as trending right now (any mode)

Output examples

Publication

{
"recordType": "publication_metadata",
"publicationUrl": "https://www.lennysnewsletter.com",
"name": "Lenny's Newsletter",
"authorName": "Lenny Rachitsky",
"language": "en",
"createdAt": "2019-06-01T15:35:37.885Z",
"subscriberCountText": "Over 1,200,000 subscribers",
"subscriberCountApprox": "1.2M+",
"subscriberTier": "Millions of subscribers",
"paidSubscriberTier": "Tens of thousands of paid subscribers",
"paidSubscriptionsEnabled": true,
"hasPodcast": true
}

Post

{
"recordType": "post",
"title": "How to turn your AI into a world-class designer",
"postDate": "2026-09-01T12:45:59.568Z",
"wordcount": 4604,
"language": "en",
"reactionCount": 1214,
"restacks": 93,
"commentCount": 23,
"isPaid": true,
"authors": ["Anshu Chimala"],
"freeExcerpt": "👋 Hey there, I’m Lenny. Each week, I share deeply researched product, growth, and career advice. For more: Le…",
"url": "https://www.lennysnewsletter.com/p/how-to-turn-your-ai-into-a-world"
}

Ranked newsletter

{
"recordType": "ranking",
"rank": 2,
"category": "Technology",
"rankingType": "top",
"name": "The Pragmatic Engineer",
"authorName": "Gergely Orosz",
"subscriberCountText": "Over 1,100,000 subscribers",
"paidSubscriberTier": "Tens of thousands of paid subscribers",
"paidSubscriptionsEnabled": true,
"publicationUrl": "https://newsletter.pragmaticengineer.com"
}

Author

{
"recordType": "author",
"name": "Noah Smith",
"handle": "noahpinion",
"followerCount": 697305,
"subscriberCountText": "466K+ subscribers",
"leaderboardCategory": "Business",
"leaderboardRank": 2,
"leaderboardType": "paid",
"twitterUrl": "https://x.com/Noahpinion",
"primaryPublicationUrl": "https://www.noahpinion.blog"
}

Note

{
"recordType": "note",
"noteUrl": "https://substack.com/@garymarcus/note/c-369323630",
"date": "2026-10-24T18:34:47.472Z",
"body": "“There’s an old joke that if building architecture and construction practices were like software…”",
"reactionCount": 113,
"authorHandle": "garymarcus"
}

Search result

{
"recordType": "post",
"queryContext": "venture capital",
"title": "Venture Capital 101. Introduction",
"postDate": "2026-03-03T17:04:09.508Z",
"publicationName": "Stanford GSB Professor on Startups & Investors",
"publicationUrl": "https://ilyastrebulaev.substack.com",
"publicationAuthor": "Ilya Strebulaev",
"subscriberCountText": "Over 11,000 subscribers",
"reactionCount": 474,
"url": "https://ilyastrebulaev.substack.com/p/venture-capital-101-introduction"
}

Performance

Measured runs:

RequestRecordsTime
3 newsletters × 50 posts104~5–8 s
1 newsletter × 300 posts301~9 s
20 posts + full text + all comments229~8–12 s
2 newsletters + recommendations72~6 s
Search, 2 keywords × 30 posts60~10–13 s
Rankings, 2 categories × 60120~14 s
Whole ranking of a category525~15 s
2 authors + 60 notes each122~9 s

Pricing

Pay per result: $0.001 per record (post, comment, publication profile, recommendation, ranked newsletter, author, note or trending topic) returned, plus $0.00005 per run start.

RecordsPrice
1,000$1.00
10,000$10.00

Publications, categories and authors that do not exist are reported in the status message and never charged.

FAQ

Do I need a Substack account? No. The actor reads public Substack data — no login, no cookies, no API key.

Can I get the full text of paid posts? You get what Substack shows the public: the free preview (freeExcerpt) for every post, and the full text of free posts with Include full post content.

Is the subscriber count exact? Substack shows audience as ranges ("Over 461,000 subscribers", "Tens of thousands of paid subscribers"); the actor returns exactly what Substack shows.

How far do the category rankings go? Substack ranks about 525 newsletters per category (top and top paid). Ask for fewer with maxPublicationsPerCategory.

Which notes do I get? The author's own Notes, newest first. Notes that share a post include that post's title and link, and the quote when there is one.

Does it work with custom domains? Yes — www.lennysnewsletter.com, www.noahpinion.blog and similar work just like name.substack.com.

Keywords

substack scraper, newsletter scraper, substack api, substack notes scraper, substack leaderboard, top substack newsletters, substack subscriber count, substack search, substack authors, newsletter analytics, newsletter sponsorship leads, creator economy data, substack posts, substack comments, newsletter recommendations

More actors

Browse all my scrapers on my Apify profile.

Disclaimer

This actor collects only publicly available data from Substack and is not affiliated with Substack. You are responsible for how you use the data.

Changelog

VersionDateChanges
1.32026-11-12New: Rankings mode — the top (or top paid) newsletters of any Substack category, up to ~525 each, with writer, audience and X account; Authors mode — writer profiles (exact followers, audience, leaderboard rank, X account, publications) with their latest Notes; optional trending topics. A brief network hiccup no longer leaves a publication without posts. Run log in English.
1.22026-11-06Posts are back after a change on Substack's side, and long archives are read in full again. If Substack answers with an error, the run status now names the publication instead of returning it without posts. Same input, same fields.
1.12026-10-29New: search all of Substack by keyword; publication audience (subscriber range and paid tier), author, language and creation date; recommended newsletters; free preview text, language, restack source and reply counts on posts. Publications that do not exist are now reported and no longer return an empty billed record. Faster runs and a per-run summary in the status message.
1.02026-07-13Initial release — post archive with full engagement and content metadata