Bluesky Profile API
/api/bluesky/profile
Get a public Bluesky profile by handle or DID including display name, bio, avatar, banner, follower, following and post counts, verification state and moderation labels
Scrape public Bluesky profiles, post feeds, threads, post and user search, follower graphs, and engagement data through simple JSON endpoints powered by the public AT Protocol AppView. No Bluesky account, no OAuth app, no API approval - just an API key and structured Bluesky data.
Try it now
Use the first endpoint in this API family with a Scrappa API key. Every account includes 500 free monthly credits, so you can validate the response shape before buying credits.
curl -X GET "https://scrappa.co/api/bluesky/profile?actor=bsky.app" \
-H "Accept: application/json" \
-H "X-API-KEY: YOUR_API_KEY"
{
"success": true,
"endpoint": "profile",
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"handle": "bsky.app",
"displayName": "Bluesky",
"description": "The decentralized social network",
"followersCount": 3000000,
"followsCount": 500,
"postsCount": 10000
}
Structured data for real applications. Here are some ideas.
Collect public Bluesky profiles with follower counts, verification state, post volume, and moderation labels to compare creators across the decentralized social network.
Search public Bluesky posts by keyword, hashtag, author, domain, or language and follow the conversation with cursor pagination.
Map follower and following graphs, measure follow relationships between accounts, and pull the likes, quotes, and reposts behind a post.
Fetch full post threads with replies and parent context to analyse how discussions develop around a specific post.
Bluesky scraping API
Scrappa is built for teams searching for a Bluesky API, an AT Protocol data API, or a decentralized social scraping endpoint. Use one API key to collect public profiles, post feeds, full threads, post and user search results, follower graphs, and engagement data as JSON.
Use the profile endpoint when you need follower counts, following counts, biography text, verification state, profile images, and moderation labels.
Use the user posts endpoint when you need post text, media embeds, engagement counts, and cursor pagination for an account.
Use the thread endpoint when you need the full reply tree around a post, and check has_other_replies to detect a truncated result.
Use post search when you need keyword, hashtag, author, domain, or language filtering, and remember that the V1 and V2 generations use different filter names.
Everything you need in one API.
/api/bluesky/profile
Get a public Bluesky profile by handle or DID including display name, bio, avatar, banner, follower, following and post counts, verification state and moderation labels
/api/bluesky/profiles
Get up to 25 public Bluesky profiles in a single request
/api/bluesky/user-posts
Get a Bluesky actor's post feed with post text, media embeds, engagement counts, labels and opaque cursor pagination
/api/bluesky/thread
Get a full Bluesky post thread with replies and parent context, including a truncation flag when more replies exist
/api/bluesky/search-posts
Search public Bluesky posts by keyword with per-generation author, hashtag, domain, language and media filters
/api/bluesky/search-users
Search public Bluesky accounts by handle or display name with cursor pagination
/api/bluesky/typeahead-users
Bluesky account autocomplete for search-as-you-type interfaces
/api/bluesky/followers
List an actor's Bluesky followers with pagination, and note that sort changes membership rather than order
/api/bluesky/following
List the accounts a Bluesky actor follows, alongside the subject profile
/api/bluesky/relationships
Check follow relationships between one Bluesky actor and up to 30 others in a single request
/api/bluesky/posts
Get up to 25 full Bluesky posts by AT-URI including record text, embeds, counts and labels
/api/bluesky/likes
List the Bluesky accounts that liked a given post
/api/bluesky/quotes
List the Bluesky posts that quote a given post
/api/bluesky/reposts
List the Bluesky accounts that reposted a given post
/api/bluesky/resolve-handle
Resolve a Bluesky handle to its decentralized identifier (DID)
Query a public Bluesky handle or DID and return display name, bio, avatar, follower counts, verification state, and moderation labels.
Pull an account post feed with post text, media embeds, engagement counts, labels, and opaque pagination cursors.
Look up a post thread with its full reply tree, parent context, and a flag indicating whether more replies were omitted.
See how Scrappa compares to the official API.
| Feature | Scrappa | Official Bluesky AppView API |
|---|---|---|
| Access any public profile | Yes, but raw XRPC JSON | |
| Ready-to-use result shaping | Raw lexicon output | |
| Pagination cursors | Opaque, echoed per page | Manual handling |
| Mistyped filter handling | 422 before the request | Silently ignored, unfiltered results |
| Account required | ||
| Price per 1k requests | $0.20 | Free but unwrapped |
| Setup time | Minutes | Self-built client |
| Free tier | 500 credits/month | n/a |
Yes. Scrappa provides Bluesky API endpoints for public profiles, post feeds, threads, post and user search, follower graphs, and engagement. You can collect profile metadata, post text, media embeds, engagement counts, reply trees, and follow relationships as structured JSON.
No. All Bluesky endpoints read the public AT Protocol AppView, which serves anonymous GET requests for public data. Scrappa never sends an authorization header, never uses cookies, and never requires Bluesky credentials of any kind. Only a Scrappa API key is needed.
Bluesky maintains two search generations. V2 is the current one and accepts sort=top or sort=recent, while the legacy V1 is the only generation that accepts the sort=latest token. Their filter parameters are also named differently: V2 uses plural keys such as authors and hashtags, while V1 uses singular author and tag. Scrappa keeps both generations explicit so a filter is never silently dropped and you always know which one ran.
The request is rejected with a 422 before any upstream call. The public Bluesky AppView silently ignores unknown parameters and answers with unfiltered results, which would otherwise look like a successful but incorrect search. Scrappa validates every parameter locally so a typo fails loudly instead of quietly returning everything.
Yes. Query public Bluesky profiles through the profile endpoint, or up to 25 at once through the batch endpoint, to collect follower counts, following counts, post volume, verification state, and moderation labels for creator research and comparison.
Paginated endpoints return an opaque cursor. Pass that cursor back unchanged as the cursor parameter to fetch the next page. Cursors are never parsed or reconstructed, so they keep working across upstream changes.
Yes. Every Scrappa account gets 500 free credits per month with no credit card required. Test the Bluesky endpoints before committing to paid usage.
Scrappa charges $0.20 per 1,000 requests with no daily caps. All Bluesky endpoints cost the same. The free tier includes 500 credits per month to get started.