Substack Scraper to Markdown for AI, RAG & LLMs avatar

Substack Scraper to Markdown for AI, RAG & LLMs

Pricing

Pay per event

Go to Apify Store
Substack Scraper to Markdown for AI, RAG & LLMs

Substack Scraper to Markdown for AI, RAG & LLMs

Export Substack newsletter posts as clean Markdown, text or HTML with metadata and ready-made RAG chunks. Works with substack.com and custom domains, skips paywalled content, monitors new posts.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Max Prozapas

Max Prozapas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

Substack Scraper to Markdown — for AI, RAG & LLMs

Turn any Substack newsletter into clean Markdown (or text / HTML) with full metadata and optional ready-made RAG chunks. Works with *.substack.com and custom domains (e.g. lennysnewsletter.com).

  • ✅ Clean Markdown: subscribe buttons, share widgets and image wrappers removed — ready for LLMs
  • ✅ RAG chunking on paragraph boundaries with section headings and overlap
  • ✅ Metadata: title, subtitle, date, authors, tags, word count, reactions, comments, cover image, podcast URL
  • ✅ Filters: date, keywords, max posts
  • ✅ Monitoring: return only posts published since the last run — schedule it and get a newsletter feed
  • ✅ Respects paywalls: paid posts return metadata and a short public teaser only

Use cases

  • Build a RAG knowledge base / chatbot from your favourite newsletters
  • AI agents that need fresh expert content (product, tech, finance, politics…)
  • Newsletter research and analytics: posting frequency, engagement, topics
  • Content monitoring: get every new post from a list of newsletters into Slack, Notion, Google Sheets
  • Backing up your own Substack as Markdown

Input

FieldDescription
publicationsPublication URLs, names (astralcodexten) or single post URLs (…/p/slug).
maxPostsPerPublicationNewest first (default 50).
postedAfterYYYY-MM-DD.
keywordsMatch in title, subtitle or tags.
includeContentFull body of free posts (default on).
contentFormatmarkdown (default), text, html.
chunkSize / chunkOverlapRAG chunks in characters (0 = off).
includePaidPostsAdd paywalled posts as metadata + teaser.
onlyNewPosts / monitorIdOnly posts not returned in previous runs.
{
"publications": ["https://www.lennysnewsletter.com", "astralcodexten"],
"maxPostsPerPublication": 20,
"postedAfter": "2026-01-01",
"chunkSize": 2000
}

Output

{
"publication": "www.lennysnewsletter.com",
"postId": 215694124,
"title": "All of the Lenny & Friends Summit talks are now online!",
"subtitle": "Plus, some reflections and takeaways from the day",
"url": "https://www.lennysnewsletter.com/p/all-of-the-lenny-and-friends-summit",
"postDate": "2026-09-29T13:15:57.512Z",
"audience": "everyone",
"isPaywalled": false,
"authors": [{ "name": "Lenny Rachitsky", "handle": "lenny" }],
"tags": [],
"wordcount": 1276,
"reactionCount": 289,
"commentCount": 7,
"contentFormat": "markdown",
"content": "Two years ago, we held the first-ever Lenny and Friends Summit…",
"chunks": [{ "index": 0, "heading": null, "text": "…" }]
}

A per-publication report is saved to the SUMMARY record of the run's key-value store.

Pricing

Pay per post: a small fee per run plus a fee per post in the dataset. With monitoring on you pay only for new posts.

The Actor reads only publicly available posts through Substack's public web endpoints and never extracts paywalled content. Posts remain the copyright of their authors — make sure your use (e.g. internal research, personal knowledge base) complies with applicable law and the authors' terms.

FAQ

Does it work with custom domains? Yes — any Substack publication, e.g. https://www.lennysnewsletter.com.

Can I scrape paid posts? No. Paywalled posts return metadata and the short public teaser only (enable includePaidPosts). The Actor never extracts paywalled content.

How do I build a RAG knowledge base? Set chunkSize to 1500–3000. Each post gets chunks[] with text and section heading — load them straight into your vector database with url and title as metadata.

Can I get only new posts? Enable onlyNewPosts and schedule the Actor; each run returns posts published since the previous run.