Substack API endpoint
Returns the publications a given publication recommends to its own readers, as a publication-to-publication graph. Useful for discovering publications beyond the 675-per-category ceiling on /substack/category. publication_id is the numeric id returned by /substack/publication, /substack/category, or /substack/user.
/substack/publication/recommendationspublication_id: required numeric publication id, as returned by
/api/v1/substack/publication, /api/v1/substack/category, or
/api/v1/substack/user.This is the practical way past the 675-publication ceiling on
/api/v1/substack/category: walk recommendations outward from a seed
publication instead of paging a category. Recommendation counts vary widely
by publication (15 and 50 both observed).
Rows use the same shape as /api/v1/substack/category, but the upstream
returns a leaner publication object here — subscribers and subscription
are frequently empty. Follow up with /api/v1/substack/publication when
full plan and subscriber detail is needed for a recommended publication.
| Field | Filled in, of 15 checked | Values in the sample |
|---|---|---|
| id | 15 | |
| name | 15 | |
| subdomain | 15 | |
| url | 15 | tarotcapital.substack.com and 14 other hosts |
| hero_text | 15 | median 139 characters |
| logo_url | 15 | substack-post-media.s3.amazonaws.com and 1 other host |
| author_id | 15 | |
| explicit | 15 | true in 0 of 15 |
| payments_enabled | 15 | true in 10 of 15 |
| subscribers | 15 | |
| subscription | 15 | |
| custom_domain | 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| publication_id | integer | Yes | Numeric publication id | 6349492 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/substack/publication/recommendations?publication_id=6349492" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"publication_id": 6349492,
"recommendations": [
{
"id": 1421308,
"name": "Tarot Capital",
"subdomain": "tarotcapital",
"url": "https://tarotcapital.substack.com",
"subscribers": {
"total_hidden": true
},
"subscription": {
"plans": []
}
}
]
},
"msg": "success"
}Request schema
No body schema
Response schema
#/definitions/substack.recommendationsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | substack.RecommendationsResult | No | ||||
| data.publication_id | integer | No | 6349492 | |||
| data.recommendations | array | No | PublicationListItem record, 55 fields: author_handle, author_id, author_name, custom_domain, explicit, hero_text, id, language, logo_url, name, payments_enabled, subdomain and 3 more. Described under Substack Search API. | |||
| 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/recommendations?publication_id=6349492" \
-H "x-api-key: $CRAWLORA_API_KEY"