Endpoint Playground
Returns one page of a category's public publication leaderboard. Each row carries the publication's subscriber signals and its full subscription offering (web plans with multi-currency pricing, App Store plans, and per-tier benefits). Subscriber totals are published to roughly three significant figures and are opt-in per writer; paid subscriber figures are only ever buckets. Upstream serves 25 publications per page and accepts pages 0-26, so at most 675 publications are reachable per category and type.
14 Oct 2026: 25 publications; 13 fields had a value in every checked item and 2 varied between items.
Sample value profiles: url: newsletter.semianalysis.com and 24 other hosts; explicit: true in 0 of 25; hero_text: median 121 characters.
curl 'https://api.crawlora.net/api/v1/substack/category?category_id=4&type=paid' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| category_id | string | Yes | 4 | Category id from /substack/categories. Numeric for 32 categories, or the string podcast. |
| type | string | No | paid | Ranking to read |
| page | integer | No | Zero-based page, 0-26 |
{
"code": 200,
"data": {
"category_id": "4",
"type": "paid",
"page": 0,
"has_more": true,
"publications": [
{
"id": 6349492,
"name": "SemiAnalysis",
"subdomain": "semianalysis",
"url": "https://semianalysis.substack.com",
"author_name": "Dylan Patel",
"payments_enabled": true,
"subscribers": {
"total": 315000,
"total_hidden": false,
"total_rough": "Hundreds of thousands of subscribers",
"paid_rough": "Thousands of paid subscribers",
"paid_tier": 1000
},
"subscription": {
"payments_state": "enabled",
"monthly_disabled": true,
"annual_disabled": false,
"group_discount_percent": 20,
"plans": [
{
"id": "yearly500usd_bc37ea9d",
"kind": "annual",
"nickname": "$500 a year",
"amount_cents": 50000,
"currency": "usd",
"interval": "year",
"interval_count": 1,
"active": true,
"currencies": [
{
"currency": "eur",
"amount_cents": 45000
}
]
}
],
"app_store_plans": [
{
"amount_cents": 6000,
"currency": "usd",
"period": "month",
"is_founding": false,
"display_price": "$60",
"active": true
}
],
"paid_benefits": [
"Full archive"
]
}
}
]
},
"msg": "success"
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.