Export public Substack newsletter posts, archive entries, post metadata, previews, reactions, comments counts, and optional body fields.
Use this Actor to collect public Substack posts for newsletter research, media monitoring, creator tracking, content analysis, competitive research, and recurring archive snapshots. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.
At a glance
- Publication archive export: Enter Substack publication URLs, custom domains, or publication domains.
- Post metadata rows: Collect post URLs, titles, subtitles, dates, authors, previews, reactions, comments, and body fields when available.
- Keyword and date filters: Use search terms and date ranges to narrow archive exports.
- Fallback support: Use feed fallback when a publication archive is limited.
- API export: Send Substack rows to spreadsheets, media monitoring workflows, dashboards, databases, or AI agents.
What can it do?
Substack Posts Scraper extracts public posts from Substack publications and saves one dataset row per post.
- Scrape publications: Add Substack URLs, publication domains, or custom domains.
- Search archives: Use
searchTermto focus on posts around a topic. - Filter by date: Limit results with
dateFromanddateTo. - Include body fields: Save body HTML when your workflow needs article content.
- Export repeatable datasets: Use Apify downloads, API calls, schedules, webhooks, and integrations.
Common workflows
- Newsletter research: Build lists of posts from publications, writers, and categories.
- Media monitoring: Track mentions of topics, companies, products, or people across newsletters.
- Competitive research: Monitor how competitors, analysts, or creators discuss a market.
- Content analysis: Export titles, previews, dates, reactions, and optional body text for review.
- Creator tracking: Watch a publication archive for new posts and public engagement signals.
- AI summaries: Feed public post content and metadata into summarization or classification workflows.
What data can you extract?
The Actor returns one dataset row per public Substack post.
| Field | Description |
|---|---|
publicationUrl |
Source publication URL or domain |
publicationName |
Publication name when available |
postUrl |
Public Substack post URL |
title |
Post title |
subtitle |
Post subtitle when available |
description |
Preview or description text |
authorName |
Public author name when available |
publishedAt |
Public post date |
isPaid |
Whether the post is marked paid when visible |
reactionsCount |
Public reaction count when available |
commentsCount |
Public comment count when available |
bodyText |
Body text when available |
bodyHtml |
Optional body HTML when enabled |
source |
Archive, search, or feed fallback source |
scrapedAt |
Timestamp when the row was saved |
Example input
{
"publicationUrls": ["https://example.substack.com"],
"maxPostsPerPublication": 25,
"searchTerm": "AI",
"includeBodyHtml": false,
"includeRssFallback": true
}
Example output
{
"publicationUrl": "https://example.substack.com",
"publicationName": "Example Newsletter",
"postUrl": "https://example.substack.com/p/example-post",
"title": "Example post",
"subtitle": "A public Substack post",
"description": "Preview text...",
"authorName": "Example Author",
"publishedAt": "2026-07-03T10:00:00.000Z",
"isPaid": false,
"reactionsCount": 123,
"commentsCount": 8,
"bodyText": "Post body text...",
"source": "archive",
"scrapedAt": "2026-07-03T12:00:00.000Z"
}
How to run it
- Open the Actor on Apify.
- Add one or more Substack publication URLs or domains.
- Set
maxPostsPerPublication. - Add optional search or date filters.
- Choose whether to include body HTML and feed fallback.
- Start the run and export the dataset.
Search tips
- Use publication URLs first: Full Substack URLs are usually the clearest input.
- Use search terms for topics: Add
searchTermwhen monitoring a topic or company. - Use date windows: Date filters keep scheduled archive checks small and comparable.
- Enable body HTML selectively: Body HTML is useful for content analysis but increases row size.
- Try feed fallback: RSS/feed fallback can help when archive pages are limited.
Limits and caveats
- The Actor extracts publicly visible Substack posts only.
- It does not access private subscriber-only content, paid post bodies hidden from public view, email lists, or logged-in data.
- Some publications use custom domains or archive layouts that may expose fewer fields.
- Body fields are empty when the public page or feed does not expose them.
API usage
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~substack-posts-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"publicationUrls":["https://example.substack.com"],"maxPostsPerPublication":25}'
MCP and AI agents
This Actor can be used through the official Apify MCP server at https://mcp.apify.com.
For a focused single-Actor tool setup, use:
https://mcp.apify.com?tools=fetch_cat/substack-posts-scraper
Use the same JSON keys shown in the input configuration table, such as publicationUrls, maxPostsPerPublication, searchTerm, dateFrom, dateTo, and includeBodyHtml.
Support
If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.
Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.