Bluesky Scraper avatar

Bluesky Scraper

Pricing

Pay per event

Go to Apify Store
Bluesky Scraper

Bluesky Scraper

Scrape Bluesky posts by keyword (date & language filters), user feeds, replies/threads, profiles, followers, following, likers and reposters. Likes, reposts, replies, quotes, images, links. Official API, $0.95 per 1,000 results.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Markus Essl

Markus Essl

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Share

Bluesky Scraper — Posts, Search, Profiles & Followers

Get Bluesky data as clean JSON, CSV or Excel: search posts by keyword, pull every post from any account, collect all replies to a post, and export profiles, followers, following, likers and reposters. All modes except post search work without a login. Post search needs a free Bluesky app password, because Bluesky requires login for search. It costs $0.95 per 1,000 results.

What can this Bluesky scraper do?

ModeInputYou get
Search posts (needs Bluesky app password)keywords, phrases, #hashtags, from:handleMatching posts, newest first (or top), with date range, language, author, mention and domain filters
Posts of usershandles or profile URLsA user's posts and replies (optionally reposts), with a date range
Post replies / threadpost URLsThe original post and its replies, nested up to the depth you choose (each reply has threadDepth)
Profileshandles or profile URLsBio, follower/following/post counts, join date, verification, avatar/banner
Search userskeywordsMatching accounts with full profile details
Followers / FollowinghandlesThe accounts that follow (or are followed by) each user, with profile details
Likers / Reposterspost URLsWho liked or reposted a post (likers include likedAt)

What data can you get?

Posts

FieldDescription
urlhttps://bsky.app/profile/<handle>/post/<id>
textPost text
createdAt, indexedAtISO-8601 timestamps
authorHandle, authorDisplayName, authorDid, authorAvatar, authorUrlAuthor info
likeCount, repostCount, replyCount, quoteCount, bookmarkCountEngagement
langs, hashtags, links, mentionedDidsLanguage and rich-text data
imagesImage URLs (full size and thumbnail) with alt text and dimensions
externalLinkLink card: URL, title, description, thumbnail
videoVideo playlist URL and thumbnail
quotedPostThe quoted post's URL, text and author
isReply, replyToUrl, rootPostUriReply context
isRepost, repostedByHandle, repostedAtReposts (user posts mode)
threadDepth0 = original post, 1 = direct reply, 2 = reply to a reply… (thread mode)
uri, cid, postIdAT Protocol identifiers

Profiles / users (type = profile, follower, following, liker, reposter)

FieldDescription
handle, displayName, did, urlIdentity
descriptionBio
followersCount, followsCount, postsCountCounts
createdAtAccount creation date
isVerified, isTrustedVerifier, labelsVerification and labels
avatar, banner, pinnedPostUrlMedia and pinned post
listsCount, feedsCount, starterPacksCountOther things the account has created

Every item also has type, sourceType, sourceInput (the query, handle or URL that produced it) and scrapedAt.

How to use it

  1. Choose What to scrape, for example "Posts of users" or "Search posts by keyword".
  2. Enter handles, post URLs or search queries, and optionally a date range and language.
  3. Click Start. Download the results as JSON, CSV or Excel, or fetch them via the API.

Searching posts: add a Bluesky app password

Bluesky no longer allows post search without login, so the Search posts mode needs a Bluesky account. No other mode does.

  1. Log in to Bluesky with any account. We recommend a separate, throwaway account made just for scraping.
  2. Open bsky.app/settings/app-passwords (Settings → Privacy and security → App passwords) and click Add App Password.
  3. Copy the generated password (it looks like xxxx-xxxx-xxxx-xxxx) into Bluesky app password, and put the account's handle (e.g. myname.bsky.social) into Bluesky handle.

An app password is not your main password. It cannot change your account settings, and you can revoke it anytime. The Actor stores it encrypted as a secret input and never logs it. The Actor uses it only to call Bluesky's official search API, and it never posts, likes or follows anything.

Input example

{
"mode": "searchPosts",
"blueskyHandle": "myname.bsky.social",
"blueskyAppPassword": "xxxx-xxxx-xxxx-xxxx",
"searchQueries": ["web scraping", "#rustlang"],
"since": "2026-09-01",
"until": "2026-09-30",
"lang": "en",
"sort": "latest",
"maxItems": 1000
}

Other examples:

{ "mode": "userPosts", "handles": ["bsky.app", "https://bsky.app/profile/jay.bsky.team"], "since": "30 days", "maxItems": 500 }
{ "mode": "postThread", "postUrls": ["https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l"], "threadDepth": 3 }
{ "mode": "followers", "handles": ["python.org"], "maxItems": 5000 }

Output example

A post (real output):

{
"type": "post",
"url": "https://bsky.app/profile/bsky.app/post/3mv3shqdfuc2e",
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mv3shqdfuc2e",
"cid": "bafyreicctz5gxccl6ql35ae7a6wdk3zl2ry6o5ioltme52yezp7s6l42ji",
"postId": "3mv3shqdfuc2e",
"text": "Not to brag, but ... we snagged a couple of passes to today’s Apple event. Stay tuned for our take on all the latest and greatest Apple products.",
"createdAt": "2026-09-09T15:00:07.513Z",
"indexedAt": "2026-09-09T15:00:45.669Z",
"authorHandle": "bsky.app",
"authorDisplayName": "Bluesky",
"authorDid": "did:plc:z72i7hdynmk6r22z27h6tvur",
"authorAvatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
"authorUrl": "https://bsky.app/profile/bsky.app",
"likeCount": 2356,
"repostCount": 158,
"replyCount": 117,
"quoteCount": 41,
"bookmarkCount": 50,
"langs": [
"en"
],
"hashtags": [],
"mentionedDids": [],
"links": [],
"images": [
{
"url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreih3mb3cwnbc5kv5b2qyy24q6banms25i5ut3cbty4ej2x7vjvd6y4",
"thumbnail": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreih3mb3cwnbc5kv5b2qyy24q6banms25i5ut3cbty4ej2x7vjvd6y4",
"alt": "An enormous pile of red apples and green apples—sweet, tart, delicious, and coming soon to an Apple Store near you! Keep your eye on this thread (and maybe put on a sturdy hat) to learn more about today's big drops.",
"width": 4000,
"height": 3000
}
],
"externalLink": null,
"video": null,
"quotedPost": null,
"isReply": false,
"replyToUri": null,
"replyToUrl": null,
"rootPostUri": null,
"labels": [],
"isRepost": false,
"repostedByHandle": null,
"repostedAt": null,
"sourceType": "user",
"sourceInput": "bsky.app",
"scrapedAt": "2026-10-09T13:49:58Z"
}

A profile (real output):

{
"type": "profile",
"url": "https://bsky.app/profile/bsky.app",
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"handle": "bsky.app",
"displayName": "Bluesky",
"description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
"avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
"banner": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreichzyovokfzmymz36p5jibbjrhsur6n7hjnzxrpbt5jaydp2szvna",
"followersCount": 35200748,
"followsCount": 15,
"postsCount": 866,
"createdAt": "2023-04-12T04:53:57.057Z",
"indexedAt": "2025-10-27T21:05:26.152Z",
"isVerified": false,
"isTrustedVerifier": true,
"pinnedPostUrl": "https://bsky.app/profile/did:plc:z72i7hdynmk6r22z27h6tvur/post/3l6oveex3ii2l",
"listsCount": 18,
"feedsCount": 7,
"starterPacksCount": 15,
"isLabeler": false,
"labels": [],
"sourceType": "profile",
"sourceInput": "bsky.app",
"scrapedAt": "2026-10-09T13:50:02Z"
}

Pricing

$0.95 per 1,000 results. You pay only for the items saved to your dataset. Use Maximum results (maxItems) or the run's maximum charge to cap your spend, and the run stops once it reaches either limit.

Use cases

  • Brand and topic monitoring: track mentions of your brand, product, competitors or hashtags, day by day.
  • Social listening and sentiment analysis: export thousands of posts with language tags for NLP or dashboards.
  • Influencer research: find accounts by keyword and compare follower counts and engagement.
  • Audience analysis: export the followers of an account, or who liked and reposted a viral post.
  • Conversation analysis: collect every reply to a post, with its nesting depth.
  • Academic research and journalism: build reproducible datasets of public posts within a date range.
  • AI agents and LLM pipelines: connect the Actor to Claude, ChatGPT or your own agent through the Apify MCP server, or feed the results to RAG and summarization workflows.

FAQ

Is it legal to scrape Bluesky? This Actor reads only public data through Bluesky's official public API, the same data anyone can see without logging in. It does not bypass access controls or collect private data such as emails or phone numbers. You are responsible for using the data in line with applicable laws (e.g. GDPR) and Bluesky's terms.

Do I need a Bluesky account, cookies or proxies? Only for Search posts. That mode needs a Bluesky handle and app password (see "Searching posts" above), because Bluesky requires authentication for post search. User posts, threads, profiles, user search, followers, following, likers and reposters all use Bluesky's open public API with no login. You never need cookies or proxies.

Is my app password safe? It is a secret input, so it is stored encrypted and never written to the log or the dataset. An app password cannot change your account settings, and you can revoke it at bsky.app/settings/app-passwords. We still recommend a throwaway account.

Search says "Bluesky login failed"? Check that the handle is complete (e.g. myname.bsky.social) and that you used an app password, not your main password. Accounts with email 2FA must use an app password.

How many posts can a keyword search return? The Actor follows Bluesky's search pagination until there are no more results or maxItems is reached. Bluesky's search index returns at most about 10,000 hits per query, so for very popular terms run several date ranges (since/until).

Why are a few replies missing from a thread? Bluesky hides replies that are deleted or blocked, or that the author's thread settings restrict, and it limits very large threads. Use threadDepth to control how deep the Actor goes.

Can I search by hashtag? Yes. Enter #hashtag as a query. You can also use Bluesky's search syntax, such as "exact phrase", from:handle, mentions:handle and -excludedword.

Something isn't working? Open an issue on the Actor's Issues tab with your input, and we will fix it quickly.