Substack Publications & Newsletters Scraper
Pricing
from $12.75 / 1,000 results
Substack Publications & Newsletters Scraper
Scrape Substack category leaderboards for ranked publications and newsletters with author, category, leaderboard rank, bestseller tier, paid status, subscriber signal, subscription pricing, description, socials and links. Export to JSON, CSV or Excel.
Pricing
from $12.75 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Substack Publications & Newsletters Scraper
Here is one real result, with every field the actor returns:
{"publicationName": "ByteByteGo Newsletter","author": "Alex Xu","authorHandle": "bytebytego","authorBio": "Author of 3 Bestselling Books | Co-Founder of ByteByteGo","category": "technology","categoryName": "Technology","subscriberRank": 1,"bestsellerTier": 0,"badgeType": "subscriber","badgeTier": 1,"isPaid": true,"subscriberCountEstimate": null,"type": "newsletter","language": "en","hasPodcast": false,"inviteOnly": false,"monthlyPriceUsd": 15,"annualPriceUsd": 150,"foundingPriceUsd": 300,"paidBenefits": ["An extra deep dive on Thursdays","Full archive","Many expense it with team's learning budget"],"freeBenefits": ["One issue every Saturday"],"description": "Explain complex systems with simple terms, from the authors of the best-selling system design book series. Join over 1,000,000 friendly readers.","publicationUrl": "https://blog.bytebytego.com","customDomain": "blog.bytebytego.com","subdomain": "bytebytego","twitterHandle": "alexxubyte","copyright": "ByteByteGo","foundedDate": "2022-03-27T03:36:45.845Z","firstPostDate": "2021-11-25T17:31:00.000Z","logoUrl": "https://substackcdn.com/image/fetch/$s_!1eXV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8a5609ae-1239-4400-9491-6010a15c4d60_504x504.png","coverPhotoUrl": "https://substack-post-media.s3.amazonaws.com/public/images/a4e1c1bd-03ee-4126-b3e4-19553b2d2fc6_1279x821.png","authorPhotoUrl": "https://substackcdn.com/image/fetch/$s_!90Cx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F10cd1afb-9a92-433e-bbf4-f726eb8ffdb3_375x375.jpeg","publicationId": "817132","authorId": "22329494","source": "Substack","observedAt": "2026-08-10T14:32:04.032Z"}
The most complete Substack publications scraper available. It returns every field the category leaderboards expose for a publication, plus pricing, benefits, badge and rank data, author bio and contacts, and gives you category and volume inputs to target exactly the newsletters you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor reads the ranked category leaderboards on Substack for every category you list, resolves each ranked publication to its full public profile, and writes one normalized record per publication to the run's dataset. Prices are captured in USD, subscriber rank and bestseller tier come from the leaderboard, and author bio, handle, and contact fields are pulled from the publication profile. Missing source values are returned as null.
Data covers publicly ranked Substack publications by category. One run collects the ranked publications for every category listed, up to maxPublications in total.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 top publications across the Technology and Business leaderboards.
{"categories": ["technology", "business"],"maxPublications": 10}
Use category slugs such as technology, business, finance, crypto, news, culture, health, sports, us-politics. Both inputs are optional; with an empty input the actor uses the default categories and returns up to 10 publications.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
categories | string[] | no | ["technology","business"] | One or more Substack category leaderboards to scrape, by slug (for example technology, business, finance, crypto, news, culture, health, sports, us-politics). One run collects the ranked publications for every category listed. |
maxPublications | integer | no | 10 | Maximum number of publications to collect across all categories in this run. Range 1 to 1000000. |
Output reference
One dataset item per publication. Types: string, integer, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
publicationName | string | Publication name. |
author | string | Primary author display name. |
authorHandle | string | Author handle. |
authorBio | string | Author bio text, or null. |
category | string | Category slug the ranking came from. |
categoryName | string | Human-readable category name. |
subscriberRank | integer | Rank within the category leaderboard. |
bestsellerTier | integer | Bestseller tier value. |
badgeType | string | Badge type (for example subscriber), or null. |
badgeTier | integer | Badge tier value, or null. |
isPaid | boolean | Whether the publication has a paid subscription. |
subscriberCountEstimate | integer | Estimated subscriber count when exposed, else null. |
type | string | Publication type (for example newsletter). |
language | string | Publication language code. |
hasPodcast | boolean | Whether the publication has a podcast. |
inviteOnly | boolean | Whether the publication is invite-only. |
monthlyPriceUsd | integer | Monthly subscription price in USD, or null if free. |
annualPriceUsd | integer | Annual subscription price in USD, or null. |
foundingPriceUsd | integer | Founding-member price in USD, or null. |
paidBenefits | string[] | Listed benefits of a paid subscription. |
freeBenefits | string[] | Listed benefits of a free subscription. |
description | string | Publication description. |
publicationUrl | string | Canonical publication URL. |
customDomain | string | Custom domain, or null. |
subdomain | string | Substack subdomain. |
twitterHandle | string | Linked Twitter/X handle, or null. |
copyright | string | Copyright holder text, or null. |
foundedDate | string | ISO timestamp the publication was founded. |
firstPostDate | string | ISO timestamp of the first post. |
logoUrl | string | Publication logo image URL. |
coverPhotoUrl | string | Cover photo image URL, or null. |
authorPhotoUrl | string | Author photo image URL, or null. |
publicationId | string | Substack publication ID. |
authorId | string | Substack author ID. |
source | string | Data source. Always Substack. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | Present only on a failed run; a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"categories": ["technology", "business"], "maxPublications": 10}):
{"publicationName": "ByteByteGo Newsletter","author": "Alex Xu","authorHandle": "bytebytego","authorBio": "Author of 3 Bestselling Books | Co-Founder of ByteByteGo","category": "technology","categoryName": "Technology","subscriberRank": 1,"isPaid": true,"type": "newsletter","language": "en","monthlyPriceUsd": 15,"annualPriceUsd": 150,"foundingPriceUsd": 300,"freeBenefits": ["One issue every Saturday"],"description": "Explain complex systems with simple terms, from the authors of the best-selling system design book series. Join over 1,000,000 friendly readers.","publicationUrl": "https://blog.bytebytego.com","customDomain": "blog.bytebytego.com","twitterHandle": "alexxubyte","foundedDate": "2022-03-27T03:36:45.845Z","firstPostDate": "2021-11-25T17:31:00.000Z","publicationId": "817132","authorId": "22329494","source": "Substack","observedAt": "2026-08-10T14:32:04.032Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~substack-publications-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"categories":["technology","business"],"maxPublications":10}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~substack-publications-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"categories":["finance","crypto"],"maxPublications":100}'
Apify CLI:
apify call scrapers_lat/substack-publications-scraper \--input '{"categories":["us-politics"],"maxPublications":25}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per publication returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 publications per run. Upgrade for higher
maxPublications.
FAQ and troubleshooting
A run returned 0 records. Why?
The category slug did not match a Substack leaderboard. Check the spelling (for example us-politics, not politics). Zero-result runs are not charged.
Which categories can I use?
Any Substack category leaderboard slug, for example technology, business, finance, crypto, news, culture, health, sports, us-politics. List several to collect them all in one run.
Why is subscriberCountEstimate null?
Substack does not expose an exact subscriber count for every publication. When it is not available it is returned as null, never invented.
Why are the price fields null?
The publication is free or does not publish a paid tier. Paid publications populate monthlyPriceUsd, annualPriceUsd, and often foundingPriceUsd.
Is this an official Substack tool? No. This actor is independent and has no affiliation with Substack. It reads only data that is publicly available on the category leaderboards and publication pages.
Related scrapers
- Steam Games Scraper: Steam store game data and reviews.
- App Store Reviews Scraper: Apple App Store user reviews by app.
- Ashby Jobs Scraper: Ashby-hosted company job listings.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Substack. Accesses only publicly available leaderboard and publication data.
