Bluesky Scraper (Profiles, Posts, Followers, Feeds)
Pricing
from $2.10 / 1,000 results
Bluesky Scraper (Profiles, Posts, Followers, Feeds)
Scrape Bluesky (AT Protocol) with no login and no API key. Full profiles, a user's post timeline with engagement counts, followers and following, account search, a post's full reply thread, the accounts that liked/reposted/quoted a post, and every post in a custom feed or curated list.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Scrape Bluesky / the AT Protocol with no login and
no API key. This Actor only calls methods the public AppView
(public.api.bsky.app) serves to anonymous clients — every other Bluesky
scraper on the Store signs in with an app password.
- Profiles — full profile for each handle / DID (follower & post counts, bio, avatar, verification, list/feed counts, pinned post)
- Author posts — a user's timeline with per-post engagement counts, embeds, links, hashtags, reply refs
- Followers / Following — the follow graph for each account
- Search users —
searchActorsfor each query - Thread — a post plus its full reply tree, flattened with a depth column
- Post engagement — the accounts that liked or reposted a post, or the posts that quoted it
- Feed — every post in a custom feed generator or a curated list (auto-detected)
| Record type | One per | Carries |
|---|---|---|
SEARCH_SUMMARY | work unit (account / query / post / feed) | rowsReturned, requestsMade, truncated, context (subject / query / rootUri / feedUri …) |
PROFILE | account | did, handle, displayName, description, counts, verifiedStatus, labels, profileUrl, relation (self / follower / follows / search-result / reposted-by / liked-by) |
POST | post | uri, rkey, author, text, langs, likeCount / repostCount / replyCount / quoteCount / bookmarkCount, isReply + reply refs, embedType + images / external link / quoted post, facetLinks, hashtags, feedReason, postUrl |
ERROR | bad input / missing account or post | _error + _errorDetail |
Every PROFILE / POST row keeps the verbatim AppView object in raw (turn
off with slimOutput).
Inputs by mode
| Mode | Needs | |
|---|---|---|
profiles | identifiers | handles, DIDs or profile URLs; batched 25 per request |
author-posts | identifiers | feedFilter (validated — see below) |
followers / following | identifiers | maxItems per account |
search-users | searchQueries | maxItems per query |
thread | postUris | post URLs or at:// URIs; threadDepth, threadParentHeight |
post-engagement | postUris | engagementType = likes / reposts / quotes |
feed | feedUris | feed-generator or list URLs / URIs |
Things the AppView will mislead you about
Each is measured, and each has a scenario in
tests/smoke/bluesky-scraper_traps.sh (14/14 passing).
Full-text post search (searchPosts) is NOT available to anonymous
clients. It returns a 403 HTML block page, not an XRPC error, on every
endpoint and TLS profile. Post discovery here is via author-posts (a user's
timeline) and feed (any custom feed or list) — both work unauthenticated.
An unknown feedFilter is SILENTLY IGNORED by Bluesky (HTTP 200, default
feed). This Actor rejects an unknown value before spending a request.
A missing account is 400 400 not_found rows.
getFollowers / getFollows silently drop tombstoned accounts, so a
request for 100 can return ~90 — the Actor keeps paging on the cursor until it
has maxItems or the feed ends (which is why a large follower pull takes more
requests than ceil(maxItems / 100)).
Counts live on the post, text lives on post.record. limit caps at 100;
getProfiles / getPosts batch at 25. A feed item is a {post, reason?}
wrapper — a repost is recorded as feedReason: repost with feedReasonBy.
Notes on cost
One request per 25 profiles; one request per 100 rows for the paged modes (more when tombstones shrink pages); one request per thread. No proxy needed — the public AppView has no anti-bot layer.