Medium API. Feeds and sitemaps as JSON.
The newest ten posts by tag, author or publication, and the sitemap tree for backfills and discovery.
- Tag and author feeds
- Sitemap discovery
- 1 to 2 credits per request
- Failed requests aren't charged
Teams running monitoring, research, and enrichment pipelines
Why Social Fetch
Medium data as JSON. You build the product.
Live Medium data in one response shape, with platform changes handled for you.
Medium, plus every other platform
One key and one response envelope for Medium and 56 more platforms.
Pricing you can reason about
One request, one credit. Know how far your balance will go before you run your next batch.
Live data on every request
Fetch public data when you ask for it.
Nothing to maintain
We handle platform changes and breakages.
Built for production jobs
Run concurrent workloads with explicit statuses and request IDs.
Regular jobs. Better rates.
Running lookups every month? Get lower per-credit rates with a monthly plan. For occasional projects, choose pay as you go.
What Medium data can you get?
6 endpoints, one API key. Every response comes back as live JSON in the same envelope.
Posts
Sitemaps
Browse all 6 Medium endpoints
What teams build with Medium data
Monitoring, enrichment, research and content workflows on Medium data, on the same API as every other platform.
How it works
Your first request in three steps.
Use TypeScript or your automation tool of choice.
Sources
+ 51 more platforms
One request
GET/v1/tiktok/profiles/
x-api-key: sk_live_••••••••
Same JSON shape
{
"data": {
"lookupStatus": "found",
"profile": {
"platform": "tiktok",
"handle": "charlidamelio",
"displayName": "charli d’amelio",
"verified": true
},
"metrics": {
"followers": 160263648
}
}
}Step 1
Create your free account
Get an API key with 100 requests included.
Step 2
Choose an endpoint
Pass a username, URL, keyword, or post ID.
Step 3
Get clean JSON
Use the response immediately or send it into your pipeline.
Works with your stack
Code, automate, or connect your AI.
TypeScript
n8n
- Make
- Apify
- MCP
- AI clients
Pricing
Social data, priced simply.
Start with 100 free credits. Monthly plans give you predictable volume and lower per-request rates.
Starter
18,000credits
$1.61 per 1k · $0.00161 per request
- Top up from $1.61 / 1k if you run out
- Up to 25 monitors
Growth
50,000credits
$1.58 per 1k · $0.00158 per request
- Top up from $1.58 / 1k if you run out
- 5 team seats
- Up to 100 monitors
Scale
150,000credits
$1.50 per 1k · $0.00150 per request
- Top up from $1.50 / 1k if you run out
- 25 team seats
- Up to 250 monitors
- Cancel anytime
- 30-day money-back guarantee
- Price locked while you stay
Need 1M+ credits, invoicing, or volume rates? Talk to us
Trust signals
DevHunt
Product Hunt
Uneed
Customers
Teams building on Social Fetch.
“Our TikTok and Instagram scrapers broke constantly. Social Fetch took us off that rotation — we ship product again.”
“Transcripts at volume from one endpoint. No broken scrapers for our small team to maintain.”
“Live profile data on every request. We never flag accounts from a stale cache.”
“Heavy concurrent load, no rate limits to negotiate. The rare API I haven't wrapped in retries.”
Medium API: common questions
What can I get from the Medium API?
Tag, author and publication feeds, one day's post sitemap, entity sitemaps, and the sitemap index. Every route returns JSON in the same envelope.
How many posts does each list return?
Ten, the list's whole depth. page.depth is 10 and page.hasMore is null because the list has no cursor or older-page parameter. Use a sitemap for a deeper history.
How do I pull every post for a day?
Call GET /v1/medium/posts with date=YYYY-MM-DD and follow page.nextCursor until page.hasMore is false. page.total is the row count for that page, and each page is its own request.
Can I use a publication on its own domain?
Yes. Pass the domain as the slug (uxdesign.cc) or add domain=uxdesign.cc. The optional tag filter is only supported on Medium-hosted publications.
Why is `contentHtml` null on a tag feed?
A tag's items often carry a snippet instead of the article body. Check contentAvailable; when it is false, read snippet and imageUrl. Author and publication items usually include the full HTML.
What does `lookupStatus` mean?
found means the list was returned; a tag with no stories is still found with an empty posts array. not_found means the handle, publication or dated sitemap file does not exist. HTTP 200 only means the request finished, so always branch on data.lookupStatus.
What does `complete: false` mean?
An item was incomplete and left out. The rest of the response is still returned and complete is false. A later request may return every item.
How do I find the sitemap files for a kind?
Call GET /v1/medium/sitemap with kind=posts (or another kind). The answer pages files[] with url, path, kind, date and lastModified, plus count, latest and page.nextCursor. Set limit from 1 to 500; the default is 100.
How much does the Medium API cost?
1 credit per completed request on most routes and 2 for the sitemap index. Each page of a sitemap is a separate request. A temporary 503 is not billed. meta.creditsCharged on every response is the billing source of truth.
Can I use the Medium routes from an agent or Make?
Yes. The routes are typed MCP tools and Ask targets, and they are reachable in Make through the shared modules and Make an API call. Use the typed routes for production jobs.
The Medium API in detailHow the Medium routes work, what they cost, and how they differ from the official API.
Why teams use Social Fetch for Medium
Social Fetch exposes six routes under /v1/medium. The tag, author and publication routes return the newest ten posts of a tag, an author handle, or a publication slug or custom domain. Each post carries postId, title, url, publishedAt, tags, contentHtml, contentText, wordCount and readingMinutes when the article body is available. The sitemap routes list one day's post URLs or one day's entity URLs, paged with page.nextCursor, and the index route pages the available sitemap files by kind with a date and lastModified.
Every response uses the { data, meta } envelope. Check data.lookupStatus before storing a row: not_found is a typed outcome, not an error. Cursors are opaque and only valid with the same filters.
How to call the Medium API
1. Create an API key
Sign up at Social Fetch and copy a key (
sfk_...). New accounts get 100 free credits, enough to try every Medium route.2. Pick the read
Use
GET /v1/medium/tags/javascript/postsfor a tag's latest ten,GET /v1/medium/authors/ev/postsfor an author, orGET /v1/medium/posts?date=2011-06-29for a sitemap day. Sendx-api-keyon every request.3. Page and branch
Check
data.lookupStatus, keep requesting withpage.nextCursorwhilepage.hasMoreis true, and readmeta.creditsChargedfor billing.
What each Medium route returns
- A tag's newest ten posts, with the snippet and first image when one is available.
- An author's ten newest posts across publications, with full article HTML when the article body is available.
- A publication's ten newest posts by Medium slug or custom domain, with an optional tag filter.
- One day's post sitemap, up to 500 URLs per page, for a deterministic backfill.
- Entity sitemaps for users, publications, tags, lists, topics, removed posts and removed users.
- The sitemap index, so you can name the files available for a kind before you page them.
How much does the Medium API cost?
Most Medium routes charge 1 credit per completed request; the sitemap index charges 2. The price is shown on each endpoint page. Each sitemap page is its own request. A temporary 503 is not billed. meta.creditsCharged on every response is the billing source of truth.
Social Fetch vs the official Medium API
Medium has no general public API covering these surfaces. A tag, author or publication list stops at ten posts and has no cursor, and each post brings the publisher's own markup. Social Fetch returns one JSON shape across posts and sitemaps, derives plain text and reading time, and pages a sitemap day so thousands of URLs have a stable cursor.
Pull your first Medium data.
Run a live Medium request in the playground. 100 free credits, no card, JSON back in seconds.
No credit cardSign up in 30 seconds withGoogleGitHub
