Endpoint Playground
Returns one public Substack profile: identity, the publications the writer contributes to, their publicly visible subscriptions, and every subscriber signal Substack publishes. total is opt-in per writer and rounded to roughly three significant figures; when a writer hides it, total_hidden is true and total is 0, which must not be read as zero subscribers. paid_rough, paid_rough_int, and paid_tier are buckets - no exact paid subscriber count is published anywhere. follower_count is exact but counts followers, not subscribers.
14 Oct 2026: 38 subscriptions; 5 fields had a value in every checked item.
Sample value profiles: is_founding: true in 0 of 38.
curl 'https://api.crawlora.net/api/v1/substack/user?handle=pragmaticengineer' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| handle | string | Yes | pragmaticengineer | Substack profile handle |
{
"code": 200,
"data": {
"id": 30107029,
"handle": "pragmaticengineer",
"name": "Gergely Orosz",
"url": "https://substack.com/@pragmaticengineer",
"bestseller_tier": 10000,
"subscribers": {
"total": 1100000,
"total_display": "1.1M+ subscribers",
"total_hidden": false,
"paid_rough": "Tens of thousands",
"paid_rough_int": 10000,
"paid_tier": 10000,
"follower_count": 1210186
},
"publications": [
{
"id": 458709,
"name": "The Pragmatic Engineer",
"subdomain": "pragmaticengineer",
"url": "https://pragmaticengineer.substack.com",
"role": "admin",
"is_primary": true
}
],
"subscriptions": [
{
"publication_id": 355849,
"publication_name": "Dispatches From the Basement",
"membership_state": "free_signup",
"is_founding": false
}
]
},
"msg": "success"
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.