Monitor Several Substack Newsletters in One Run
Track the latest posts across multiple publications — competitive monitoring for newsletter operators and media analysts.

A watchlist of competitor newsletters fits in one input field. Thirdwatch's Substack Scraper reads each publication's own JSON API — titles, authors, dates, engagement, and full article bodies — with no login and no browser.
Skip the setup: Run this as a ready-to-go task on Apify — pre-loaded with the configuration from this guide.
Why monitor several newsletters
If you run a newsletter, the publications you compete with publish on their own schedules — checking them by hand doesn't scale past two or three.
publicationUrls takes a list: one run returns the latest posts from every newsletter on it, engagement included.
The scraper hits Substack's public archive and post endpoints, so an entire newsletter's output is one input away.
How does this compare to the alternatives?
| Approach | Cost model | Coverage | Effort |
|---|---|---|---|
| RSS reader export | Free | Recent posts only | Manual, no search |
| Manual copy-paste | Analyst hours | Whatever you collect | Doesn't scale |
| Thirdwatch Substack Scraper | Pay per post row | Full archive + full text | One input per publication |
Why this Actor
- Reads the publication's own JSON API — fast, stable, and cheap.
includeContentupgrades metadata rows to full article text.searchqueries the newsletter's archive index directly.- Every row carries engagement fields: reactions and comment counts.
- Multiple publications in one run — newsletter monitoring as a batch.
How to do it in 3 steps
Step 1: Configure the input
Set the inputs as shown below — publicationUrls takes the targets, search runs a keyword query inside each publication and includeContent expands rows to full article text.
Step 2: Run the Actor
Run it from the console, the API, or the linked saved task. One dataset row is written per post.
Step 3: Use the output
Each row carries title, subtitle, author, date, reactions, comment count, cover image — and the full body when includeContent is set.
{
"publicationUrls": [
"https://newsletter.pragmaticengineer.com",
"https://www.platformer.news"
],
"maxPosts": 10
}Each dataset row looks like:
{
"title": "How to write a useful status update",
"subtitle": "And why most updates fail",
"slug": "status-update",
"url": "https://newsletter.pragmaticengineer.com/p/status-update",
"author": "Gergely Orosz",
"postDate": "2025-06-10T08:00:00.000Z",
"reactions": 412,
"commentCount": 89,
"publication": "Pragmatic Engineer",
"type": "post"
}What to watch for
Paywalled posts return metadata but not the locked body — expected, since the public API doesn't serve it. Very long archives take a run of proportional length; use maxPosts to bound the pull.
Related use cases
- Snapshot a Substack Publication's Full Archive
- Search Inside a Substack Newsletter by Keyword
- Build a Full-Text Dataset from a Substack Newsletter
- Check a Substack's Latest Posts on a Schedule
- All Thirdwatch use-case guides
Run the Substack Scraper on Apify Store — pay per result, free to try, no credit card to test.
Frequently asked questions
Do paid posts come through?
Metadata yes — title, date, author, engagement. The paywalled body is not fetched; `includeContent` returns what a free subscriber would see.
Does it work on custom domains?
Yes — pass the publication's URL or subdomain and the Actor resolves the underlying API host.
How far back does the archive go?
The archive endpoint covers the publication's full post history; `maxPosts` bounds how much of it you pull per run.
Can I search inside a publication?
Yes — the `search` field queries that newsletter's own index, so results stay scoped to the publication.
What engagement data comes back?
Reaction count and comment count per post, plus cover image and podcast URL where present.
Is there rate limiting?
Substack's public endpoints are generous; the Actor still spaces requests politely across a multi-publication run.
Related
100 free credits, no credit card.
About 30 real searches. Add the MCP to Claude or Cursor in two minutes.