Bluesky Scraper: Posts, Search, Profiles, Followers avatar

Bluesky Scraper: Posts, Search, Profiles, Followers

Pricing

from $1.00 / 1,000 post or profiles

Go to Apify Store
Bluesky Scraper: Posts, Search, Profiles, Followers

Bluesky Scraper: Posts, Search, Profiles, Followers

Scrape Bluesky without a login: posts from any profile, keyword and hashtag search, single posts with their reply threads, and profiles with follower, following and post counts. Each post has text, likes, reposts, replies, quotes, hashtags, mentions, links, full-size images and quoted posts.

Pricing

from $1.00 / 1,000 post or profiles

Rating

0.0

(0)

Developer

Plainsource

Plainsource

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

This Bluesky scraper collects posts from any Bluesky profile, keyword or hashtag search results, single posts with their reply threads, and profiles with follower, following and post counts. It reads Bluesky's public AT Protocol API, so it needs no Bluesky account, app password or cookie.

  • Profiles: paste handles (bsky.app, @jay.bsky.team), DIDs or bsky.app/profile/... links. Posts come newest first, with reposts and replies on or off.
  • Search: keywords, phrases, hashtags like #python, and Bluesky's own search operators such as from:bsky.app or domain:github.com. Thousands of results per query, newest first.
  • Threads: paste post URLs, or turn on replies for every post collected, to get the conversation underneath.
  • Profiles mode: one row per account with bio, avatar, follower, following and post counts, blue check status and join date. Followers and Following modes list who follows an account, or who it follows.

What data you get

Posts mode returns one item per post:

FieldWhat it holds
text, createdAt, url, uriThe post, when it was written, its bsky.app link and AT URI
authorHandle, authorDisplayName, authorDid, authorAvatarWho wrote it
likeCount, repostCount, replyCount, quoteCount, bookmarkCountEngagement counts
langs, hashtags, mentions, linksLanguages, hashtags, mentioned accounts (handle and DID) and every link in the post
imagesFull-size image URL, thumbnail, alt text, width and height for each picture
video, externalVideo playlist and thumbnail, link card with title and description
quotedPost, isQuoteThe quoted post with its author, text and counts
isReply, replyParentUri, replyRootUriWhether it is a reply and what it replies to
isRepost, repostedByHandle, repostedAtFor reposts collected from a profile
sourceType, source, threadRootUri, replyDepthWhere the item came from (profile, search, post or reply)

Profiles, Followers and Following modes return one item per account: handle, displayName, did, url, description (bio), avatar, banner, followersCount, followsCount, postsCount, createdAt, verified, verifiedBy, pinnedPostUri, relation and relatedTo.

How to use it

  1. Pick What to scrape: Posts, Profiles, Followers of each profile, or Accounts each profile follows.
  2. Add profiles, search queries or post URLs.
  3. Set Max posts per profile or search query, and optionally Only posts newer than (2026-10-01 or 7 days).
  4. Run it and download JSON, CSV or Excel, or call it from the API, Make, Zapier, n8n or an AI agent through the Apify MCP server.

Example input

{
"mode": "posts",
"profiles": ["bsky.app"],
"searchQueries": ["#python"],
"postUrls": ["https://bsky.app/profile/bsky.app/post/3myx7vphq3s2j"],
"maxPostsPerSource": 20,
"onlyPostsNewerThan": "30 days",
"includeReposts": false,
"includeThreadReplies": false
}

Example output (one post from a real run, image list shortened)

{
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3myx7vphq3s2j",
"url": "https://bsky.app/profile/bsky.app/post/3myx7vphq3s2j",
"authorHandle": "bsky.app",
"authorDisplayName": "Bluesky",
"authorDid": "did:plc:z72i7hdynmk6r22z27h6tvur",
"text": "getting our Halloween decorations set up",
"createdAt": "2026-10-28T16:58:02.827Z",
"likeCount": 3571,
"repostCount": 378,
"replyCount": 223,
"quoteCount": 125,
"bookmarkCount": 202,
"langs": ["en"],
"hashtags": [],
"mentions": [],
"links": [],
"embedType": "images",
"images": [
{
"url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreienhu3nspbm2f2v5q74arjtlvltdlgruzjvo6ndlggksp6l6zlf5a",
"thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreienhu3nspbm2f2v5q74arjtlvltdlgruzjvo6ndlggksp6l6zlf5a",
"alt": "Gravestone reading:\n\nHere lies StumbleUpon\n2001 - 2018\n\"Remember websites?\"",
"width": 570,
"height": 494
}
],
"quotedPost": null,
"isQuote": false,
"isReply": false,
"isRepost": false,
"source": "bsky.app",
"sourceType": "profile",
"scrapedAt": "2026-10-30T02:26:39.856Z"
}

Example output in Profiles mode (real run, shortened)

{
"did": "did:plc:oky5czdrnfjpqslsw2a5iclo",
"handle": "jay.bsky.team",
"displayName": "Jay 🦋",
"url": "https://bsky.app/profile/jay.bsky.team",
"followersCount": 594399,
"followsCount": 3994,
"postsCount": 4185,
"createdAt": "2022-11-17T06:31:40.296Z",
"verified": true,
"verifiedBy": ["bsky.app"],
"relation": "profile"
}

How much does it cost?

You pay per item saved: $0.001 per post, reply or profile, plus $0.0005 once per run. 1,000 posts cost $1.00 plus the start fee. Apify's free plan credit of $5 a month covers about 5,000 items.

Inputs that fail (a handle that does not exist, a deleted post, a link that is not Bluesky) cost nothing. They are listed with the reason in the SUMMARY record of the run's key-value store, next to the item count for every input.

Use cases

  • Brand and topic monitoring: schedule a search for your brand, product or hashtag with Only posts newer than set to 1 day.
  • Audience research: read the replies under a viral post, or list the followers of a competitor with their follower counts and bios.
  • Creator and lead lists: look up a list of handles in Profiles mode to get follower counts, bios and verification in one table.
  • Datasets for analysis or AI: collect posts with language codes, hashtags and links for sentiment analysis, topic modelling or RAG.

FAQ

Does search work without a login? Yes. Bluesky refuses search on its public API host, so the Actor sends search to api.bsky.app, which answers without a login. Without a login Bluesky only serves the first page of results, so for Latest order the Actor moves the time window back to the oldest post it has and asks again. That is how one query returns thousands of posts. Top order cannot be paged this way and returns at most 100 posts per query.

Why do hashtag searches look different in the log? Bluesky rejects a date filter combined with a #hashtag query, so the Actor sends #python as the word python plus a hashtag filter. Bluesky returns the same posts either way.

Can it get likes or the list of people who reposted? Not in this version. It gets the counts (likes, reposts, quotes, replies, bookmarks), not the accounts behind them.

How many followers can it list? Set Max followers or follows per profile. Each page holds 100 accounts, plus one lookup per 25 accounts for counts and bios when Add counts and bio is on. Accounts with millions of followers take a long time to list in full.

What about deleted posts or accounts? Bluesky posts are public. A post URL that points to a deleted post, or a handle that no longer exists, is skipped, costs nothing and is listed in SUMMARY with the reason.

What about rate limits? Bluesky limits requests per IP. The Actor answers HTTP 429 by waiting until the limit resets and retrying, up to six times per request. Turn on Apify Proxy only if you see repeated retries in the log.

Is this legal? It reads public data through Bluesky's documented public API. You are responsible for how you use it, especially personal data, under laws like GDPR.

Other Actors by this developer