Coding with AI?
Connect your agent to our MCP and let it integrate any endpoint for you in one shot.
Search Substack Publications
Search Substack publications by name or keyword. Returns name, URL, tagline, author, subscriber badge, paid-subscriber band, prices, bestseller tier and language for each publication.
Endpoint
GET /v1/substack/publications
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 publications per page |
language |
No | Two-letter language code, e.g. es, to rank publications in that language first |
Response Fields
| Field | Type | Description |
|---|---|---|
publications |
array | Array of matching publications |
publications[].publication_id |
string | Publication ID |
publications[].name |
string | Publication name |
publications[].subdomain |
string | Substack subdomain (<subdomain>.substack.com) |
publications[].url |
string | Publication home URL (the custom domain when it has one) |
publications[].custom_domain |
string | Custom domain, empty when none |
publications[].description |
string | Publication tagline |
publications[].logo_url |
string | Logo URL |
publications[].cover_image_url |
string | Cover image URL, empty when none |
publications[].author |
string | Primary author’s handle |
publications[].author_name |
string | Primary author’s display name |
publications[].author_id |
string | Primary author’s user ID |
publications[].author_url |
string | Link to the primary author’s profile |
publications[].subscriber_count |
integer/null | Free subscriber count as Substack displays it (rounded, e.g. 1200000); null when the publication hides it |
publications[].subscriber_count_label |
string | The displayed subscriber badge, e.g. 1.2M+, or a band such as Thousands of subscribers |
publications[].ranking_detail |
string | Substack’s ranking note: the paid-subscriber band for established publications or a launch note such as Launched a year ago for new ones; empty when not shown |
publications[].paid_subscriber_band |
string | Paid subscriber band, e.g. Tens of thousands of paid subscribers; empty when Substack shows none |
publications[].paid_subscriber_floor |
integer | Lower bound of the paid band (100, 1000, 10000), 0 when none |
publications[].bestseller_tier |
integer | Bestseller badge tier: 0, 100, 1000 or 10000 paid subscribers |
publications[].is_bestseller |
boolean | Whether the publication carries a bestseller badge |
publications[].paid_enabled |
boolean | Whether paid subscriptions are enabled |
publications[].plans |
array | Subscription prices (interval, amount, currency) |
publications[].has_podcast |
boolean | Whether the publication has a podcast |
publications[].podcast |
object/null | The publication’s podcast (title, description, art_url, host, is_free, is_subscriber_only), null when none |
publications[].sections |
array | The publication’s sections (section_id, name, slug, is_podcast) |
publications[].author_pic_url |
string | Primary author’s profile picture URL |
publications[].logo_url_wide |
string | Wide logo URL, empty when none |
publications[].founding_plan_name |
string | Name of the founding tier, empty when none |
publications[].has_recommendations |
boolean | Whether the publication recommends other publications |
publications[].has_chat |
boolean | Whether subscriber chat is enabled |
publications[].language |
string | Language code |
publications[].type |
string | newsletter or podcast |
publications[].twitter_handle |
string | The publication’s X handle, empty when none |
publications[].created_at |
string | Date the publication was created (UTC) |
publications[].first_post_date |
string | Date of the first post (UTC) |
publications[].source |
string | “Substack” |
publications[].domain |
string | “substack.com” |
query |
string | The search keyword |
page |
integer | Current page number |
has_next_page |
boolean | Whether another page exists |
count |
integer | Number of publications returned |
Example Request
cURL
curl "https://apidirect.io/v1/substack/publications?query=crypto&page=1" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
response = requests.get(
"https://apidirect.io/v1/substack/publications",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"query": "crypto", "page": 1}
)
print(response.json())
Example Response
{
"count": 20,
"has_next_page": true,
"page": 1,
"publications": [
{
"author": "cryptoyall",
"author_id": "89093778",
"author_name": "Josh Rhodes - Crypto Y'all",
"author_pic_url": "https://substackcdn.com/image/fetch/$s_!e6dX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff3e27c-70ae-4556-9000-a84bf76e3dd3_2973x2377.jpeg",
"author_url": "https://substack.com/@cryptoyall",
"bestseller_tier": 0,
"cover_image_url": "",
"created_at": "2025-11-06 02:36:02",
"custom_domain": "",
"description": "Tired of feeling lost in the crypto world? We’ll teach you how the market really works—so you can spot opportunities, av…",
"domain": "substack.com",
"first_post_date": "2026-06-09 15:38:18",
"founding_plan_name": "Founding Member",
"has_chat": true,
"has_podcast": true,
"has_recommendations": false,
"is_bestseller": false,
"language": "en",
"logo_url": "https://substackcdn.com/image/fetch/$s_!e6dX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.…",
"logo_url_wide": "https://substackcdn.com/image/fetch/$s_!3X7s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097d2cae-589f-466e-942c-e42391021862_480x254.png",
"name": "Josh Rhodes - Crypto Y'all",
"paid_enabled": true,
"paid_subscriber_band": "",
"paid_subscriber_floor": 0,
"plans": [
{
"amount": 40.0,
"currency": "USD",
"interval": "month"
},
{
"amount": 439.0,
"currency": "USD",
"interval": "year"
}
],
"podcast": null,
"publication_id": "6822164",
"ranking_detail": "Launched 4 months ago",
"sections": [],
"source": "Substack",
"subdomain": "cryptoyall",
"subscriber_count": null,
"subscriber_count_label": "128",
"twitter_handle": "",
"type": "newsletter",
"url": "https://cryptoyall.substack.com"
}
],
"query": "crypto"
}