Substack Leaderboard Scraper

Export ranked Substack publications by category with subscriber, pricing, author, and rank-change data.

Data fields

FieldTypeDescription
publicationIdintegerValue exported as publicationId.
rankintegerValue exported as rank.
publicationNamestringValue exported as publicationName.
publicationUrlstringValue exported as publicationUrl.
subdomainstring | nullValue exported as subdomain.
customDomainstring | nullValue exported as customDomain.
descriptionstring | nullValue exported as description.
logoUrlstring | nullValue exported as logoUrl.

Input preview

categoriesLeaderboard categories
leaderboardUrlsLeaderboard URLs
boardTypesLeaderboard types
maxItemsMaximum publications
includeRankHistoryInclude rank changes
changedSinceChanged since

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Use this Substack scraper to export leaderboard rankings as clean publication data for newsletter research, creator discovery, competitor tracking, and market dashboards. Select categories and Top Bestsellers or Rising boards, then receive ranked newsletters with public author, subscriber, pricing, and publication details. The Actor provides Substack newsletter data through the Apify API, schedules, and MCP.

What data can you export?

  • Exact leaderboard rank, category, and board type
  • Publication identity, URL, description, language, and images
  • Public author name, handle, bio, and profile
  • Public subscriber count signals and bestseller tier
  • Monthly and annual subscription pricing
  • Free and paid subscription benefits
  • Podcast, community, and payments availability
  • Optional previous rank, rank movement, and new-entry status

Example input

{
  "categories": ["technology", "business"],
  "boardTypes": ["paid", "rising"],
  "maxItems": 100,
  "includeRankHistory": true
}

Example output

{
  "publicationId": 6349492,
  "rank": 1,
  "publicationName": "SemiAnalysis",
  "publicationUrl": "https://newsletter.semianalysis.com",
  "subdomain": "semianalysis",
  "customDomain": "newsletter.semianalysis.com",
  "description": "Bridging the gap between semiconductors and business.",
  "logoUrl": "https://substackcdn.com/image/fetch/...",
  "coverPhotoUrl": null,
  "language": "en",
  "publicationType": "newsletter",
  "createdAt": "2025-09-22T15:54:12.958Z",
  "authorId": 21783302,
  "authorName": "Dylan Patel",
  "authorHandle": "semianalysis",
  "authorBio": "Semiconductor industry analysis.",
  "authorPhotoUrl": "https://substackcdn.com/image/fetch/...",
  "category": "technology",
  "boardType": "paid",
  "bestsellerBadgeTier": 1000,
  "subscriberCount": "307,000",
  "subscriberCountMagnitude": "307K+",
  "paidSubscriberDetail": "Thousands of paid subscribers",
  "totalSubscriberDetail": "Hundreds of thousands of subscribers",
  "monthlyPrice": 50,
  "annualPrice": 500,
  "currency": "USD",
  "freeSubscriptionBenefits": ["Free posts"],
  "paidSubscriptionBenefits": ["Full archive"],
  "paymentsEnabled": true,
  "podcastEnabled": false,
  "communityEnabled": true,
  "profileUrl": "https://substack.com/@semianalysis",
  "subscribeUrl": "https://newsletter.semianalysis.com/subscribe",
  "scrapedAt": "2026-08-06T13:42:37.044Z",
  "sourceUrl": "https://substack.com/leaderboard/technology/paid",
  "sourceCategory": "technology",
  "sourceBoardType": "paid",
  "sourcePage": 0,
  "rankChange": null,
  "previousRank": null,
  "isNew": true
}

Input settings

Field Type Description
categories string[] One or more Substack category slugs, such as technology, business, or culture.
leaderboardUrls URL[] Optional explicit public leaderboard URLs.
boardTypes string[] paid, rising, or both.
maxItems integer Maximum total publications across all selected boards.
includeRankHistory boolean Compare results with the prior snapshot in the same Actor storage.
changedSince string Optional ISO timestamp for incremental monitoring.

Input recipes

Category research: use three categories, boardTypes: ["paid"], and maxItems: 100.

Rising-newsletter monitor: use boardTypes: ["rising"], includeRankHistory: true, and schedule the Actor daily.

One public board URL: provide leaderboardUrls: [{"url":"https://substack.com/leaderboard/technology/paid"}].

Who is it for?

Newsletter operators can monitor competitors, creator-economy analysts can compare category leaders, and growth teams can discover partnership targets or enrich recurring market dashboards.

Tips and limits

  • A category board currently exposes up to 100 publications.
  • maxItems is a global cap, so earlier selected boards can fill it first.
  • Subscriber counts are public source labels, not private subscriber identities.
  • Rank history uses the Actor's key-value store; reuse the same task/storage for comparisons.
  • If one board fails after others succeed, already saved rows are preserved and the run log identifies the failed board.

API usage

JavaScript

const run = await client.actor('fetch_cat/substack-leaderboard-scraper').call({
  categories: ['technology'], boardTypes: ['paid'], maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/substack-leaderboard-scraper').call(run_input={
    'categories': ['technology'], 'boardTypes': ['paid'], 'maxItems': 50,
})
items = client.dataset(run['defaultDatasetId']).list_items().items

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~substack-leaderboard-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"categories":["technology"],"boardTypes":["paid"],"maxItems":50}'

Use with MCP and AI agents

Connect Apify MCP at https://mcp.apify.com/?tools=fetch_cat/substack-leaderboard-scraper, then ask your agent to export and compare Substack category leaders.

Support

Open an issue from the Actor page with the input, run URL, expected behavior, and observed behavior. We review reproducible reports and source changes.

Common questions

Questions and answers reused from the canonical actor README.

What data can I export with Substack scraper?

You can export leaderboard rank, publication and author profiles, subscriber signals, public subscription prices and benefits, feature flags, source provenance, and optional rank-change fields.

Does this return private subscriber data?

No. It exports public leaderboard and publication metadata only.

Can it track rank changes?

Yes. Enable includeRankHistory and reuse the same task storage on later runs.

Why is a price or biography empty?

Substack does not expose every optional field for every publication. Missing public values remain null rather than being guessed.

Can I export CSV or Excel?

Yes. Download the Apify dataset as JSON, CSV, Excel, XML, or another supported format.