Bluesky scraper API. Skip the firehose.
Profiles, posts and post lookups by URL over plain REST, for when you need the data, not a relay. Same key as X and Threads.
- No App Password
- Plain REST
- Failed lookups aren't charged
Teams running monitoring, research, and enrichment pipelines
Why Social Fetch
We run the Bluesky scrapers. You build the product.
Live Bluesky data as JSON — proxies, platform changes and consistent output handled for you.
Bluesky, plus every other network
One key and one response envelope for Bluesky and 24 more platforms — profiles, posts, search, comments and transcripts.
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 — not from a shared cache.
No scraper maintenance
We handle proxies, browser changes, and platform 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 Bluesky data can you get?
3 endpoints, one API key. Every response comes back as live JSON in the same envelope.
Profiles & channels
Look up a Bluesky account by handle or URL — bio, counts and metadata.
Lists & graphs
Page through an account's posts, videos, followers and more.
Content
Fetch a single post or video by URL, with metrics and media.
Browse all 3 Bluesky endpoints
What teams build with Bluesky data
Monitoring, enrichment, research and content workflows on Bluesky data — 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
+ 19 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.”
Bluesky API: common questions
Is there a Bluesky scraper API that works without an App Password?
Yes. Social Fetch Bluesky routes read public profile and post data. You authenticate to Social Fetch with an API key (x-api-key). You do not create a Bluesky App Password or open an AT Protocol session as the user whose public data you are fetching.
How is Social Fetch different from the Bluesky firehose or AT Protocol DIY?
The firehose streams network events for real-time indexing. AT Protocol XRPC handles Bluesky-native apps and writes. Social Fetch is point lookup: handle or post URL in, structured JSON out, same envelope as TikTok and X. Not a relay, firehose subscription, or PDS client.
What Bluesky data does Social Fetch cover?
Three marketplace operations: GET /v1/bluesky/profiles/{handle} (profile card and metrics), GET /v1/bluesky/profiles/{handle}/posts (paginated public feed), and GET /v1/bluesky/posts (one post by public URL, including embed and reply samples when returned). Exact schemas live under /docs/api and on this hub's endpoint list.
Do custom domain Bluesky handles work?
Yes. Pass the handle as used on Bluesky — *.bsky.social or a custom domain — with or without a leading @. On a found profile, data.profile.platformUserId is the DID, which is the stable identifier if the handle later changes.
Profile card vs profile posts vs post-by-URL — which route?
Use the profile route for identity and aggregate counts. Use profile posts to page a handle's recent public feed. Use post-by-URL when you already have a bsky.app permalink from an alert, CRM, or paste. They are separate operations; confirm a handle with the profile GET before treating an empty feed as "no posts."
How much does the Bluesky API cost?
You buy credit packs (or use the 100 free signup credits). Documented Bluesky lookups are 1 credit each on success. Always trust meta.creditsCharged on the response. There is no required monthly subscription for pay-as-you-go packs.
Does Social Fetch return Bluesky DIDs, embeds, and reply counts?
On found profile lookups, the DID is data.profile.platformUserId, with followers/following/posts under data.metrics. On post routes, rows can include AT URI id, cid, text, author card, likes/reposts/replies/quotes, and a normalized embed when present. The post-by-URL route may also return top-level replies. Treat empty reply arrays as "none returned," not proof the thread has zero replies on Bluesky.
Can I access private or gated Bluesky content?
No. Only publicly visible profiles and posts. Missing or inaccessible targets resolve through data.lookupStatus (for example not_found) rather than inventing empty public cards.
Is scraping Bluesky data legal?
Social Fetch returns publicly visible data. You are responsible for how you use it under Bluesky's terms, AT Protocol norms, applicable law, and your own compliance review. We do not give legal advice.
Can I use the Bluesky API in production with agents or MCP?
Yes. Routes are synchronous REST with typed lookup outcomes, request IDs, and credit metering. The same operations appear as MCP tools and can be reached via Ask (POST /v1/ask) when you want plain-English routing before pinning a typed path. Production cron should call the explicit Bluesky GETs with an API key.
The Bluesky API in detailHow the Bluesky routes work, what they cost, and how they differ from the official API.
Why teams use Social Fetch for Bluesky
Bluesky runs on AT Protocol — you can resolve handles, talk to a PDS, or subscribe to the firehose yourself. Social Fetch covers three scheduled lookups on the same key as TikTok and X: profile by handle, paginated posts, and one post by bsky.app URL.
Every response uses { data, meta } with data.lookupStatus, meta.requestId, and meta.creditsCharged. Use AT Protocol for Bluesky-native apps, relays, and writes. Use Social Fetch for public read lookups without App Passwords or a firehose consumer.
How to call the Bluesky API
1. Create an API key
Sign up at Social Fetch and copy a key (
sfk_…). New accounts get 100 free credits — enough to resolve a handle, page one feed, and fetch one post URL against live data.2. Resolve the handle first
Call
GET /v1/bluesky/profiles/{handle}withx-api-key. Pass the handle with or without@. Branch ondata.lookupStatusbefore you spend credits on posts; store the DID fromdata.profile.platformUserIdas your stable Bluesky id.3. Pick feed vs URL
Page recent posts with
GET /v1/bluesky/profiles/{handle}/posts(passcursorfromdata.page.nextCursor). When you already have a bsky.app permalink, useGET /v1/bluesky/posts?url=…instead. Logmeta.requestIdand bill againstmeta.creditsCharged.
What each Bluesky route returns
- Profile cards by handle — custom domains and
*.bsky.social, with DID asplatformUserId. - Follower, following, and post counts on the profile metrics object.
- Paginated public posts for a handle (
nextCursor/hasMore). - Single post by bsky.app URL — text, author, likes/reposts/replies/quotes.
- Normalized embeds (link cards, images, video, quoted records) when present.
- Top-level reply samples on the post-by-URL route when the lookup includes them.
- Same API key and envelope as Instagram, X, and the rest of the catalog.
How much does the Bluesky API cost?
Documented Bluesky routes charge 1 credit per successful completed lookup. Confirm on each operation page and with meta.creditsCharged — that field is the billing source of truth. Credits never expire on pay-as-you-go packs. Free signup credits apply.
Social Fetch vs the official Bluesky API
AT Protocol and Bluesky APIs (AppView, PDS XRPC, firehose/Jetstream) are the native stack for clients, relays, and writes. Social Fetch wraps public read lookups on one REST key — no App Password, no firehose consumer, no creator OAuth.
Pull your first Bluesky data.
Run a live Bluesky request in the playground. 100 free credits, no card, JSON back in seconds.
No credit cardSign up in 30 seconds withGoogleGitHub