Short answer: kind of, and that's the problem.
Substack shipped an official Developer API in early 2026 — but it only returns public profile info, looked up by a creator's LinkedIn handle, behind a manual approval form. It does not give you post archives, engagement, paid/free status, or analytics. So if you're trying to pull a publication's actual content or benchmark a newsletter, the official API won't help.
The two real options
1. The undocumented public JSON endpoints. Substack's own site loads data from https://{publication}/api/v1/archive?sort=new&limit=12&offset=0 and …/api/v1/posts/{slug}. They return clean JSON — title, slug, date, audience (free/paid), reactions, comments. The catch: they're undocumented and break whenever Substack changes their frontend.
2. RSS. Every publication has /feed, but it caps at ~20 recent items and has zero engagement or analytics data.
Doing it yourself (Python)
import requests
base = "https://astralcodexten.substack.com"
posts = requests.get(f"{base}/api/v1/archive", params={"sort":"new","limit":12,"offset":0}).json()
for p in posts:
print(p["title"], "—", "paid" if p["audience"] != "everyone" else "free")
That works today. It'll also silently stop working the next time Substack ships a frontend change — which is the part nobody enjoys maintaining.
Or skip the maintenance
I wrapped this into a hosted API that does the pagination + breakage-handling and adds the analytics layer (paid/free ratio, posting cadence, avg reactions, total comments). One call:
import requests
r = requests.get(
"https://creatordata-substack-analytics.p.rapidapi.com/v1/publication",
headers={"x-rapidapi-key": "YOUR_KEY",
"x-rapidapi-host": "creatordata-substack-analytics.p.rapidapi.com"},
params={"url": "astralcodexten.substack.com", "limit": 25})
print(r.json()["analytics"])
# {'paid_ratio': 0.1, 'posts_per_week_est': 3.0, 'avg_reactions_per_post': 124.4, ...}
Free tier is 1,000 req/mo: CreatorData Substack API on RapidAPI. Code + docs: github.com/equinoxaifinance-rgb/substack-analytics-api.
One honest limit either way: you can't get private subscriber counts — that data is only visible to the publisher. Anyone claiming a "Substack subscriber API" for arbitrary publications is selling you an estimate.
Top comments (0)