Substack API endpoint
Returns one page of the writers credited on a publication, ranked as Substack ranks them. Rows include each writer's handle, profile URL, and bestseller badge tier, so a publication can be fanned out into individual /substack/user lookups. Large publications return several hundred contributors on the first page.
/substack/publication/contributorspublication: required publication subdomain (semianalysis) or custom
domain (www.thefp.com).page: optional zero-based page. Defaults to 0.Returns the writers credited on a publication, in the order Substack ranks
them. Each row carries the writer's handle and profile url, so a
publication can be fanned out into individual /api/v1/substack/user
lookups — that is the practical way to enumerate Substack writers past the
675-publication ceiling on /api/v1/substack/category.
Large publications return several hundred contributors on the first page
(The Free Press returns 892). is_byline_only marks a contributor credited
on posts without a full publication role. bestseller_tier is the writer's
own paid-subscriber badge threshold, and is 0 for writers without one.
| Field | Filled in, of 911 checked | Values in the sample |
|---|---|---|
| id | 500 | |
| name | 496 | |
| handle | 259 | |
| bio | 245 | median 107 characters |
| photo_url | 280 | substackcdn.com and 2 other hosts |
| url | 259 | substack.com |
| is_byline_only | 500 | true in 468 of 500 |
| bestseller_tier | 63 | 100 to 10,000, median 1,000 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| publication | string | Yes | Publication subdomain or custom domain | www.thefp.com | |
| page | integer | No | Zero-based page | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/substack/publication/contributors?publication=www.thefp.com&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"publication": "www.thefp.com",
"page": 0,
"contributors": [
{
"id": 29561926,
"name": "Sergiu Klainerman",
"handle": "sergiuklainerman",
"bio": "Higgins professor of mathematics at Princeton University",
"url": "https://substack.com/@sergiuklainerman",
"is_byline_only": true
}
]
},
"msg": "success"
}Request schema
No body schema
Response schema
#/definitions/substack.contributorsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | substack.ContributorsResult | No | ||||
| data.contributors | array | No | ||||
| data.contributors[].bestseller_tier | integer | No | ||||
| data.contributors[].bio | string | No | ||||
| data.contributors[].handle | string | No | ||||
| data.contributors[].id | integer | No | 29561926 | |||
| data.contributors[].is_byline_only | boolean | No | ||||
| data.contributors[].name | string | No | Sergiu Klainerman | |||
| data.contributors[].photo_url | string | No | ||||
| data.contributors[].url | string | No | ||||
| data.page | integer | No | ||||
| data.publication | string | No | www.thefp.com | |||
| msg | string | No | success |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/substack/publication/contributors?publication=www.thefp.com&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"