Bluesky Scraper - Posts, Profiles, Followers & Search avatar

Bluesky Scraper - Posts, Profiles, Followers & Search

Pricing

from $0.02 / 1,000 posts

Go to Apify Store
Bluesky Scraper - Posts, Profiles, Followers & Search

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

Top Api

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

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

Bluesky Scraper - the public bsky.app profile and posts it turns into rows

  • 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

  1. Create a free Apify account. It comes with $5 of monthly credit and needs no card.
  2. Open Bluesky Scraper and click Try for free.
  3. Paste keywords into Search queries and/or handles into Accounts, or pick a Mode (followers, likers, profiles, threadsโ€ฆ).
  4. Set Max results per input and click Start. Rows appear in the dataset as they are found.
  5. Open Storage and Export as JSON, CSV or Excel, or add a schedule so it runs by itself.

โฌ‡๏ธ Input

What to scrape

ParameterTypeDescription
modeselectauto (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
searchQuerieslistKeywords, phrases, #hashtags, from:handle, or bsky.app/search URLs. Also the topics for people and starter pack search
handleslistHandles, DIDs or profile URLs (bsky.app, @jay.bsky.team, https://bsky.app/profile/nytimes.com)
postUrlslistPost URLs or AT URIs, for posts by URL, replies, quotes, likers, reposters
feedUrlslistCustom feed URLs or AT URIs; whats-hot = Discover
listUrlslistList URLs, starter pack URLs (/starter-pack/ or /start/) or go.bsky.app short links
startUrlsURL listAny mix of bsky.app URLs, or a text file of URLs

Filters (sent to Bluesky)

ParameterTypeDescription
sortselectlatest (default, can go past 100 per query) or top (Bluesky's best 100 per query)
dateFrom / dateTotext2026-10-01, an ISO time, or 7 days / 12 hours. dateTo with a bare date includes that whole day (UTC)
languagetexten, de, jaโ€ฆ
fromAuthor, mentionsAuthor, hashtags, domain, exactUrltext / listBluesky's search filters. fromAuthor on its own returns all of that account's own posts
authorFeedFilterselectPosts and replies (default), no replies, the account's own threads, media, video
includePinsbooleanAdd each account's pinned post first
listContentselectFor 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

ParameterCharged asWhat it adds
includeProfileprofileOne profile row per account in an account feed
scrapeComments + maxComments, threadDepth, replySortpostThe replies of every post found, as kind: "comment" rows with commentDepth and sourcePost*
includeRootPost, includeThreadParentspostThe post itself, and the posts above a reply
includeProfileDetailsprofileFollower / following / post counts on followers, likers, reposters and list members
includeAuthorStats, includeLatestPost, sentiment_analysis, content_analysisfreeAuthor counts on posts; latest post on profiles; sentiment_score / sentiment_label; content_category_*
includeMembers + maxMembersPerPackfreeThe member list inside each starter pack row
includeTrendPosts + maxPostsPerTrendpostPosts 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

Bluesky Scraper dataset - Bluesky posts with likes, reposts, replies and links

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:

RowPrice
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
RunRowsCost
100 posts from 5 accounts + 5 profiles105$0.0019
1,000 posts for one search1,000$0.018
2,000 followers with full profiles2,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 monitorMode each 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 top and 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_SUMMARY says 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.

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.

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.