Coding with AI?
Connect your agent to our MCP and let it integrate any endpoint for you in one shot.
Search Substack Users
Search Substack authors and publication profiles by name or keyword. Returns handle, display name, bio, follower count, subscriber badge, bestseller tier and primary publication for each profile.
Endpoint
GET /v1/substack/users
Price: $0.003 per request Free tier: 50 requests/month
Parameters
| Parameter | Required | Description |
|---|---|---|
query |
Yes | Search keyword (max 500 characters) |
page |
No | Page number, 1-4 (default: 1). 20 profiles per page |
Response Fields
| Field | Type | Description |
|---|---|---|
users |
array | Array of matching profiles |
users[].username |
string | Substack handle |
users[].full_name |
string | Display name |
users[].user_id |
string | User ID (pass it as user_id to the user endpoints) |
users[].biography |
string | Profile bio |
users[].profile_pic_url |
string | Profile picture URL |
users[].follower_count |
integer | Number of followers |
users[].subscriber_count |
integer | Rounded subscriber count of the primary publication, 0 when not shown |
users[].subscriber_count_label |
string | The displayed subscriber badge, e.g. 1.2M+ |
users[].bestseller_tier |
integer | Bestseller badge tier: 0, 100, 1000 or 10000 |
users[].is_bestseller |
boolean | Whether the author carries a bestseller badge |
users[].paid_subscriber_band |
string | Paid subscriber band of the primary publication, e.g. Tens of thousands, empty when not shown |
users[].paid_subscriber_floor |
integer | Lower bound of the paid band (100, 1000, 10000), 0 when none |
users[].leaderboard |
object/null | Leaderboard placement (category, category_id, rank, board), null when unranked |
users[].twitter_handle |
string | X handle, empty when none |
users[].primary_publication |
object/null | The author’s main publication (publication_id, name, subdomain, url, logo_url) |
users[].date_joined |
string | Profile creation date and time (UTC) |
users[].url |
string | Link to the profile |
query |
string | The search keyword |
page |
integer | Current page number |
has_next_page |
boolean | Whether another page exists |
count |
integer | Number of profiles returned |
Example Request
cURL
curl "https://apidirect.io/v1/substack/users?query=lenny&page=1" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
response = requests.get(
"https://apidirect.io/v1/substack/users",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"query": "lenny", "page": 1}
)
print(response.json())
Example Response
{
"count": 20,
"has_next_page": true,
"page": 1,
"query": "lenny",
"users": [
{
"bestseller_tier": 10000,
"biography": "Writing • Angel investing • Advising",
"date_joined": "2021-05-01 23:55:21",
"follower_count": 1383966,
"full_name": "Lenny Rachitsky",
"is_bestseller": true,
"leaderboard": {
"board": "paid",
"category": "Business",
"category_id": 62,
"rank": 1
},
"paid_subscriber_band": "Tens of thousands",
"paid_subscriber_floor": 10000,
"primary_publication": {
"logo_url": "https://substack-post-media.s3.amazonaws.com/public/images/441213db-4824-4e48-9d28-a3a18952cbfc_592x592.png",
"name": "Lenny's Newsletter",
"publication_id": "10845",
"subdomain": "lenny",
"url": "https://www.lennysnewsletter.com"
},
"profile_pic_url": "https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/afba5161-65bb-4d99-8d6b-cce660917fa1_1540x1540.png",
"subscriber_count": 1200000,
"subscriber_count_label": "1.2M+",
"twitter_handle": "lennysan",
"url": "https://substack.com/@lenny",
"user_id": "1849774",
"username": "lenny"
}
]
}