Bluesky Scraper (Profiles, Posts, Followers, Feeds) avatar

Bluesky Scraper (Profiles, Posts, Followers, Feeds)

Pricing

from $2.10 / 1,000 results

Go to Apify Store
Bluesky Scraper (Profiles, Posts, Followers, Feeds)

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

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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 userssearchActors for 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 typeOne perCarries
SEARCH_SUMMARYwork unit (account / query / post / feed)rowsReturned, requestsMade, truncated, context (subject / query / rootUri / feedUri …)
PROFILEaccountdid, handle, displayName, description, counts, verifiedStatus, labels, profileUrl, relation (self / follower / follows / search-result / reposted-by / liked-by)
POSTposturi, rkey, author, text, langs, likeCount / repostCount / replyCount / quoteCount / bookmarkCount, isReply + reply refs, embedType + images / external link / quoted post, facetLinks, hashtags, feedReason, postUrl
ERRORbad 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

ModeNeeds
profilesidentifiershandles, DIDs or profile URLs; batched 25 per request
author-postsidentifiersfeedFilter (validated — see below)
followers / followingidentifiersmaxItems per account
search-userssearchQueriesmaxItems per query
threadpostUrispost URLs or at:// URIs; threadDepth, threadParentHeight
post-engagementpostUrisengagementType = likes / reposts / quotes
feedfeedUrisfeed-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

{"error":"InvalidRequest","message":"Profile not found"}
; a missing post is 400
{"error":"NotFound","message":"Post not found: <uri>"}
— a different error name at the same status. Both become 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.