Bluesky Scraper - Posts, Profiles & Search
Pricing
Pay per usage
Bluesky Scraper - Posts, Profiles & Search
Scrape Bluesky posts, profiles, search, threads & followers via the public AT Protocol. Clean flat JSON/CSV with image alt-text & quoted posts. No login.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Radosław Szal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Bluesky Posts, Profiles & Search Scraper (AT Protocol)
🔗 Part of the Apify actors collection — 6 reliable, tested scrapers & data tools.
Export Bluesky data at scale — posts, profiles, keyword search, full reply threads and follower graphs — as clean JSON, CSV or Excel. Built directly on the public AT Protocol, so scraping public posts and profiles needs no login.
One actor, seven jobs. No browser, no proxies, no fragile HTML parsing — just the official protocol Bluesky itself runs on.
What you can scrape
| Mode | What it does | Login? |
|---|---|---|
| Author posts | Every post from one or more accounts (with replies / media filters) | No |
| Search posts | Keyword search across all of Bluesky (date, language, author, hashtag filters) | App password |
| Profiles | Full profile details for given accounts | No |
| Search profiles | Find accounts by keyword | No |
| Post thread | The complete reply tree under a post | No |
| Followers | An account's followers | No |
| Follows | Who an account follows | No |
Only keyword post search needs an app password (Bluesky doesn't serve that endpoint anonymously). Everything else runs on the public AppView out of the box.
Why this scraper
- Clean, flat, stable schema — not a raw API dump. Engagement counts,
hashtags, mentions, links and media are pulled up to top-level fields, and
every post gets a real
https://bsky.app/...URL you can click. - Richer than the rest — we extract image alt-text (great for AI, search
and accessibility), pull out the quoted post in full when a post quotes
another, and flag unresolved handles (
handleResolved) with a working profile URL either way. Details other scrapers quietly drop. - Everything in one actor — posts, profiles, search, threads and the social graph. No juggling five different tools.
- Monitoring built in — flip on
onlyNewand any scrape becomes a change monitor: each scheduled run returns only posts you haven't seen yet. Wire it to a Bluesky mention search and you have brand-alert / social-listening on a timer. - Predictable pricing — pay per result, flat. No surprise "compute unit" bills.
- No proxies to configure — the AT Protocol AppView serves public data directly.
Quick start
Get a user's latest posts (no login):
{"mode": "author_posts","handles": ["nytimes.com", "bsky.app"],"maxItems": 100}
Search posts by keyword (needs an app password — see below):
{"mode": "search_posts","searchQuery": "electric vehicles","lang": "en","since": "2026-07-01","sort": "latest","maxItems": 500,"blueskyIdentifier": "you.bsky.social","blueskyAppPassword": "<your-app-password>"}
Monitor mentions of your brand (schedule it, e.g. hourly):
{"mode": "search_posts","searchQuery": "\"YourBrand\"","onlyNew": true,"stateKey": "yourbrand-mentions","blueskyIdentifier": "you.bsky.social","blueskyAppPassword": "<your-app-password>"}
Get the full thread under a post (no login):
{"mode": "post_thread","postUrls": ["https://bsky.app/profile/bsky.app/post/3l..."],"threadDepth": 6}
How to get a Bluesky app password (for post search only)
- Open Bluesky → Settings → Privacy and Security → App Passwords.
- Add App Password, name it (e.g. "Apify"), copy the generated value (format
xxxx-xxxx-xxxx-xxxx). - Paste your handle into Bluesky handle and the value into Bluesky app password.
An app password is revocable and scoped — it is not your main password. It is
only ever sent to Bluesky's own createSession endpoint to sign in, and is never
stored in the dataset or logs.
Output
Each post record:
{"uri": "at://did:plc:.../app.bsky.feed.post/3l...","url": "https://bsky.app/profile/handle/post/3l...","cid": "bafy...","text": "the post text","createdAt": "2026-07-20T10:00:00.000Z","indexedAt": "2026-07-20T10:00:01.000Z","langs": ["en"],"author": { "did": "did:plc:...", "handle": "handle", "displayName": "Name", "avatar": "https://..." },"likeCount": 6512, "repostCount": 539, "replyCount": 88, "quoteCount": 12, "bookmarkCount": 4,"author": { "did": "did:plc:...", "handle": "handle", "handleResolved": true, "displayName": "Name", "avatar": "https://..." },"hashtags": ["climate"], "mentions": ["did:plc:..."], "links": ["https://..."],"embedType": "images","media": [{ "url": "https://...", "alt": "a solar farm at sunset", "type": "image" }],"quotedPost": { "uri": "at://...", "url": "https://bsky.app/profile/.../post/...", "author": "quoted.handle", "text": "the quoted post" },"external": null,"isReply": false, "isRepost": false, "replyParent": null, "replyRoot": null,"labels": []}
Note the richness most scrapers skip: image alt-text (
media[].alt— the author's own description of each image), the quoted post pulled out in full (quotedPost), andhandleResolvedso you can tell verified handles from unresolved ones (handle.invalid) — with a working profile URL either way.
Each profile record:
did, handle, handleResolved, url, displayName, description, avatar, banner, followersCount, followsCount, postsCount, createdAt, indexedAt, labelsDownload from the run's Dataset tab as JSON, CSV, Excel, or pull via the Apify API.
Pricing
Pay per result — you are charged for each record delivered (result-item),
flat, regardless of how many pages were walked to find it. The first few seconds
of every run are free, so you can test inputs at no cost.
Common uses
- Social listening / brand monitoring on the fastest-growing X alternative.
- Clean, ethically-sourced datasets for AI / research (public data, open protocol).
- Tracking accounts, hashtags and topics as Bluesky adoption grows.
- Lead and community research — find and profile accounts around a topic.
Notes & fair use
- Reads only public data through the official public AT Protocol AppView. No private posts, no logged-in-only content, no fake accounts.
- Respects the API: automatic backoff on rate limits and transient errors.
- You are responsible for using exported data in line with Bluesky's terms and applicable law (e.g. GDPR when handling personal data).
Built on the AT Protocol (app.bsky.*). Keywords: bluesky scraper, bluesky api,
at protocol scraper, scrape bluesky posts, bluesky profile scraper, bluesky search,
social media scraper, bluesky data export.