Bluesky Scraper
Pricing
Pay per usage
Go to Apify Store
Bluesky Scraper
Scrape Bluesky social network posts, profiles, followers, and search results. Extract engagement metrics, hashtags, and user data via the open AT Protocol API.
Scrape Bluesky social network posts, profiles, followers, and search results via the open AT Protocol API. No authentication required — Bluesky's public API is fully open.
Features
- Search Posts — Find posts by keyword with date range filters, language filter, and sort order
- Search Users — Find user accounts by keyword
- User Profile — Fetch detailed profiles for one or more handles (batched, up to 25 at a time)
- User Posts — Get all recent posts from a specific user
- Post Thread — Fetch a full post thread including all replies
- Followers — Get the followers list for a user
- Following — Get the accounts a user follows
Input Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
mode | select | Scrape mode (see options below) | searchPosts |
query | string | Search keyword or phrase | artificial intelligence |
handles | string[] | Bluesky handles (e.g. jay.bsky.team) | [] |
postUri | string | AT Protocol URI for postThread mode | "" |
sort | select | latest or top (searchPosts only) | latest |
since | string | Start date ISO 8601 (searchPosts only) | "" |
until | string | End date ISO 8601 (searchPosts only) | "" |
lang | string | Language code filter, e.g. en (searchPosts only) | "" |
limit | integer | Max results (1–10000) | 100 |
proxyConfiguration | object | Optional proxy (not required) | {"useApifyProxy": false} |
Available Modes
| Mode | Description | Required Fields |
|---|---|---|
searchPosts | Search posts by keyword | query |
searchUsers | Search user accounts by keyword | query |
userProfile | Get profile details for specific handle(s) | handles |
userPosts | Get posts from a specific user | handles |
postThread | Get a post and all its replies | postUri |
followers | Get followers of a user | handles |
following | Get accounts a user follows | handles |
Output
Post Object
{"type": "post","uri": "at://did:plc:abc123/app.bsky.feed.post/xyz456","cid": "bafyreid...","text": "Excited about the future of AI on Bluesky! #AI #tech","createdAt": "2024-03-15T10:30:00.000Z","author": {"did": "did:plc:abc123","handle": "user.bsky.social","displayName": "Jane Doe","avatar": "https://cdn.bsky.app/img/avatar/...","followersCount": 1500},"handle": "user.bsky.social","displayName": "Jane Doe","avatar": "https://cdn.bsky.app/img/avatar/...","followersCount": 1500,"likeCount": 42,"replyCount": 7,"repostCount": 15,"quoteCount": 3,"hashtags": ["AI", "tech"],"mentions": ["did:plc:xyz789"],"links": ["https://example.com/article"],"embed": {"type": "external","url": "https://example.com/article","title": "Article Title","description": "Article description"},"labels": [],"scrapedAt": "2024-03-15T12:00:00.000Z"}
Profile Object
{"type": "profile","did": "did:plc:abc123","handle": "jay.bsky.team","displayName": "Jay Graber","description": "CEO of Bluesky. Building the AT Protocol.","avatar": "https://cdn.bsky.app/img/avatar/...","followersCount": 125000,"followsCount": 500,"postsCount": 3200,"createdAt": "2023-04-24T00:00:00.000Z","labels": [],"scrapedAt": "2024-03-15T12:00:00.000Z"}
Usage Examples
Search recent AI posts in English
{"mode": "searchPosts","query": "artificial intelligence","sort": "latest","lang": "en","limit": 500}
Search posts from a specific date range
{"mode": "searchPosts","query": "bluesky","since": "2024-01-01T00:00:00Z","until": "2024-03-01T00:00:00Z","sort": "top","limit": 200}
Get profiles for multiple users
{"mode": "userProfile","handles": ["jay.bsky.team", "atproto.com", "pfrazee.com"]}
Get all posts from a user
{"mode": "userPosts","handles": ["jay.bsky.team"],"limit": 500}
Fetch a full thread and all replies
{"mode": "postThread","postUri": "at://did:plc:abc123/app.bsky.feed.post/xyz456"}
Get followers of a user
{"mode": "followers","handles": ["atproto.com"],"limit": 1000}
Technical Notes
- No authentication required — Uses Bluesky's fully open public AT Protocol API
- No anti-bot protection — Direct HTTP requests via
got-scraping - Rate limits — 3,000 requests per 5 minutes per IP. The scraper automatically adds 100ms delays between requests and uses exponential backoff on 429 responses
- Pagination — Cursor-based pagination is handled automatically up to the specified
limit - Facets — Hashtags, mentions, and links are parsed from AT Protocol
facetsarrays in post records - Base URL —
https://public.api.bsky.app/xrpc/ - Billing — Pay-per-result (PPE) at $0.005/result
Data Sources
All data comes directly from the official Bluesky AT Protocol public API:
app.bsky.feed.searchPosts— Post searchapp.bsky.actor.searchActors— User searchapp.bsky.actor.getProfiles— Batch profile fetchapp.bsky.feed.getAuthorFeed— User's postsapp.bsky.feed.getPostThread— Full thread with repliesapp.bsky.graph.getFollowers— Follower listapp.bsky.graph.getFollows— Following list