Bluesky Scraper
Pricing
Pay per event
Bluesky Scraper
Fast, low-cost scraper for Bluesky (AT Protocol). Extract posts, profiles, followers, and search results. HTTP-only, no browser needed.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Samy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Share
Fast, low-cost scraper for Bluesky social network using the AT Protocol public API. Extracts posts, profiles, followers, follows, and search results. HTTP-only — no browser or headless rendering needed.
Why this scraper is cheap
Bluesky's AT Protocol exposes a fully public, unauthenticated API with generous rate limits (~3000 requests per 5 minutes). No proxy is required, no login needed, no anti-bot measures to bypass. This means:
- $0 proxy cost — direct HTTP requests
- 256 MB memory — no browser overhead
- ~1000 results per $0.01 of compute
Supported Actions
getProfiles
Fetch detailed profiles for a list of handles or DIDs.
Input:
{"action": "getProfiles","handles": ["jay.bsky.team", "bsky.app"]}
searchPosts
Search for posts matching a query.
Input:
{"action": "searchPosts","searchQuery": "artificial intelligence","sort": "top","maxResults": 500}
getAuthorFeed
Get posts from specific authors.
Input:
{"action": "getAuthorFeed","handles": ["jay.bsky.team"],"filter": "posts_no_replies","maxResults": 1000}
searchActors
Search for users/profiles.
Input:
{"action": "searchActors","searchQuery": "data scientist","maxResults": 200}
getFollowers
Get the followers of specified accounts.
Input:
{"action": "getFollowers","handles": ["jay.bsky.team"],"maxResults": 5000}
getFollows
Get accounts that the specified users follow.
Input:
{"action": "getFollows","handles": ["jay.bsky.team"],"maxResults": 5000}
getPostThread
Get a post and its replies (full thread).
Input:
{"action": "getPostThread","postUrls": ["https://bsky.app/profile/jay.bsky.team/post/3abc123","at://did:plc:abc123/app.bsky.feed.post/3xyz789"]}
Output Format
Profile output
{"type": "profile","did": "did:plc:...","handle": "jay.bsky.team","displayName": "Jay","description": "Building Bluesky","avatar": "https://...","followersCount": 150000,"followsCount": 500,"postsCount": 3200,"url": "https://bsky.app/profile/jay.bsky.team"}
Post output
{"type": "post","uri": "at://did:plc:.../app.bsky.feed.post/...","authorHandle": "jay.bsky.team","authorDisplayName": "Jay","text": "Hello world!","createdAt": "2024-01-15T10:30:00.000Z","likeCount": 42,"repostCount": 5,"replyCount": 3,"quoteCount": 1,"images": [],"hasMedia": false,"url": "https://bsky.app/profile/jay.bsky.team/post/3abc123"}
Input Configuration
| Field | Type | Description | Default |
|---|---|---|---|
action | enum | What to scrape (required) | — |
handles | string[] | Bluesky handles or DIDs | — |
searchQuery | string | Search term | — |
postUrls | string[] | Post URLs (bsky.app or at:// URIs) | — |
maxResults | integer | Max results per handle/query | 100 |
sort | enum | Sort order for searchPosts | "latest" |
filter | enum | Feed filter for getAuthorFeed | "posts_no_replies" |
proxy | object | Proxy config (not needed!) | No proxy |
Rate Limits
The AT Protocol public API allows ~3000 requests per 5 minutes. The scraper automatically:
- Adds a 50ms baseline delay between requests
- Handles 429 (Too Many Requests) with exponential backoff
- Retries on server errors (5xx)
Cost Estimation
| Action | 1000 items | Estimated cost |
|---|---|---|
| getProfiles | 1000 requests | ~$0.01 |
| searchPosts | 10 paginated requests | ~$0.001 |
| getAuthorFeed | 10 paginated requests | ~$0.001 |
| getFollowers | 10 paginated requests | ~$0.001 |
No proxy cost. No browser cost. Just HTTP requests to a public API.
Pay-per-event pricing
This actor uses Apify pay-per-event pricing with a small Actor start charge and per-result events. Current event prices:
| Event | Price |
|---|---|
apify-actor-start | $0.00005 |
profile | $0.00003 |
search-post | $0.00002 |
author-feed-post | $0.00002 |
search-actor | $0.00003 |
follower | $0.00003 |
follow | $0.00003 |
thread-post | $0.00002 |