Substack Notes Search and Author Monitor
Pricing
Pay per event
Substack Notes Search and Author Monitor
π Search public Substack Notes and monitor author activity with stable IDs, text, timestamps, engagement counts, media, and outbound links.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Search public Substack Notes, monitor authors, and export clean social-listening data without maintaining a crawler.
The Actor turns keyword searches and public author profiles into structured records containing Note text, stable IDs, author and publication details, timestamps, visible engagement, media, and outbound links.
Use it for repeatable brand monitoring, creator research, sponsorship discovery, and trend analysis.
What does this Substack Notes scraper do?
- π Searches public Notes by keyword or phrase.
- π€ Collects public Notes from author profile URLs.
- π Captures visible likes, replies, and restacks.
- π Extracts media and outbound links.
- π Supports date windows for incremental monitoring.
- β»οΈ Skips IDs you already processed.
- π§Ή Deduplicates Notes across every input source.
It intentionally focuses on Notes, not newsletter posts or private feeds.
Who is it for?
PR and social-listening teams
Track mentions of brands, executives, products, competitors, and campaigns across Substack's public social layer.
Creator agencies and newsletter sponsors
Discover active voices, review recent commentary, and compare visible engagement before outreach.
Researchers and analysts
Create reproducible datasets of public discourse with stable IDs, timestamps, and source attribution.
Automation builders
Refresh monitors on a schedule and send new records to databases, Slack, Sheets, or data warehouses.
Why use this Actor?
Substack Notes are useful but difficult to monitor manually at scale.
Search pages change, feeds paginate, and repeated searches create duplicates.
This Actor handles normalization, pagination, filtering, and deduplication so workflows receive consistent JSON records.
Input
Provide one or both source types:
queries: keyword phrases such asartificial intelligence.startUrls: public Notes search URLs or profiles such ashttps://substack.com/@ruben.
Optional monitoring controls:
maxItems: maximum unique Notes to save.publishedAfter: inclusive ISO date/time lower bound.publishedBefore: inclusive ISO date/time upper bound.existingIds: stable Note IDs to skip.
Example keyword search input
{"queries": ["artificial intelligence", "AI agents"],"maxItems": 100,"publishedAfter": "2026-01-01T00:00:00Z"}
Example author monitor input
{"startUrls": [{ "url": "https://substack.com/@ruben" }],"maxItems": 50,"existingIds": ["123456789"]}
Output data
| Field | Meaning |
|---|---|
id | Stable Substack Note ID |
url | Canonical public Note URL |
text | Full visible Note text |
authorId | Stable author profile ID |
authorName | Display name |
authorHandle | Public profile handle |
authorProfileUrl | Public profile URL |
publicationId | Associated publication ID, when available |
publicationName | Associated publication name |
publicationSubdomain | Publication subdomain |
publishedAt | Note publication timestamp |
editedAt | Edit timestamp, when available |
likesCount | Visible reactions/likes |
repliesCount | Visible reply count |
restacksCount | Visible restack count |
mediaUrls | Attached media URLs |
outboundUrls | Links found in Note content |
inputQuery | Query that produced the record |
sourceUrl | Search or profile source |
scrapedAt | Extraction timestamp |
Unavailable engagement values remain null; the Actor does not invent zeros.
Example output
{"id": "292375831","url": "https://substack.com/@ruben/note/c-292375831","text": "You're using Claude for only one thing...","authorId": "339636559","authorName": "Ruben Hassid","authorHandle": "ruben","publishedAt": "2026-07-11T16:00:00.905Z","likesCount": 40,"repliesCount": 5,"restacksCount": 8,"mediaUrls": [],"outboundUrls": [],"inputQuery": null,"sourceUrl": "https://substack.com/@ruben","scrapedAt": "2026-07-12T02:10:33.651Z"}
How to scrape Substack Notes
- Open the Actor input page.
- Add keywords, search URLs, or author profile URLs.
- Choose a small
maxItemsfor your first run. - Optionally set date bounds or known IDs.
- Start the run.
- Export the dataset as JSON, CSV, Excel, XML, or RSS.
Incremental monitoring
Store the IDs from each completed run.
On the next run, send them through existingIds and set publishedAfter to the previous checkpoint.
This produces a clean stream of unseen Notes without post-processing duplicates.
Schedule the Actor hourly, daily, or weekly based on your monitoring needs.
Search tips
- Use exact brand names for focused monitoring.
- Add common misspellings as separate queries.
- Search product names and executive names independently.
- Use date bounds to keep recurring runs fast.
- Keep IDs in a database for long-running monitors.
- Start broad, inspect results, then narrow noisy phrases.
Deduplication
Records are deduplicated by stable Note ID across all inputs in a run.
IDs supplied through existingIds are also skipped.
The same Note found from two keywords is saved only once.
How much does it cost to monitor Substack Notes?
This Actor uses pay-per-event pricing.
A small start event covers run initialization, and an item event is charged for each Note saved.
Tier discounts reduce the per-Note price for larger Apify plans.
The Console shows the exact charge before and after each run.
Apify integrations
Connect completed datasets to:
- Google Sheets for shared mention trackers.
- Slack for new high-engagement Note alerts.
- Zapier or Make for no-code routing.
- Webhooks for immediate downstream processing.
- BigQuery, Snowflake, or PostgreSQL for analysis.
- Amazon S3 for archival datasets.
A useful pattern filters records by likesCount before notifying an outreach team.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/substack-notes-search-author-monitor').call({queries: ['AI agents'],maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/substack-notes-search-author-monitor').call(run_input={'queries': ['AI agents'], 'maxItems': 100})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL API example
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~substack-notes-search-author-monitor/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"queries":["AI agents"],"maxItems":100}'
Use with Apify MCP
Connect Claude and other MCP clients through this actor-scoped endpoint:
https://mcp.apify.com?tools=automation-lab/substack-notes-search-author-monitor
For Claude Code, register the remote HTTP server directly:
claude mcp add --transport http apify-substack-notes \"https://mcp.apify.com?tools=automation-lab/substack-notes-search-author-monitor"
For Claude Desktop, Cursor, or VS Code, add this server to the client's MCP JSON configuration (for example, mcp.json):
{"mcpServers": {"apify-substack-notes": {"type": "http","url": "https://mcp.apify.com?tools=automation-lab/substack-notes-search-author-monitor"}}}
Authenticate when the client opens the server, then try actor-specific prompts such as:
- βFind recent Substack Notes mentioning our product.β
- βMonitor this author and summarize Notes with more than 20 likes.β
- βExport outbound links shared by these Substack creators.β
Data quality
The Actor returns public values exposed by Substack at run time.
Engagement can change after extraction.
Some Notes have no publication association, media, outbound links, or edit timestamp.
Fields are typed consistently and optional values are represented explicitly.
Reliability
Requests use browser-like headers and bounded retries.
Pagination stops at your item limit or the end of available public results.
Malformed or unsupported URLs fail with actionable messages rather than silent empty output.
Performance
The Actor uses lightweight HTTP requests rather than launching a browser.
A 256 MB container is sufficient for normal runs.
Large monitors should use focused queries and incremental date bounds.
Legality and responsible use
Only public Substack data is collected.
You are responsible for your use of the data and compliance with applicable law, privacy requirements, contracts, and platform terms.
Avoid collecting unnecessary personal information.
Do not use the Actor for harassment, spam, or invasive profiling.
Troubleshooting
Why did my query return fewer Notes than expected?
Substack controls public search relevance and availability. Try a broader phrase, remove a narrow date bound, or add related queries.
Why does a profile URL fail?
Use a public https://substack.com/@handle URL. Private, removed, malformed, or non-Substack URLs are unsupported.
Why are engagement fields null?
A null means Substack did not expose the visible count for that Note. It is different from a confirmed zero.
Why did my recurring run return no items?
Check whether existingIds already contains all matching Notes and whether publishedAfter is later than the newest available Note.
FAQ
Does it scrape newsletter posts?
No. The product is deliberately scoped to public Notes. Use a dedicated Substack posts scraper for newsletters.
Does it require a Substack login?
No. Supported inputs use public search and public profile data.
Can I monitor several authors?
Yes. Add multiple profile URLs and set a combined output limit.
Can I export CSV or Excel?
Yes. Every Apify dataset can be downloaded in CSV, Excel, JSON, XML, and other formats.
Can I schedule runs?
Yes. Use Apify schedules and webhooks to build recurring monitoring workflows.
Related scrapers
Explore other public-data tools from automation-lab:
- Substack post and publication tools for newsletter content.
- Social media scrapers for cross-network mention monitoring.
- Creator discovery actors for sponsorship research.
Support
Open an issue from the Actor page with a reproducible public URL, input, and run ID.
Do not include credentials or private data.
We use reproducible reports to keep extraction behavior stable as Substack evolves.