Bluesky Scraper - Posts, Profiles, Followers & Search
Pricing
from $0.02 / 1,000 posts
Bluesky Scraper - Posts, Profiles, Followers & Search
Scrape Bluesky posts by keyword, hashtag or account, plus replies, quotes, custom feeds, lists, followers, likers, profiles, starter packs and trends. Date, language and engagement filters, deep search and a monitor for new posts. No login. $0.018 per 1,000 posts.
Pricing
from $0.02 / 1,000 posts
Rating
0.0
(0)
Developer
Top Api
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
What does Bluesky Scraper do?
Bluesky Scraper extracts Bluesky posts, replies, profiles and account lists from bsky.app and turns keywords, hashtags, handles and URLs into structured rows. A row is one post (text, author, likes, reposts, replies, quotes, links, media), one profile (followers, following, posts, bio, links) or one account in a list (a follower, a liker, a list member). It is built for social listening teams, researchers, marketers and data engineers who need Bluesky data on a schedule, as JSON or CSV, without a login.
Bluesky Scraper - bsky.app Scraper - Bluesky API - AT Protocol Scraper - Bluesky Posts Scraper - Bluesky Followers Scraper
- Search posts by keyword or hashtag: latest or top, with date, language, author, mentions, linked domain and hashtag filters, and Bluesky's search operators (
from:,lang:,#tag). - Past the 100-post search page: a latest-first search keeps going back in time with Bluesky's own date filter. A run measured 1,000 posts for "news" in 8.7 seconds.
- Every account feed: an account's posts, replies, media or video posts and reposts back to its first post, plus its profile row.
- Threads, quotes, likers and reposters of any post, and followers / following of any account, with full profile counts on request.
- Custom feeds, lists, starter packs and trending topics.
- No login, cookies or Bluesky app password: paste handles, keywords or bsky.app URLs.
- Only new rows on a schedule: monitor mode returns what is new since the last run. A run with nothing new is not charged.
- Export anywhere: JSON, CSV, Excel, XML; schedules, webhooks, Make, Zapier, n8n, Google Sheets; the Apify API and MCP for AI agents.
What data can you get from Bluesky?
๐ Post text (text) | ๐ Post URL and AT URI | ๐ Created and indexed time |
| ๐ค Author handle, name, avatar, DID | โค๏ธ Likes, ๐ reposts, ๐ฌ replies, ๐จ๏ธ quotes, ๐ bookmarks | ๐ Languages |
| #๏ธโฃ Hashtags, @mentions, links | ๐ผ๏ธ Images (full size + alt text), ๐ฌ video playlist | ๐ฐ Link card: URL, title, description |
| โฉ๏ธ Reply parent and root, thread depth | ๐ Reposted by, repost time, ๐ pinned | ๐จ๏ธ Quoted post: URL, text, author |
| ๐ฅ Followers, following, posts count | ๐ชช Bio, banner, website, pronouns | โ Verified, trusted verifier |
| ๐ง Emails, โ๏ธ phones and links written in bios | ๐ Lists, feeds, starter packs per account | ๐จ Accepts DMs |
| ๐ฆ Starter packs: members, joins, creator | ๐ Trending topics: category, post count, status | ๐ Sentiment, ๐ท๏ธ content category (optional) |
Measured on 2,307 real posts: text 99%, languages 81%, an embed 61% (link cards 27%, images 20%, video 5%, quoted posts 11%), links 37%, hashtags 11%. On 111 profiles: bio 92%, banner 81%, pinned post 39%, links in the bio 33%, verified 21%, an email in the bio 1%.
How to scrape Bluesky with Bluesky Scraper
- Create a free Apify account. It comes with $5 of monthly credit and needs no card.
- Open Bluesky Scraper and click Try for free.
- Paste keywords into Search queries and/or handles into Accounts, or pick a Mode (followers, likers, profiles, threadsโฆ).
- Set Max results per input and click Start. Rows appear in the dataset as they are found.
- Open Storage and Export as JSON, CSV or Excel, or add a schedule so it runs by itself.
โฌ๏ธ Input
What to scrape
| Parameter | Type | Description |
|---|---|---|
mode | select | auto (default): queries give posts, accounts give their posts, URLs give what they are. Or searchPosts, authorFeed, profiles, followers, follows, searchPeople, postDetails, thread, quotes, likers, reposters, feed, list, starterPacks, trending |
searchQueries | list | Keywords, phrases, #hashtags, from:handle, or bsky.app/search URLs. Also the topics for people and starter pack search |
handles | list | Handles, DIDs or profile URLs (bsky.app, @jay.bsky.team, https://bsky.app/profile/nytimes.com) |
postUrls | list | Post URLs or AT URIs, for posts by URL, replies, quotes, likers, reposters |
feedUrls | list | Custom feed URLs or AT URIs; whats-hot = Discover |
listUrls | list | List URLs, starter pack URLs (/starter-pack/ or /start/) or go.bsky.app short links |
startUrls | URL list | Any mix of bsky.app URLs, or a text file of URLs |
Filters (sent to Bluesky)
| Parameter | Type | Description |
|---|---|---|
sort | select | latest (default, can go past 100 per query) or top (Bluesky's best 100 per query) |
dateFrom / dateTo | text | 2026-10-01, an ISO time, or 7 days / 12 hours. dateTo with a bare date includes that whole day (UTC) |
language | text | en, de, jaโฆ |
fromAuthor, mentionsAuthor, hashtags, domain, exactUrl | text / list | Bluesky's search filters. fromAuthor on its own returns all of that account's own posts |
authorFeedFilter | select | Posts and replies (default), no replies, the account's own threads, media, video |
includePins | boolean | Add each account's pinned post first |
listContent | select | For lists: members (default), posts or both |
Refine results (applied before anything is charged)
includeReplies and includeReposts (both default on), onlyMedia, minLikes, minReposts, minReplies, minQuotes, filterKeywords (must contain any), excludeKeywords, strictKeywordMatch (whole words), minAuthorFollowers, skipAdultContent, and respectOptOut (default on, see below).
Extra data
| Parameter | Charged as | What it adds |
|---|---|---|
includeProfile | profile | One profile row per account in an account feed |
scrapeComments + maxComments, threadDepth, replySort | post | The replies of every post found, as kind: "comment" rows with commentDepth and sourcePost* |
includeRootPost, includeThreadParents | post | The post itself, and the posts above a reply |
includeProfileDetails | profile | Follower / following / post counts on followers, likers, reposters and list members |
includeAuthorStats, includeLatestPost, sentiment_analysis, content_analysis | free | Author counts on posts; latest post on profiles; sentiment_score / sentiment_label; content_category_* |
includeMembers + maxMembersPerPack | free | The member list inside each starter pack row |
includeTrendPosts + maxPostsPerTrend | post | Posts from each trending topic's feed |
Monitoring, output and advanced
monitorMode + monitorStoreName; maxItems (whole run), maxItemsPerInput (default 100), dedupe (one row per post, default on), compact (core fields for AI agents), includeRaw (the full AT Protocol record); proxyConfiguration (leave off: the actor connects directly and moves to Apify Proxy by itself only if Bluesky refuses a request) and maxConcurrency (default 4).
Input JSON
{"searchQueries": ["web scraping", "#opensource"],"handles": ["bsky.app", "nytimes.com"],"sort": "latest","dateFrom": "7 days","language": "en","minLikes": 5,"maxItemsPerInput": 200,"maxItems": 1000}
Accounts that opted out of signed-out viewing are skipped
Bluesky lets an account ask apps not to show its content to people who are not signed in (the !no-unauthenticated label). Bluesky Scraper reads Bluesky signed-out, so with respectOptOut on (the default) it leaves those accounts' posts, replies and profiles out and never charges for them. A quoted post from such an account keeps only its URL. In our runs this was 7-8% of the posts in a keyword search. RUN_SUMMARY counts every skipped row.
Use a latest-first search to get more than 100 posts
Bluesky serves signed-out search one page of up to 100 posts per query. With sort: "latest" and a real keyword in the query, the actor asks again for posts older than the oldest one it has, with Bluesky's documented date filter, until it has maxItemsPerInput posts or reaches dateFrom. top, and searches made only of filters (*, from:, #tag with no keyword), stay at one page per query. If Bluesky ever refuses one of those deeper requests, that query stops there, the run reports it as partial, and no other connection is tried for it.
Pick the mode before you paste
In auto mode an account gives its posts. To get its followers, profile or starter packs, pick that mode; to get a post's replies, quotes, likers or reposters, pick that mode and paste the post URL.
โฌ๏ธ Output
Every row has kind: post, comment (a reply), profile, follower, following, liker, reposter, member, starterPack, trend or error (free). The dataset has a view for each: Posts, Profiles, Accounts, Starter packs, Trends.
A real row from run xhmQcOaebeLEAkufi (search "web scraping"; excerpt):
{"kind": "post","id": "3myd7qy2b2c2f","url": "https://bsky.app/profile/cranberriesfeed.bsky.social/post/3myd7qy2b2c2f","query": "web scraping","text": "New CRAN package climabr with initial version 0.1.0\n#rstats\nhttps://cran.r-project.org/package=climabr","createdAt": "2026-10-20T18:02:07.000Z","authorHandle": "cranberriesfeed.bsky.social","authorName": "CRAN Package Updates Bot","likeCount": 0, "repostCount": 0, "replyCount": 0, "quoteCount": 0, "bookmarkCount": 0,"hashtags": ["rstats"],"links": ["https://cran.r-project.org/package=climabr"],"embed": { "type": "external", "uri": "https://cran.r-project.org/package=climabr", "title": "CRAN: Package climabr" },"isReply": false, "isRepost": false, "isQuote": false}
A profile row carries handle, displayName, description, followersCount, followsCount, postsCount, createdAt, verified, listsCount, feedsCount, starterPacksCount, acceptsDMs, pinnedPostUrl, website, emails, phones, bioLinks (the leader's authorHandle / authorName / text names too). In monitor mode a changed profile also has changedFields, previous and followersDelta / followsDelta / postsDelta. An account row adds subjectHandle / subjectUrl (whose follower, which post's liker) and actionAt (when the like happened).
Use cases
- ๐ฃ Brand and keyword monitoring: a monitor on your brand, product or hashtag delivers new mentions every hour.
- ๐๏ธ Newsrooms and researchers: archive an account's posts and replies, or every post on a topic between two dates.
- ๐ฏ Influencer discovery: search people, then pull follower counts, bios and the links and emails written in them.
- ๐ Audience analysis: followers, likers and reposters of a post or account, with their own counts.
- ๐งต Conversation analysis: full reply threads with depth, sentiment and content category.
- ๐ค AI and RAG pipelines: compact rows of public posts for agents through the API or MCP.
How much does it cost to scrape Bluesky?
Bluesky Scraper charges per row delivered after your filters. There is no start fee:
| Row | Price |
|---|---|
| Post or reply | $0.000018 ($0.018 per 1,000) |
| Profile | $0.000027 |
| Account in a list (follower, following, liker, reposter, member) | $0.000027 |
| Starter pack | $0.000027 |
| Trending topic | $0.0009 |
| Run | Rows | Cost |
|---|---|---|
| 100 posts from 5 accounts + 5 profiles | 105 | $0.0019 |
| 1,000 posts for one search | 1,000 | $0.018 |
| 2,000 followers with full profiles | 2,000 | $0.054 |
There is nothing else to pay: Apify platform usage is included in these prices. Error rows, opted-out accounts, filtered rows and monitor runs with nothing new are free.
Integrations, API, scheduling and MCP
- Schedule a monitor run hourly or daily in Apify Schedules; with
monitorModeeach run returns only what is new. - Webhooks send the dataset to your endpoint when a run finishes; Make, Zapier, n8n, Google Sheets, Slack connect in a few clicks.
- API: start runs and read datasets from Python or JavaScript with
apify-client. - MCP: let Claude, Cursor or any MCP client call Bluesky Scraper through the Apify MCP server.
{ "searchQueries": ["yourbrand", "#yourbrand"], "monitorMode": true, "monitorStoreName": "yourbrand-bluesky", "maxItemsPerInput": 500 }
More social media scrapers
| ๐ฆ Truth Social Scraper Posts, replies and profiles | ๐ฆ Twitter Profile Scraper X followers, bio and verified badge | ๐ธ Instagram Scraper Posts, reels, hashtags and profiles |
| ๐ต TikTok Scraper Videos, hashtags and profiles | ๐ Facebook Search Posts Scraper Keyword, date and location | ๐ฐ Facebook Posts Scraper Page posts and reactions |
| ๐จ๐ณ Weibo Scraper Posts, search, comments | โถ๏ธ YouTube Shorts Scraper Views, channels and transcripts | ๐ค All TopApi actors |
Limits and empty runs
- Search: up to 100 posts per query for
topand for filter-only searches; a latest-first keyword search goes further (60 pages, about 5,850 posts per query, in our tests). - Very large threads: Bluesky's public thread view returns part of a big conversation. A post with 687 replies gave 336 (194 direct replies plus nested ones).
- Follower lists page through Bluesky's own list, 100 at a time; 2,000 followers with full profiles took 38 seconds.
- Signed-out only: private data (DMs, someone's own likes list, "known followers") is not available.
- An empty run means Bluesky has nothing matching (or, in monitor mode, nothing new). Nothing is charged;
RUN_SUMMARYsays why for each input.
FAQ
How much does Bluesky Scraper cost?
$0.018 per 1,000 posts, $0.027 per 1,000 profiles or list accounts, with no start fee. Platform usage is included.
How many posts can Bluesky Scraper get for a search?
One page (up to 100) per query for top; with latest it walks back in time, and our test run collected 1,000 posts for "news" in 8.7 seconds.
Can I monitor Bluesky with Bluesky Scraper on a schedule?
Yes. Turn on monitorMode, give each watch its own monitorStoreName and schedule the actor. Each run returns only posts, accounts or profile changes that are new since the last run, and a run with nothing new is not charged.
Do I need a Bluesky account or app password for Bluesky Scraper?
No. Bluesky Scraper reads Bluesky's public AppView signed-out. It never asks for a login, cookie or app password.
Can Bluesky Scraper get followers, likers and reposters?
Yes: mode: "followers" / "follows" with handles, and mode: "likers" / "reposters" with post URLs. Turn on includeProfileDetails for each account's own follower and post counts.
Can I use Bluesky Scraper with the Apify API or MCP?
Yes. Every run can be started and read through the Apify API (Python, JavaScript, HTTP) and through the Apify MCP server for AI agents.
Why are some accounts missing from Bluesky Scraper results?
Accounts that ask apps not to show them to signed-out viewers are skipped while respectOptOut is on, and are never charged. Blocked, deleted or deactivated accounts are not returned by Bluesky.
Why did my Bluesky Scraper run return no results?
Usually the filters exclude everything (dates, language, minimum likes), or monitor mode found nothing new. Check RUN_SUMMARY for each input's read, filtered and skipped counts. Nothing is charged for an empty run.
Is it legal to scrape Bluesky?
Bluesky Scraper collects only data that Bluesky publishes to anyone who is not signed in, and leaves out accounts that opted out of signed-out viewing. You are responsible for how you use the data, including any personal data in it.
Your feedback
Found a bug or need a field? Open an issue on the Issues tab and we will look at it quickly.

