Substack Posts Scraper
Pricing
from $0.03 / 1,000 post extracteds
Substack Posts Scraper
Collect public Substack newsletter posts, archives, and metadata for content research and media monitoring.
Pricing
from $0.03 / 1,000 post extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
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.
Ready-to-run examples
Use these saved Store examples as starting points. Open any example to prefill the Actor input, then adjust URLs, keywords, limits, or filters for your own run.
- Substack Newsletter URL Normalization
- Substack Paid Preview Metadata Only
- Substack Author Byline Dataset
- Substack Publication Archive Backfill
- Substack Recent Posts Alert
- Substack No HTML Metadata Export
- View all ready-to-run examples (25 examples)
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 |
Pricing
This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.
| Event | What is charged | Price |
|---|---|---|
start | One-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup). | $0.005 |
post | Charged per post extracted. | $0.000028 |
Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Publication URLs or domains | publicationUrls | Substack publication URLs, custom domains, or domains. | ["https://example.substack.com"] |
| Maximum posts per publication | maxPostsPerPublication | Cap saved rows per publication and spend. | 25 |
| Search term | searchTerm | Filter archive/search results by keyword. | AI |
| Published after | dateFrom | Keep posts on or after this date. | 2026-01-01 |
| Published before | dateTo | Keep posts on or before this date. | 2026-07-01 |
| Include body HTML | includeBodyHtml | Save post body HTML when available. | false |
| Use feed fallback | includeRssFallback | Use feed fallback when archive scraping is limited. | true |
| Publication concurrency | concurrency | Number of publications processed in parallel. | 2 |
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.
FAQ
Can it scrape paid Substack posts?
It can save public metadata for posts that are visible, but it does not bypass paywalls or access private subscriber-only content.
Why is body text missing?
Some publications expose only metadata or previews publicly. Enable body options only when the public page provides the body.
Can I monitor new posts?
Yes. Use Apify schedules with the same publication list and date filters.
Can I export to CSV or Excel?
Yes. Apify datasets can be downloaded as CSV, JSON, Excel, XML, RSS, HTML, or accessed through the API.
Related scrapers
- Reddit Scraper
- Hacker News Search Scraper
- Telegram Channel Posts Scraper
- Product Hunt Scraper
- Google News Scraper
Changelog
0.1
- Initial public release with publication URL, archive, search, date, body, feed fallback, concurrency, and API export controls.
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.
Privacy and data handling
This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses content lookup inputs and public posts, profiles, videos, comments, or channel metadata needed for the requested output to produce the output dataset and sends requests to public Substack Posts pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.