Bluesky Scraper avatar

Bluesky Scraper

Pricing

Pay per event

Go to Apify Store
Bluesky Scraper

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

Samy

Maintained by Community

Actor 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

FieldTypeDescriptionDefault
actionenumWhat to scrape (required)
handlesstring[]Bluesky handles or DIDs
searchQuerystringSearch term
postUrlsstring[]Post URLs (bsky.app or at:// URIs)
maxResultsintegerMax results per handle/query100
sortenumSort order for searchPosts"latest"
filterenumFeed filter for getAuthorFeed"posts_no_replies"
proxyobjectProxy 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

Action1000 itemsEstimated cost
getProfiles1000 requests~$0.01
searchPosts10 paginated requests~$0.001
getAuthorFeed10 paginated requests~$0.001
getFollowers10 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:

EventPrice
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