Bluesky Scraper — Profiles, Posts, Followers (AT Protocol)
Pricing
from $2.00 / 1,000 profile scrapeds
Bluesky Scraper — Profiles, Posts, Followers (AT Protocol)
Extract Bluesky profiles, posts, follower/following graphs, starter-pack members, and custom feeds via the public AT Protocol API. No login. One normalized output.
Pricing
from $2.00 / 1,000 profile scrapeds
Rating
0.0
(0)
Developer
Max Miller
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Share
Bluesky Scraper — Profiles, Posts, Followers, Starter Packs & Feeds (AT Protocol)
Scrape Bluesky at scale — no login, no API key, no rate-limit headaches. Pull profiles, posts, follower and following graphs, starter-pack members, and custom-feed contents from Bluesky (bsky.app) through the official public AT Protocol API. Every mode returns one clean, normalized record shape ready for CSV, Excel, JSON, or your database.
Built for growth teams, researchers, and analysts who need Bluesky data now that X's API costs $100+/month. This is the only Bluesky actor that unifies profiles, posts, social graph, starter packs, and custom feeds in a single tool.
Why this Bluesky scraper
- No authentication. It reads public data through Bluesky's public AppView. Nothing to log in to, no tokens to rotate, no account to get banned.
- Fast and cheap. Pure REST — no headless browser — so runs finish in seconds and cost pennies.
- One schema for everything. Profiles, posts, followers, following, starter-pack members, and feed posts all normalize into the same row format. No reshaping downstream.
- Handles the messy parts. Cursor pagination, deleted/suspended accounts, and rate limits are handled for you. A bad handle never kills a run.
Use cases
Brand & competitor monitoring
Track any account's posts and engagement (likes, reposts, replies, quotes) over time. Watch competitors' follower growth. Pull a brand's latest posts into your dashboard or alerting.
Follower & audience analysis
Export the full follower or following list for any account to find overlap, spot influencers, size an audience, or build lookalike lists. Combine with the profiles mode to enrich each account with bio, follower count, and verification status.
Starter-pack & community research
Extract every member of any Bluesky starter pack — the fastest way to map a niche community or build a targeted outreach list. Great for finding the accounts that matter in a topic.
Trend & feed research
Pull the contents of any custom feed (e.g. "What's Hot") to study what's trending, harvest content ideas, or feed a research pipeline.
Academic & data science
Collect structured social-graph and post data for network analysis, NLP, or social-science research — reproducibly and at low cost.
Input
| Field | Type | Description |
|---|---|---|
mode | select | profiles · posts · followers · following · starterpack · feed |
handles | string[] | Handles (bsky.app) or DIDs (did:plc:...). @ and profile URLs accepted. |
maxItemsPerHandle | integer | Cap on records per handle (posts / followers / following / pack members). Default 100. |
feedUris | string[] | Custom-feed AT-URIs — only for feed mode. If empty, the actor discovers feeds published by handles. |
Example input
{"mode": "followers","handles": ["bsky.app", "jay.bsky.team"],"maxItemsPerHandle": 1000}
Get an account's recent posts with engagement:
{ "mode": "posts", "handles": ["bsky.app"], "maxItemsPerHandle": 200 }
Pull every member of an account's starter packs:
{ "mode": "starterpack", "handles": ["pfrazee.com"], "maxItemsPerHandle": 500 }
Scrape a custom feed:
{"mode": "feed","feedUris": ["at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot"],"maxItemsPerHandle": 100}
Output
Every dataset row has the same top-level shape. recordType tells you which detail
object (profile, post, or starterpack) is populated; the others are null.
Profile record (profiles / followers / following / starter-pack members)
{"recordType": "profile","mode": "followers","sourceActor": "bsky.app","scrapedAt": "2026-08-10T22:14:03.000Z","status": "ok","error": null,"profile": {"did": "did:plc:z72i7hdynmk6r22z27h6tvur","handle": "bsky.app","displayName": "Bluesky","description": "official bluesky account…","avatar": "https://cdn.bsky.app/…","banner": "https://cdn.bsky.app/…","followersCount": 34467337,"followsCount": 11,"postsCount": 806,"createdAt": "2023-04-12T04:53:57.057Z","indexedAt": "2025-…","labels": [],"verified": false,"profileUrl": "https://bsky.app/profile/bsky.app"},"post": null,"starterpack": null}
Note:
followers/followingreturn Bluesky's basic profile view, sofollowersCountandpostsCountarenullfor those rows. Runprofilesmode on the handles to enrich them with full counts.
Post record (posts / feed)
{"recordType": "post","mode": "posts","sourceActor": "bsky.app","status": "ok","post": {"uri": "at://did:plc:z72…/app.bsky.feed.post/3msqpusnigc2t","cid": "bafy…","rkey": "3msqpusnigc2t","webUrl": "https://bsky.app/profile/bsky.app/post/3msqpusnigc2t","text": "We also added thread numbering…","createdAt": "2026-08-06T…","langs": ["en"],"author": { "did": "did:plc:z72…", "handle": "bsky.app", "displayName": "Bluesky" },"replyCount": 52,"repostCount": 215,"likeCount": 1489,"quoteCount": 8,"bookmarkCount": 3,"isReply": false,"isRepost": false,"hasMedia": true,"labels": []}}
Starter-pack record (starterpack)
{"recordType": "starterpack","mode": "starterpack","sourceActor": "pfrazee.com","starterpack": {"uri": "at://…/app.bsky.graph.starterpack/3m4j33zq7sz2m","name": "Great people to be moots with","creatorHandle": "pfrazee.com","listUri": "at://…/app.bsky.graph.list/3m4j33zj5u62u","joinedAllTimeCount": 412,"webUrl": "https://bsky.app/starter-pack/pfrazee.com/3m4j33zq7sz2m"}}
A starterpack run emits one starterpack record per pack plus a profile record for
each pack member, so you get the summary and the full membership in one dataset.
Errors are data, not failures
If a handle is deleted, suspended, or never existed, you get a row with
"status": "not_found" instead of a crashed run:
{ "recordType": "error", "sourceActor": "gone.bsky.social", "status": "not_found", "error": "Profile not found" }
Pricing
Pay-per-result (pay-per-event): you're charged per record returned plus a small per-run start fee. API-only compute keeps costs low. See the pricing tab for current rates.
Legal & compliance
This actor reads only public data through Bluesky's official public AT Protocol endpoints — the same data any logged-out visitor can see at bsky.app. It performs no login, accesses no private content, and takes no authenticated actions. Respect Bluesky's Terms of Service and applicable data-protection law (GDPR/CCPA) when processing personal data.
FAQ
Do I need a Bluesky account? No. It uses the public API.
Can it scrape private accounts? Bluesky has no private profiles on the public AppView; only public data is available.
How do I get a feed's AT-URI? Open the feed on bsky.app — or leave feedUris empty and
pass the creator's handle in handles to auto-discover their feeds.
What's the max? maxItemsPerHandle controls the cap. Pagination handles accounts with
millions of followers; set the cap to sample large accounts cheaply.
Keywords: Bluesky scraper, Bluesky API, AT Protocol data, Bluesky analytics, Bluesky followers export, Bluesky posts scraper, social media scraper, bsky.app data extraction.