Substack Scraper avatar

Substack Scraper

Pricing

from $0.98 / 1,000 post rows

Go to Apify Store
Substack Scraper

Substack Scraper

Scrape Substack publications and posts: subscriber count, paid plan prices, author, and every post with date, paid flag, likes, comments, restacks, authors, and tags. Search Substack by keyword for posts or the newsletters behind them. Public data, no login. Clay ready.

Pricing

from $0.98 / 1,000 post rows

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Share

Scrape Substack publications and posts, or search all of Substack by keyword. For each publication you get its name, author, subscriber count as Substack shows it, paid plan prices, and its newest posts. Each post row carries the date, the paid or free flag, likes, comments, restacks, word count, bylines, and tags. A search returns the matching posts, or one row per newsletter behind them, which turns a topic into a list of newsletters to pitch, sponsor, or study. Rows are flat, so they export to CSV or drop into a Clay table.

Features

  • Publication profile. Name, author, tagline, language, first post date, the subscriber count Substack prints on the homepage (Over 1,200,000 subscribers) or its rounded figure (1.3K+), Substack's subscriber tier text, and the monthly, yearly, and founding plan prices.
  • Every post as a row. Title, subtitle, URL, publish time, audience (free, paid, or founding), word count, likes, comments, restacks, bylines with guest writers, and tags. Optional post text, where a paid post gives its free preview.
  • Search Substack. Keyword search across Substack posts, with each post's publication and subscriber count on the same row. Set Search output to publications for one row per newsletter instead.
  • Any address works. Custom domains (lennysnewsletter.com), substack.com subdomains, profile links (substack.com/@lenny), or a bare name (lenny).
  • Date window. Keep only posts from the last N days.

How it reads Substack

Substack's public pages and the public JSON routes its own site uses: the publication homepage, the post archive, and post search. robots.txt is read for every host and checked before every request. No login, no account, no API key, and no other developer's actor. A host that refuses a direct request is retried through the Apify proxy.

Input

FieldTypeDefaultWhat it does
publicationsarrayUp to 100 publications: a URL, a domain, a substack.com profile, or a bare Substack name
search_queriesarrayUp to 20 keyword searches across Substack posts
search_outputstringpostsposts for one row per matching post, publications for one row per newsletter behind them
max_posts_per_publicationstring20Newest posts per publication, 0 to 1000. 0 returns only the publication row
max_search_resultsstring50Rows per search query, 1 to 1000
since_daysstring0Skip posts older than this many days. 0 keeps all
include_publication_rowstringtruefalse returns post rows only
include_bodystringfalsetrue adds the post text to each post row of a listed publication
max_charge_usdstringThe run stops before it would charge more than this
proxy_modestringautoauto (direct, then the Apify proxy for a host that refuses) or direct

Every scalar input is accepted as a string, which is what Clay sends.

Output

One row layout for every row type, so no column is lost between them. Key fields:

FieldRowsExample
row_typeallpublication, post, no_results, error
publication_name, publication_url, author_nameallLenny's Newsletter, https://www.lennysnewsletter.com, Lenny Rachitsky
subscriber_count_text, subscriber_count_minallOver 1,200,000 subscribers, 1200000
subscriber_tier_text, paid_subscriber_tier_textallMillions of subscribers, Tens of thousands of paid subscribers
has_paid_plan, monthly_price, yearly_price, founding_price, price_currencyalltrue, 20, 200, 400, USD
post_title, post_url, post_date, post_typepostHow to tell if a startup has a moat, newsletter
audience, is_paidpostonly_paid, true
reaction_count, comment_count, restack_count, wordcountpost372, 2, 21, 4153
post_authors, post_tags, post_excerpt, body_textpostDan Hockenmaier, Career
search_querysearch rowscold email
row_status, error_reason, billable_events_jsonallok, null, {"post-row":1}

subscriber_count_min is the lower bound of what Substack shows (1.3K+ reads as 1300), not an exact count. A publication that hides its count leaves both subscriber fields empty.

The run summary (key-value store record RUN_SUMMARY) lists each publication and search with its row count and any note.

Pricing

Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.

EventFree planBronzeSilverGold
Post row (post-row), one post$0.00115$0.001093$0.001035$0.000977
Publication row (publication-row), one publication profile$0.002$0.0019$0.0018$0.0017
Actor start (apify-actor-start), once per run$0.001057$0.001057$0.001057$0.001057

Free rows: no_results and error rows, including the row a refused input returns. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 1304 post rows); any paid Apify plan removes that cap.

Example: 10 publications with their 20 newest posts each is 10 publication rows ($0.02) plus 200 post rows ($0.23), $0.251 with the actor start.

Usage examples

Apify Console or API

{ "publications": ["lenny.substack.com", "https://www.notboring.co"], "max_posts_per_publication": "20" }
{ "search_queries": ["b2b marketing", "cold email"], "search_output": "publications", "max_search_results": "100" }
{ "publications": ["lenny"], "since_days": "30", "include_body": "true" }

Clay

Add an Apify column that sends a newsletter URL in publications with max_posts_per_publication set to 0, and read subscriber_count_min, has_paid_plan, and monthly_price from the publication row.

MCP

The MCP server @mambalabsdev/mcp-substack-scraper exposes this actor as a tool for Claude and other MCP clients.

Error handling

SituationWhat you get
The input has no publication and no query, or a value that cannot be readOne free row, row_status error, error_reason starting with input_invalid:. The run ends successfully and nothing is charged by this actor beyond the actor start
A site that is not a Substack publicationOne free error row saying so
A publication refuses every route, or robots.txt disallows itOne free error row with row_status blocked
A search with no matchOne free no_results row
Max charge reachedThe run stops before the next billable row

Limitations

  • Subscriber counts are what Substack chooses to show: an exact homepage figure for some publications, a rounded figure (1.3K+) for others, and nothing for publications that hide it.
  • Paid posts give only the free preview Substack shows to visitors.
  • Substack search ranks by its own relevance and returns at most about 1,000 posts per query.
  • Notes, comments text, and subscriber lists are not read.
  • You are responsible for how you use the data and for Substack's terms.

More from Mamba Labs

ActorActor ID
Account Hiring WatchgRAZA5WBi1r6L0gy7
Agent Accessibility AuditoranxbRv0lKrpQ1pnua
Agent to Brokerage ResolverePRRGLxOGyaVHO4dI
AI Tooling DetectorEwkHhmqiuJgRoVEbE
B2B Reddit Conversation MonitorSoDryzzsjmY3SsiyG
Bluesky Brand Presence MappereLpxzP4IuXznlFVND
Career Change Signal EnginevX2Yga1a6wGaXaP14
Company Change Event FeedoX44rS0fkEJ3rXLWe
Company Contact Details Extractor4mMncKaJykiq94grz
Company Discovery List Builderjch0HdaZnpbMqlcGS
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Funding RecordOFS4Mt1gyYNtGfUbE
Company Headcount EstimatoraHC4GROnNt6kfZe5r
Company Identity Resolverlr8fTRAmZCBZmuwwh
Company Social Presence Mapper4k6CCemkgBDz18m2h
Competitor Price, Stock, and Changelog MonitoryxdgCbUQ4PYQWwRNU
Contact Classifier0lGSeYJmniXhGANnO
Contractor License LookupWBYK3CPI2kdeq4bP1
Cookie Consent AuditTrKyOS0KBoGC35nbr
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
Ecommerce Platform Profiler5G2NeYjBbQTjaTn9L
Ecommerce Store DiscoveryPeHu4sLyFvQHXUUrX
Event Presence IndexWLhMy8fMDgsxdYxv5
Expert Witness DirectoryLIpwlgfE3LaQBaXd4
Funding and Press Signal ScannerFS13X6dhQVgX3XOM6
GitHub Organization Signal ScannerahF8RRpv5mzPao5CN
Google Ads Transparency Monitor1eOwxhBVxzvOXAm4s
Government Contract Award MonitorzhEtllASykOcx9hJ8
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
ICP Fit ScorerW161DT8W4kW55dMFh
Influencer Change Monitord2VVgahNL6UmcLkhg
Influencer FindertpkedmloIIWtXx6sg
Influencer Lead List BuilderKnmByszcv135yM30G
Influencer Profile ScraperEqEnklDVMIcB1V499
Influencer Talent Agency LookupzCuX4Mgyg6JvXgGzd
Instagram Facebook Brand Presence MapperHXh65I0JBjPsunbY8
Integration and Marketplace Presence MapperV0guNuvM85Q61f2gj
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Job Change TrackerL8UbEmMJC1XYPSZOb
Job Posting MonitorQCfICD9kOPiOdj5iI
Legal Entity ResolverKHFyPCDIx7CyqULYm
Link in Bio Scraper and Newsletter DetectorOorucdheTIgu7RFzK
LinkedIn Company Page MapperzOPm6A9JEhUGcIdFW
LinkedIn Post TrackeroiGLNPuaf5BRaz9K5
Local Business Lead BuilderqMN97aoHhsAS5bznV
Local Rank and Map Pack Trackergv0kyHGDIg8XscclB
Lookalike Company Findere2O426WBAbLLQL4Z2
Manufacturer and Supplier FinderQcsdmd0lUfPzVkonh
Meta Ad Library MonitorJ1GWlSXfSGU3u8Wng
Mobile Phone Waterfall6OOgPktf7RIa5XCOP
New Company Registrations Feedg2WfZhWvCtc57g2Jo
New Hire FindercKuc38p4nYHNF3IW8
Newsletter Sponsor TrackerqSwpqxD1TiPZpLQHv
Open Tender and RFP FinderkPTGz6t6TFoUUyfaO
Outbound Stack Detectorv43UJC8r7qW7cBSTG
Page Finder and ExtractorTpurgcOZbVnknlaiC
Partner and Member Directory ExtractorZX0XJPPUvnFJxeC1a
People Finder & Email VerifierLEgloG7tWgQl4o6TD
Person LinkedIn URL ResolverssuyPV8LnEsL8qbnb
Person Social Footprint MapperjfQXa2zW9FHCJot9K
Personal Email to Company ResolverAefT5Ye6YNPFQwJBf
Pinterest Brand Presence Mapperd1HvjZfKhgvWsoEwn
Podcast Guest and Host Findero2MGSvgbSLeeXOsIo
Prospect Engineq9rT6v64nUJdPexOQ
Public Feature Board and Roadmap MonitorrcHF5gj5r2Vqnry35
Publishing Frequency TrackerTbLwaUUATdYb6wp4N
Reddit Brand Presence MapperpKQZmDaT70SEb54bZ
Reporting Window FinderuINxR7a1IW8qUTRUX
Sequencer Event PollerS6s8Rjd61tGdrMRk4
Sequencer Lead Push0Jv27VeWM5tSZQs9x
Team Page People Extractorj8a9zX0k4mNbvDbWK
Tech Stack Signal Detectorqyd7nNyqFPelQViBx
TikTok Brand Presence Mapperfco8FvoJcSafbeyd1
Trustpilot Reputation Enricher3lIqfCt61j4hqE1xz
VC and Accelerator Portfolio List BuilderchH8hrfuoqqolW06m
WCAG Accessibility AuditP3jBj3FRghKEhX52z
Website Phrase and Business Model ClassifierCBuZ9k7sRwBeiKiCS
Website Traffic Rank EstimatorGnOFUzlNVIoXgeJjH
Work Email WaterfallOT6xqTFThC0Rjf7Zj
Workplace Program DetectorLi6pPDhqbdzFz3h7G
X Brand Presence MapperoLOgadhHUkNAyDA3w
YouTube Channel Stats Extractor6hSpD3kd2s2IQ4VSs

Built by Mamba Labs.