Bluesky Scraper Enterprise Grade avatar

Bluesky Scraper Enterprise Grade

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Bluesky Scraper Enterprise Grade

Bluesky Scraper Enterprise Grade

Collect public Bluesky posts, comments, profiles, followers, following and people who liked or reposted, by keyword, hashtag, handle or link. No Bluesky account or API key needed. Great for social listening, trend tracking, brand monitoring and finding influencers. Export to Excel or CSV.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Data WiKi

Data WiKi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Features

Limited permissions

Share

๐Ÿš€ What is Bluesky Scraper Enterprise Grade?

Bluesky Scraper Enterprise Grade is an Apify Actor that collects public Bluesky data: posts with their comments, profiles, followers, followed accounts and the people who liked, reposted or quoted a post. Add keywords, hashtags, handles or links, press Start and download the rows as JSON, CSV or Excel. No Bluesky account is needed.

  • Five collection modes: run it as a Bluesky post scraper, or switch to profiles, followers, following or engagers.
  • One list for everything: keywords, hashtags, handles, DIDs and Bluesky links can be mixed in a single run.
  • Live results: every row is saved as soon as it is read, so the Output tab fills while the run is going.
  • Separate tables: posts, comments, profiles, followers, following, engagers and failed inputs each get their own table.
  • No API key: the Actor reads data that any visitor can see, so you do not need a Bluesky API key.

Click Try for free, add a target and press Start.

๐Ÿ“Š What data can you extract from Bluesky?

Every row has a kind: post, quote, comment, profile, follower, following or engager. Post and comment rows carry like, repost, reply and quote counts. Fields that Bluesky does not publish for an item stay null. The example values below are made up and only show the shape of the data.

FieldDescriptionExample
kind, query, id, uri, cid, urlRow type, the target that produced it, post key or account DID, post address, content hash and public linkpost
authorHandle, authorDid, authorName, authorAvatarWho wrote the postexample-user.bsky.social
authorFollowersCount, authorFollowsCount, authorPostsCount, authorVerified, authorCreatedAt, authorBioReach and profile data of the post author1200
text, createdAt, indexedAt, languagesPost text, dates and language codesGolden hour at the harbour
likeCount, repostCount, replyCount, quoteCount, bookmarkCountCounts for the post42
engagementTotal, engagementRateLikes, reposts, replies and quotes added up, and that total divided by the author's followers0.0425
hashtags, mentions, links, linkDomainsHashtags, mentioned accounts, full link URLs and their domains["photography"]
mediaType, images, video, externalLink, quotedPost, embeddedRecordAttached media, link card, quoted post and embedded feed, list or starter packimage
isReply, replyParentUri, replyRootUri, isRepost, repostedBy, repostedAt, isPinned, isQuote, replyRestriction, labels, selfLabels, threadgateThread position, repost and pin flags, reply rules and moderation labelseveryone
sourcePostId, sourcePostUri, sourcePostUrl, sourcePostAuthorHandle, commentDepth, commentParentUriComment rows: the post a comment belongs to and its reply level (1 is a direct reply)1
avatar, banner, followersCount, followsCount, postsCount, followerFollowingRatio, createdAt, accountAgeDaysPeople rows: account counts, ratio and age36
verified, trustedVerifier, verifiedBy, isLabeler, isBridgedVerification and account type flagsfalse
bioEmails, bioLinks, bioMentions, profileLinks, pronouns, websiteContacts and links found in the bio or listed on the profile["hello@example.com"]
listsCount, feedsCount, starterPacksCount, dmsOpenTo, pinnedPostUrl, joinedViaStarterPack, liveStatusLists, feeds and starter packs created, who may send messages, pinned post and live statusnone
lastPostAt, postsPerWeek, avgLikesPerPost, avgRepostsPerPost, avgRepliesPerPost, avgEngagementRate, topHashtags, topLinkDomains, activitySampleSizeProfile activity numbers worked out from the account's latest original posts0.7
relation, relationTo, engagedPostUrl, engagedAt, quoteText, quoteUrl, bridgyOriginalUrlHow a person relates to a target (follower, following, like, repost, quote, member, feed creator) and the post involvedlike

Compare engagementRate across posts to get a Bluesky engagement rate for each author. The Output tab also offers the views Overview, Posts and comments, Media and links, People and Profile details.

๐Ÿ’ก Use cases for Bluesky data

  • Bluesky social listening: run the keywords and hashtags of your market, read text, hashtags and links, and keep only the language you need with language.
  • Bluesky brand monitoring: search your brand name with a short date_range such as 7d and repeat the run on a schedule to see new posts. Set mentionsAuthor to an account for Bluesky mentions monitoring of that account only.
  • Bluesky influencer discovery: collect profiles for a topic and sort them by followersCount, postsPerWeek and avgEngagementRate. This is how you find influencers on Bluesky who post often and get replies.
  • Bluesky audience research: list the followers of an account and compare followersCount, accountAgeDays and bioLinks. For Bluesky community mapping, combine the followers, following and engagers tables of key accounts to see who connects them.
  • Bluesky competitor analysis: compare postsPerWeek, avgLikesPerPost and topHashtags of the accounts in your niche. Add engagementTotal per post for Bluesky engagement analytics by author.
  • Bluesky trend tracking: run a hashtag with sortOrder set to top on a schedule and compare likeCount between runs. The rows show Bluesky engagement over time. A saved run like this works as a Bluesky hashtag tracker.
  • Bluesky research data: save posts and comments with dates, languages and counts in one table. Use the rows as a Bluesky posts dataset for your own analysis.

๐Ÿ› ๏ธ How to scrape Bluesky posts, profiles and followers

  1. Create an Apify account and open Bluesky Scraper Enterprise Grade in the Apify Store.
  2. Add targets to Targets to scrape, one per line: a keyword or search phrase, a #hashtag, an @handle or DID, or a Bluesky link.
  3. Choose What to collect: Posts, Profiles, Followers, Following or Engagers.
  4. Set Max rows per target. The form default is 10, and 0 means everything available.
  5. Add optional filters such as date range, language or minimum likes.
  6. Click Start and watch the log; each saved row is counted as it arrives.
  7. Open the Output tab and download the rows as JSON, CSV or Excel.

The Actor works as a Bluesky data extractor inside Apify Console, so there is nothing to install. For a first test keep Max rows per target small.

Posts and comments

To scrape Bluesky posts, choose Posts to collect the posts of a profile, a keyword search, a hashtag, a custom feed or a list, including starter packs. Use Comments per post to add replies: 0 means none, a number means up to that many replies per post, and -1 means every reply. Each comment is saved as its own row with its reply depth. A Bluesky comments scraper run needs only a post or profile link and a comment limit. Enter a hashtag for a Bluesky hashtag search, or a keyword for a text search.

Profiles

Choose Profiles to get account details for handles, search results or members of a list. As a Bluesky profile scraper it writes one row per account. Each row holds counts, verification, links and emails found in the bio, and activity numbers from the latest posts. These activity fields give you Bluesky account analytics for one account. For Bluesky contact emails from bios, read bioEmails and bioLinks. Bluesky profile stats such as followersCount and postsCount sit in the same row.

Followers and following

Choose Followers for the accounts that follow a profile and Following for the accounts a profile follows. Paste a handle or a profile link. A link ending in followers or follows switches the mode for that target. This Bluesky followers scraper mode returns one row per account. The result is a Bluesky followers list you can sort and filter. To export Bluesky followers for one account, run it with a high Max rows per target.

Engagers

Choose Engagers to see who liked, reposted or quoted a post. Paste a post link to see who liked a Bluesky post. The same mode lets you see who reposted on Bluesky. To export Bluesky likes as a list of accounts, run it on the post link. A profile, keyword or hashtag reads the engagers of every post it returns. Quote rows add quoteText and quoteUrl, and each row's relation tells you whether the person liked, reposted or quoted.

๐Ÿ’ฐ How much does it cost to scrape Bluesky?

Bluesky Scraper Enterprise Grade uses pay per event pricing. Every saved row in the main dataset is one charged result, and a small fee is charged when the Actor starts. Rows in the failed inputs table are not charged.

  • Result (main_result): charged once for every post, quote, comment, profile, follower, following or engager row that is saved. Comments are rows too, so they are charged.
  • Actor start (apify-actor-start): $0.00005 per run. The Actor is set to 1024 MB of memory, which is one start event.

Apify platform usage (compute) is billed on top of the events above.

Plan tierPrice per 1,000 results (main_result)
Free$1.50 (1,000 x $0.0015)
Bronze$1.35 (1,000 x $0.00135)
Silver$1.20 (1,000 x $0.0012)
Gold and above$1.00 (1,000 x $0.001)

Example: one hashtag with max_items 25 and max_comments_per_post 2 gives up to 25 posts and 50 comments, so up to 75 rows. On the Free tier that is 75 x $0.0015 = $0.1125, and on Gold 75 x $0.001 = $0.075, plus the start fee of $0.00005 and platform usage.

You can set a maximum cost per run in Apify. When it is reached the run stops cleanly and keeps every row already saved. See the Pricing tab for current rates.

โฌ‡๏ธ Input

The only required field is Targets to scrape (urls). Open the Input tab for every option.

๐Ÿ’ก Keep max_items low for a first test run.

This example collects the latest English posts for a hashtag from the last 7 days, with up to 2 comments per post:

{
"urls": ["#photography"],
"scrape": "posts",
"max_items": 25,
"max_comments_per_post": 2,
"date_range": "7d",
"sortOrder": "latest",
"language": "en"
}
  • urls: keywords, hashtags, handles, DIDs or Bluesky links, one per line. Search operators such as from: work, and sort:top in a keyword sets the order for that keyword. A name such as npr.org is tried as a handle first and searched as a keyword if no such account exists. Duplicates are removed.
  • scrape: posts, profiles, followers, following or engagers. The default is posts.
  • max_items: rows to collect for each target. The form default is 10, and 0 means everything available.
  • max_comments_per_post: posts mode only. The form default is 2, 0 means no comments and -1 means every reply.
  • date_range: type it as text, for example 7d, 24h, 2w, 3m (months) or 1y for the last period, one date such as 2026-01-01 for everything since then, or two dates joined by two dots such as 2026-01-01..2026-03-31.
  • sortOrder: latest or top, for keyword searches.
  • language: a language code such as en, or any.
  • fromAuthor, mentionsAuthor: keep posts written by, or mentioning, one handle or DID.
  • hashtags, domain, exactUrl: keep posts with these hashtags, linking to a domain or sharing an exact link.
  • minLikes, minReposts, minReplies: skip posts below these counts.
  • includeReplies, includeReposts: turn off to skip reply posts or reposts. Both are on by default.
  • proxyConfiguration: optional and off by default. If Bluesky refuses requests, the Actor switches to a proxy by itself. You can also set your own.

โš ๏ธ A filter that rejects most rows can end the run early, because the Actor stops looking after about 50,000 rows examined for one target.

โฌ†๏ธ Output

The scraped rows are shown as a Bluesky dataset in the Storage tab, and the Output tab groups them into tables: all rows, people, posts, comments, profiles, followers, following, engagers and failed inputs. The table view doesn't show all the fields. Use the download options to export Bluesky posts and the other rows as JSON, CSV, Excel, XML or HTML.

One post row for the input above (example values, not real data):

{
"kind": "post",
"query": "#photography",
"id": "3kexamplepost1",
"url": "https://bsky.app/profile/did:plc:exampleexampleexample01/post/3kexamplepost1",
"authorHandle": "example-user.bsky.social",
"authorName": "Example User",
"authorFollowersCount": 1200,
"text": "Golden hour at the harbour #photography",
"createdAt": "2026-11-03T17:30:00.000Z",
"languages": ["en"],
"likeCount": 42,
"repostCount": 5,
"replyCount": 3,
"quoteCount": 1,
"engagementTotal": 51,
"engagementRate": 0.0425,
"hashtags": ["photography"],
"mediaType": "image",
"isReply": false,
"replyRestriction": "everyone"
}

A comment on that post is a separate row that points back to it:

{
"kind": "comment",
"query": "#photography",
"id": "3kexamplereply1",
"authorHandle": "sample-fan.bsky.social",
"text": "Great light!",
"likeCount": 2,
"isReply": true,
"commentDepth": 1,
"sourcePostId": "3kexamplepost1",
"sourcePostUrl": "https://bsky.app/profile/did:plc:exampleexampleexample01/post/3kexamplepost1",
"sourcePostAuthorHandle": "example-user.bsky.social"
}

Profiles output

With "scrape": "profiles" and "urls": ["@example-user.bsky.social"] each row is an account:

{
"kind": "profile",
"query": "@example-user.bsky.social",
"id": "did:plc:exampleexampleexample01",
"url": "https://bsky.app/profile/example-user.bsky.social",
"authorHandle": "example-user.bsky.social",
"authorName": "Example User",
"followersCount": 1200,
"followsCount": 300,
"postsCount": 450,
"followerFollowingRatio": 4.0,
"verified": false,
"bioEmails": [],
"bioLinks": ["example.com"],
"postsPerWeek": 3.5,
"avgLikesPerPost": 38.2,
"activitySampleSize": 30
}

Failed inputs output

A target that could not be read gets a row in the failed inputs table with two columns, input and error. These rows are not charged.

โš ๏ธ Limitations and error handling

  • The Actor reads only public data that any visitor can see. Private accounts, direct messages and anything behind a login are not returned.
  • The Profiles mode works as a Bluesky user scraper for public accounts only.
  • It does not score sentiment and does not list Bluesky trending topics. For a topic, search a hashtag with sortOrder set to top.
  • The number of rows depends on what Bluesky returns for a target, so a run can end with fewer rows than max_items. The log then says how many were found.
  • A search made only of operators such as from: or domain:, with no plain word, cannot be date filtered. It returns one page of up to 100 rows, and dates are filtered afterwards. Add a word to go deeper.
  • Activity numbers such as postsPerWeek come from the latest posts of an account, not its full history.
  • In followers, following and engagers runs, the activity fields are filled only for accounts that have posts.
  • Repeated targets in one run are skipped.
  • If the connection to Bluesky fails 8 times in a row, the run stops and keeps every row already saved.
Run ends withMeaningWhat to do
Done: N rows savedThe run finished; some targets may have problemsCheck the failed inputs table
Spend limit reachedYour maximum cost per run was hitRaise the limit to collect more rows
Bluesky could not be reachedThe connection stoppedCheck proxy settings, then run again
No rows collectedNothing matched or every target failedCheck the targets and the failed inputs table
Input problemThe input could not be used, for example an empty urls list, an unknown scrape value or an unreadable date_rangeFix the field named in the message

In the failed inputs table the error column shows a short code and message, for example NotFound for a deleted or missing post or Unsupported for a link the Actor cannot read.

๐Ÿ”Œ Integrating Bluesky Scraper Enterprise Grade with other apps

As a Bluesky data scraper on the Apify platform, the Actor lets you start runs from code, schedule them and trigger webhooks when a run finishes. The API tab shows ready-made JavaScript, Python and CLI snippets, and the run URL is https://api.apify.com/v2/actors/data_wiki~bluesky-scraper-enterprise-grade/runs.

  • Schedules: repeat Bluesky data collection daily or weekly with Apify schedules and compare likeCount and replyCount between runs.
  • Apps: send rows to Google Sheets, Make, Zapier, Slack or Airbyte through the Apify integrations.
  • API reference: the Apify API documentation covers starting runs and reading datasets from code.
  • AI agents: the hosted Apify MCP server lets an agent find the Actor, check its input and start it.

๐Ÿ”— Other social media scrapers by data_wiki

None of the other Actors by data_wiki covers Bluesky. These four cover related platforms and a follow-up step.

ActorWhat it extractsWhen to use it
Threads posts and profiles scraperPublic Threads posts, profiles, replies and keyword or hashtag search resultsYou follow the same topics on Threads as well as Bluesky
Instagram post comments extractorComments from public Instagram posts and reelsYour audience also comments on Instagram
TikTok hashtag and keyword dataTikTok videos from links, profiles, hashtags or keywordsYour hashtag research also covers short videos
Website contact details extractorEmails, phone numbers and social links from a list of websitesYou collected website links from Bluesky bios and want contact details
Threads profile and post scraperPublic Threads profile details with posts, replies, reposts or mediaYour creators or competitors are also on Threads
Threads posts and profiles search scraperPublic Threads posts, profiles, reposts and replies by keyword or hashtagYour topic listening also covers Threads

For the source of the data see Bluesky.

Bluesky Scraper Enterprise Grade only extracts data that people have made publicly available on Bluesky and does not extract private data. Results can still contain personal data such as handles, names and bio emails, so collect it only with a legitimate reason and consider GDPR and CCPA. Check Bluesky's terms and consult a lawyer if you are unsure. Read more about the legality of web scraping and ethical web scraping.

โ“ FAQ

Do I need a Bluesky account or API key?

No. The Actor reads public data the way a logged-out visitor sees it, so it needs no account, login or Bluesky API key.

Is there an API for this Bluesky scraper?

Yes, the Apify API. Start the Actor with an API call and read the run's dataset, using the apify-client packages for Node.js or Python. It is not an official Bluesky API.

How much does a run cost?

You pay $0.00005 per run start plus a price per saved row: $1.50 per 1,000 on the Free tier down to $1.00 per 1,000 on Gold and above. Platform usage is billed on top.

How do I get comments on posts?

Set max_comments_per_post above 0, or to -1 for every reply, in posts mode. Comments are saved as their own comment rows and are charged like any other row.

How many posts can I collect?

Set max_items for each target. The form default is 10, and 0 collects everything available. The count is per target, not shared across targets.

How do I download all Bluesky posts of one account?

Paste the profile handle or link, choose Posts and set max_items to 0. Add a date_range if you only need a period. This is the simplest way to download all Bluesky posts of an account.

Can I use it as a Bluesky followers exporter?

Yes. Choose Followers, paste the profile, set max_items high and download the rows as CSV or Excel.

Can I scrape private accounts?

No. Only public data is read.

Do I need proxies?

No. The Actor starts without a proxy and switches to a proxy by itself if Bluesky refuses requests. You can also set your own in proxyConfiguration.

Can I use Bluesky Scraper Enterprise Grade through MCP?

Yes. Add the Actor to an AI agent through the Apify MCP server and let the agent call it with your targets.

๐Ÿ’ฌ Your feedback

Found a bug or need another field? Open an issue on the Actor's Issues tab. Need a custom solution? Contact hello.datawiki@gmail.com.