Substack Publications & Newsletters Scraper avatar

Substack Publications & Newsletters Scraper

Pricing

from $12.75 / 1,000 results

Go to Apify Store
Substack Publications & Newsletters Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Substack Publications & Newsletters Scraper

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
categoriesstring[]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.
maxPublicationsintegerno10Maximum 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.

FieldTypeDescription
publicationNamestringPublication name.
authorstringPrimary author display name.
authorHandlestringAuthor handle.
authorBiostringAuthor bio text, or null.
categorystringCategory slug the ranking came from.
categoryNamestringHuman-readable category name.
subscriberRankintegerRank within the category leaderboard.
bestsellerTierintegerBestseller tier value.
badgeTypestringBadge type (for example subscriber), or null.
badgeTierintegerBadge tier value, or null.
isPaidbooleanWhether the publication has a paid subscription.
subscriberCountEstimateintegerEstimated subscriber count when exposed, else null.
typestringPublication type (for example newsletter).
languagestringPublication language code.
hasPodcastbooleanWhether the publication has a podcast.
inviteOnlybooleanWhether the publication is invite-only.
monthlyPriceUsdintegerMonthly subscription price in USD, or null if free.
annualPriceUsdintegerAnnual subscription price in USD, or null.
foundingPriceUsdintegerFounding-member price in USD, or null.
paidBenefitsstring[]Listed benefits of a paid subscription.
freeBenefitsstring[]Listed benefits of a free subscription.
descriptionstringPublication description.
publicationUrlstringCanonical publication URL.
customDomainstringCustom domain, or null.
subdomainstringSubstack subdomain.
twitterHandlestringLinked Twitter/X handle, or null.
copyrightstringCopyright holder text, or null.
foundedDatestringISO timestamp the publication was founded.
firstPostDatestringISO timestamp of the first post.
logoUrlstringPublication logo image URL.
coverPhotoUrlstringCover photo image URL, or null.
authorPhotoUrlstringAuthor photo image URL, or null.
publicationIdstringSubstack publication ID.
authorIdstringSubstack author ID.
sourcestringData source. Always Substack.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringPresent 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.