Bluesky Scraper avatar

Bluesky Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Bluesky Scraper

Bluesky Scraper

Scrapes public Bluesky profiles, posts, post threads, and search results into a clean dataset.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Anyx Solutions

Anyx Solutions

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

banner

Bluesky Scraper

Pull Bluesky profiles, posts, threads, and keyword search results into a clean dataset — no login required.

Scrapes public Bluesky profiles, posts, post threads, and search results into a clean dataset. Point it at a profile to get the account's stats and latest posts, at a single post to capture it with its replies, or at a search to collect every post matching a keyword. Built for social-listening teams, researchers, marketers, and anyone tracking conversations on Bluesky without wiring up the AT Protocol themselves.

⚡ Quick start

{
"startUrls": [
{ "url": "https://bsky.app/profile/bsky.app" },
{ "url": "https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l" }
],
"searchQueries": ["nvidia"],
"maxItems": 5
}

🧩 Input

FieldTypeRequiredDefaultDescription
startUrlsarrayno—Public bsky.app URLs to scrape. Supported: a profile (https://bsky.app/profile/bsky.app) returns the profile plus its latest posts; a post (https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l) returns the post and its replies; a search page (https://bsky.app/search?q=nvidia) returns matching posts.
searchQueriesarrayno—Free-text searches to run in addition to Start URLs, one per line. Each query is scraped like a https://bsky.app/search?q=... page, e.g. "nvidia" or "climate change".
maxItemsintegerno5Maximum number of dataset items to return per start URL or search query. For a profile URL the profile row itself counts as one item.
proxyConfigurationobjectno{ "useApifyProxy": true }Apify proxy settings used for the run. Profiles and threads work from any IP, but Bluesky search rejects cloud IPs, so datacenter Apify Proxy is on by default.

📤 Output

Every row carries an itemType of either profile or post. A profile start URL pushes one profile row followed by the account's most recent posts (newest first, reposts flagged). A post start URL pushes the post itself first, then its replies in the order they appear on the site. Search pages push matching posts, newest first.

Fields

FieldTypeDescription
itemTypestringprofile or post.
didstringProfile rows: the account's permanent decentralised identifier.
handlestringProfile rows: the account handle, e.g. bsky.app.
displayNamestringProfile rows: display name, or null.
descriptionstringProfile rows: bio text, or null.
avatarstringProfile rows: avatar image URL, or null.
bannerstringProfile rows: banner image URL, or null.
followersCountintegerProfile rows: number of followers.
followsCountintegerProfile rows: number of accounts followed.
postsCountintegerProfile rows: total posts by the account.
createdAtstringISO timestamp — account creation for profiles, post time for posts.
urlstringPublic bsky.app URL of the profile or post.
uristringPost rows: the post's at:// URI.
cidstringPost rows: content identifier of the post record.
textstringPost rows: post text, or null.
authorobjectPost rows: { did, handle, displayName, avatar } of the poster.
replyCountintegerPost rows: number of replies.
repostCountintegerPost rows: number of reposts.
likeCountintegerPost rows: number of likes.
quoteCountintegerPost rows: number of quote posts.
langsarrayPost rows: language tags declared on the post, e.g. ["en"].
imagesarrayPost rows: attached images as { url, alt } (full-size URLs).
externalLinkobjectPost rows: link card as { uri, title, description }, or null.
isReplybooleanPost rows: true when the post replies to another post.
replyRootUristringPost rows: at:// URI of the thread root when isReply is true, else null.
isRepostbooleanPost rows: true when the row appears in a profile feed because the account reposted it.
indexedAtstringPost rows: ISO timestamp when the network indexed the post.

💡 Use cases

  • Social listening — track every post mentioning your brand, product, or campaign keyword.
  • Influencer and account research — pull follower counts, bios, and recent posts for a list of handles.
  • Thread archiving — capture a viral post together with its replies for analysis or moderation review.
  • Content and sentiment analysis — feed post text, languages, and engagement counts into your own pipeline.

❓ FAQ

  • Do I need a proxy? Profile and post URLs work without one. Search does not — Bluesky's search service refuses requests from cloud IPs — so the default keeps inexpensive datacenter Apify Proxy on. Switch it off if you only scrape profiles and threads.
  • How many results can I get? maxItems caps results per start URL or search query. Add more start URLs or queries to widen coverage.
  • Does a profile URL include reposts? Yes — reposted posts appear in the feed with isRepost: true, and the original author is kept in author.
  • Can I use a handle instead of a URL? Use the profile URL form https://bsky.app/profile/<handle>; custom-domain handles and did:plc: identifiers both work in place of <handle>.
  • Why did a run return fewer items than expected? Private or deleted accounts return nothing, and search only covers posts the network has indexed. If a public account returns zero posts, open an issue and we will update the Actor.

🔗 More scrapers by Anyx

🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.