Bluesky Scraper — Export Posts, Profiles & Followers avatar

Bluesky Scraper — Export Posts, Profiles & Followers

Pricing

from $1.00 / 1,000 posts

Go to Apify Store
Bluesky Scraper — Export Posts, Profiles & Followers

Bluesky Scraper — Export Posts, Profiles & Followers

Scrape Bluesky posts, profiles, followers and keyword search without an API key. Export to JSON, CSV or Excel. Free AT Protocol data, no OAuth setup.

Pricing

from $1.00 / 1,000 posts

Rating

0.0

(0)

Developer

Night space

Night space

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Bluesky Scraper — Export Posts, Profiles, Followers & Keyword Search

Scrape Bluesky without an API key. Export Bluesky posts, profiles, followers, following lists and keyword search results to JSON, CSV or Excel in one run. No developer account, no OAuth setup, no monthly API fee.

Built on the AT Protocol, the open standard behind Bluesky — so this scraper reads public data the way Bluesky intends it to be read.


What you can do with it

Monitor your brand on Bluesky

Search every public post on Bluesky for your brand, product or competitor names and export the results with engagement counts. Track mentions daily, spot complaints early, and measure share of voice as Bluesky grows past 30 million users.

Build lead and creator lists

Find accounts by keyword — "SaaS founder", "python developer", "travel blogger" — and export handles, bios, follower counts and profile links straight to a spreadsheet.

Export your Bluesky followers to CSV

Pull the complete follower or following list for any public account, with bios and follower counts included. Useful for audience analysis, influencer research and audits.

Research and dataset building

Collect Bluesky posts with timestamps, languages, hashtags, links and engagement metrics for academic research, sentiment analysis or training data.

Track competitors

Watch what competitor accounts post, how often, and which posts actually land.


Sample output

Each row is one flat record, ready for a spreadsheet or a database.

Post

{
"type": "post",
"queriedHandle": "bsky.app",
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3kb2xyz",
"url": "https://bsky.app/profile/bsky.app/post/3kb2xyz",
"authorHandle": "bsky.app",
"authorDisplayName": "Bluesky",
"text": "We just shipped a new feature.",
"lang": "en",
"createdAt": "2026-07-14T09:12:44.000Z",
"replyCount": 128,
"repostCount": 640,
"likeCount": 3204,
"quoteCount": 51,
"isReply": false,
"hashtags": ["buildinpublic"],
"mentions": [],
"links": ["https://bsky.social/about/blog"],
"images": ["https://cdn.bsky.app/img/feed_fullsize/..."]
}

Profile

{
"type": "profile",
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"handle": "bsky.app",
"displayName": "Bluesky",
"description": "Official Bluesky account.",
"followersCount": 1420331,
"followsCount": 42,
"postsCount": 1893,
"createdAt": "2023-04-12T04:53:57.000Z",
"url": "https://bsky.app/profile/bsky.app"
}

Followers and following rows use the same profile shape, tagged with the handle you queried.


Quick start

  1. Click Try for free.
  2. Leave everything as-is and press Start — the defaults scrape a real profile and its posts, so you can see the output shape immediately.
  3. Replace the handle with the accounts you care about.
  4. Download from the Storage tab as JSON, CSV, Excel, XML or HTML.

Handles are flexible. All three of these work:

alice.bsky.social
@alice.bsky.social
https://bsky.app/profile/alice.bsky.social

Input

FieldTypeDefaultWhat it does
handlesarray["bsky.app"]Accounts to scrape. Handle, @handle or profile URL.
scrapeProfilesbooleantrueReturn the profile record for each handle.
scrapePostsbooleantrueReturn posts from each handle's feed.
maxPostsPerHandleinteger100Cap on posts per handle. 0 skips posts.
scrapeFollowersbooleanfalseReturn each handle's followers.
maxFollowersPerHandleinteger500Cap on followers per handle.
scrapeFollowingbooleanfalseReturn accounts each handle follows.
maxFollowingPerHandleinteger500Cap on following per handle.
searchTermsarray[]Keyword post search across all of Bluesky. Requires login.
maxPostsPerSearchinteger100Cap on results per search term.
searchPeopleTermsarray[]Find accounts by keyword. No login needed.
maxPeoplePerSearchinteger50Cap on accounts per people-search term.
blueskyIdentifierstringYour Bluesky handle. Only for keyword post search.
blueskyAppPasswordstringA Bluesky app password. Only for keyword post search.

Example input

Brand monitoring plus a competitor's audience:

{
"handles": ["competitor.bsky.social"],
"scrapeProfiles": true,
"scrapePosts": true,
"maxPostsPerHandle": 200,
"scrapeFollowers": true,
"maxFollowersPerHandle": 2000,
"searchTerms": ["your brand name", "yourproduct"],
"maxPostsPerSearch": 500,
"blueskyIdentifier": "you.bsky.social",
"blueskyAppPassword": "xxxx-xxxx-xxxx-xxxx"
}

Why keyword search needs a login

Bluesky serves profiles, posts, followers and people search anonymously. Post search is the one endpoint that requires an authenticated session — that is Bluesky's rule, not this scraper's.

If you want keyword search, create an app password:

Bluesky → Settings → Privacy and Security → App Passwords → Add App Password

Use that, never your real password. An app password cannot change your account email or password, and you can revoke it at any time. It is stored as a secret input and never written to the dataset or logs.

Everything else works with no credentials at all.


FAQ

Do I need a Bluesky API key? No. The AT Protocol serves public data without authentication. Only keyword post search needs a login, and that uses a revocable app password.

Is scraping Bluesky legal? This scraper reads only public data through Bluesky's own public API, which is an open protocol explicitly designed for third-party clients and interoperability. It does not bypass logins, solve CAPTCHAs, or touch private data. As always, how you use exported data — especially personal data under GDPR or India's DPDP Act — is your responsibility.

How is this different from scraping Twitter/X or Reddit? Both now charge for API access and actively block scrapers. Bluesky's public API is free and open by design, which makes Bluesky data cheaper and more reliable to collect.

How many posts can I get per account? Up to 10,000 per handle per run. For more, split by handle across runs.

Can I get posts from a private account? No. Only public data is available.

What formats can I export? JSON, CSV, Excel, XML, HTML, or straight from the Apify API into your own app.

Can I run this on a schedule? Yes — use Apify Schedules to run it daily or hourly and build a growing dataset. Combine with webhooks to push new mentions into Slack, Google Sheets or your database.

Does it handle rate limits? Yes. Requests are throttled well below Bluesky's limit, and 429 responses are retried with exponential backoff, honouring the ratelimit-reset header.

Will it break when Bluesky changes? It reads versioned AT Protocol endpoints rather than parsing HTML, which is far more stable than page scraping. Report an issue and it gets fixed.


Output fields

Posts: uri, cid, url, authorDid, authorHandle, authorDisplayName, text, lang, createdAt, indexedAt, replyCount, repostCount, likeCount, quoteCount, isReply, hashtags, mentions, links, embedType, images

Profiles, followers, following: did, handle, displayName, description, avatar, banner, followersCount, followsCount, postsCount, createdAt, indexedAt, url


Integrations

Send Bluesky data anywhere with Apify integrations: Google Sheets, Airtable, Slack, Zapier, Make, Google Drive, Amazon S3, or any webhook. Or call it from code with the Apify API, or the JavaScript and Python clients.


Support

Found a bug or need a field that isn't here? Open an issue on the Actor's Issues tab. Issues are usually answered within a few hours.