Social listening and trend tracking
Use Bluesky endpoints to turn social listening and trend tracking into repeatable API requests with documented inputs and JSON responses.
Turn Bluesky's public AT Protocol data into structured social data — account search, full public profiles, an account's post feed, followers and follows, a post's full reply thread, and platform-wide trending topics, all as normalized JSON. Credential-free, no auth required.
Search Bluesky accounts and get profiles, posts, follower/following lists, post threads, and trending topics as structured JSON.
Endpoint families
6
Documented params
22
Examples
7
Live catalog snapshot
Active endpoints
7
Methods
GET
Required params
13
Schema refs
7
{
"platform": "Bluesky",
"endpoint": "bluesky-search-actors",
"method": "GET",
"path": "/bluesky/search-actors",
"auth": "apiKey"
}Use cases
Search Bluesky accounts and get profiles, posts, follower/following lists, post threads, and trending topics as structured JSON.
Use Bluesky endpoints to turn social listening and trend tracking into repeatable API requests with documented inputs and JSON responses.
Use Bluesky endpoints to turn creator and account research into repeatable API requests with documented inputs and JSON responses.
Use Bluesky endpoints to turn conversation and thread analysis into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Bluesky endpoint catalog — 7 endpoints, 22 documented request parameters, and 7 published response schemas — the same catalog Docs and Playground run against.
7 documented Bluesky endpoints, grouped into 7 request families — Author Feed, Followers and Follows, plus 4 more.
22 request parameters are documented across those Bluesky endpoints, 13 of them required — the full input contract is public before you write any integration code.
7 of the 7 Bluesky endpoints ship a recorded example response, and 7 carry a documented response schema — you can code against the real JSON before the first request.
Bluesky endpoints document their error responses (400, 404, 429, 500 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
7 hosted MCP tools back the Bluesky endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/bluesky/author-feed
/bluesky/followers
/bluesky/follows
/bluesky/post-thread
/bluesky/profile
/bluesky/search-actors
Endpoint catalog
/bluesky/search-actorsReturns Bluesky accounts matching a query against display name, handle, and profile description. Public data, sourced from the AT Protocol's public, credential-free AppView API.
Response notes
- Each result's `handle` (or `did`) is usable directly as the `actor` parameter to [`/bluesky/profile`](bluesky-profile.md), [`/bluesky/author-feed`](bluesky-author-feed.md), [`/bluesky/followers`](bluesky-followers.md), or [`/bluesky/follows`](bluesky-follows.md). Example response: ```json { "code": 200, "msg": "OK", "data": { "actors": [ { "did": "did:plc:wmho6q2uiyktkam3jsvrms3s", "handle": "nbcnews.com", "display_name": "NBC News", "description": "News updates from around the globe, all day, every day." } ], "cursor": "2" } } ```
MCP tool bluesky_search_actors
/bluesky/profileReturns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts. Public data, sourced from the AT Protocol's public, credential-free AppView API.
Response notes
- An unknown handle/DID returns `404`. Example response: ```json { "code": 200, "msg": "OK", "data": { "did": "did:plc:z72i7hdynmk6r22z27h6tvur", "handle": "bsky.app", "display_name": "Bluesky", "avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka", "description": "official Bluesky account", "created_at": "2023-04-12T04:53:57.057Z", "banner_url": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreichzyovokfzmymz36p5jibbjrhsur6n7hjnzxrpbt5jaydp2szvna", "followers_count": 34416262, "follows_count": 11, "posts_count": 804, "indexed_at": "2025-10-27T21:05:26.152Z" } } ```
MCP tool bluesky_profile
/bluesky/author-feedReturns a page of a Bluesky account's posts, newest first, including text, engagement counts, and any attached images/link card/quoted post. Public data, sourced from the AT Protocol's public, credential-free AppView API.
Response notes
- Each result's `uri` is usable directly as the `uri` parameter to [`/bluesky/post-thread`](bluesky-post-thread.md). - A post embeds at most one of `images`, `external`, or `quoted_post_uri` (a quote-post-with-media embed sets both `images`/`external` and `quoted_post_uri`). Example response: ```json { "code": 200, "msg": "OK", "data": { "posts": [ { "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l", "cid": "bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq", "url": "https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l", "author": { "did": "did:plc:z72i7hdynmk6r22z27h6tvur", "handle": "bsky.app", "display_name": "Bluesky" }, "text": "Welcome to Bluesky!", "langs": ["en"], "created_at": "2024-10-17T07:06:51.491Z", "reply_count": 8545, "repost_count": 9534, "like_count": 63579, "quote_count": 705 } ], "cursor": "1234567890::bafyabc" } } ```
MCP tool bluesky_author_feed
/bluesky/followersReturns a page of a Bluesky account's followers. Public data, sourced from the AT Protocol's public, credential-free AppView API.
MCP tool bluesky_followers
/bluesky/followsReturns a page of the accounts a Bluesky account follows. Public data, sourced from the AT Protocol's public, credential-free AppView API.
MCP tool bluesky_follows
/bluesky/post-threadReturns a Bluesky post along with its nested replies (and, when the post is itself a reply, its parent chain), up to `depth` levels deep. Public data, sourced from the AT Protocol's public, credential-free AppView API.
Response notes
- `uri` must start with `at://`; otherwise `400` is returned before any upstream request is made. - A deleted, blocked, or otherwise inaccessible reply is silently dropped from `replies` rather than surfaced as an empty entry. - A post that no longer exists returns `404`. Example response: ```json { "code": 200, "msg": "OK", "data": { "thread": { "post": { "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l", "text": "Welcome to Bluesky!", "reply_count": 1, "repost_count": 9534, "like_count": 63579, "quote_count": 705 }, "replies": [ { "post": { "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6ovfftinx2m", "text": "A reply.", "reply_count": 0, "repost_count": 0, "like_count": 10, "quote_count": 0 }, "replies": [] } ] } } } ```
MCP tool bluesky_post_thread
/bluesky/trending-topicsReturns Bluesky's current trending topics and suggested feeds, each with a link to its feed. Public data, sourced from the AT Protocol's public, credential-free AppView API. This surface is less stable than the rest of this family -- Bluesky may change its shape without notice.
Response notes
- This surface is sourced from AT Protocol's `app.bsky.unspecced.*` namespace, which is less stable than the rest of this family — Bluesky may change its shape without notice. Example response: ```json { "code": 200, "msg": "OK", "data": { "topics": [ {"topic": "Big Brother 28", "link": "/profile/trending.bsky.app/feed/821933789"}, {"topic": "NFL Preseason", "link": "/profile/trending.bsky.app/feed/821883116"} ], "suggested": [ {"topic": "Popular with Friends", "link": "/profile/bsky.app/feed/with-friends"} ] } } ```
MCP tool bluesky_trending_topics
Related APIs
Social & Creator Platforms
Build creator intelligence, video research, transcript, and audience-comment workflows without maintaining YouTube scrapers.
Social & Creator Platforms
Turn Twitch's public channel, stream, clip, and team data into structured JSON — live status and viewer counts, top games, clips, VODs, and team rosters — as normalized JSON. Credential-free.
Social & Creator Platforms
Track creator, content, hashtag, music, trend, and public ad creative signals from TikTok with production-ready API routes.
How to scrape Bluesky
Crawlora's Bluesky endpoints return profiles, feeds, follower graphs, threads, and trending topics as normalized JSON with one API key — no Bluesky account or auth token required.
Send a keyword to /bluesky/search-actors, or a handle or DID to /bluesky/profile — bsky.app resolves as readily as its did:plc identifier. A profile returns snake_case counters including followers_count and posts_count.
Pass a handle or DID as actor to /bluesky/author-feed for their posts, or to /bluesky/followers and /bluesky/follows for their social graph.
search-actors, author-feed, followers and follows all take limit and cursor. Pass the cursor from the previous response to continue — there is no page number, and a large account's follower list is only reachable this way.
Pass a post's AT-URI to /bluesky/post-thread for that post and its reply tree, with an optional depth to bound how far down you walk.
/bluesky/trending-topics takes no parameters and returns the platform's current trending topics — around ten at a time, phrased as short headlines rather than hashtags.
FAQ
Send a keyword to Crawlora's /bluesky/search-actors endpoint and get matching account profiles as structured JSON — no Bluesky account required.
No Bluesky login or auth token is required from the caller — Bluesky's AT Protocol AppView exposes this data with zero auth, and Crawlora only requires your own API key.
Yes — /bluesky/post-thread returns a post and its nested reply tree as structured JSON, and an optional depth parameter bounds how deep it walks so a very long conversation does not return more than you need.
With the cursor, not a page number. /bluesky/followers, /bluesky/follows, /bluesky/author-feed and /bluesky/search-actors each accept limit and cursor and return a cursor for the next page — keep passing it back until none is returned. This matters on large accounts: bsky.app alone reports over 34 million followers, so a cursor loop is the only way through.
Either form works. The actor parameter accepts a handle such as bsky.app or the underlying did:plc identifier, because both resolve through the same AT Protocol AppView. Handles can change while DIDs are stable, so store the DID if you are tracking an account over time.