Bluesky Scraper: Posts, Profiles & Followers avatar

Bluesky Scraper: Posts, Profiles & Followers

Pricing

from $0.80 / 1,000 posts

Go to Apify Store
Bluesky Scraper: Posts, Profiles & Followers

Bluesky Scraper: Posts, Profiles & Followers

Scrape Bluesky posts, profiles, reply threads, followers, custom feeds and lists as clean JSON, CSV or Excel. Official public API, no login. Date and language filters plus a new-items-only monitoring mode. $0.80 per 1,000 posts.

Pricing

from $0.80 / 1,000 posts

Rating

0.0

(0)

Developer

CleanFeed Data

CleanFeed Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Scrape Bluesky posts, profiles, followers and reply threads as clean, flat JSON/CSV/Excel: profiles, author feeds, post threads with replies, followers / following, custom feeds and lists. It uses only Bluesky's official public AppView API (public.api.bsky.app). No login, no cookies, no browser, and no keyword-search automation.

👉 Try it in one click: the input is prefilled with the official bsky.app account and capped at 25 items, so a first run takes seconds and costs about $0.03.

What does this Bluesky scraper do?

  • ✅ Profiles: bio, follower, following and post counts, avatar, created date, verification
  • ✅ Posts: text, likes, reposts, replies, quotes, images, video, links, hashtags, language
  • ✅ Reply threads for any post, with depth and parent author
  • ✅ Followers and following lists for audience research and lead lists
  • ✅ Custom feeds and lists (members or posts)
  • ✅ Only-new-items mode for scheduled monitoring of accounts, threads and followers
  • ✅ Runs on the Apify platform: API, scheduling, webhooks, and Slack, Google Sheets, Zapier, Make or n8n integrations

Use cases

  • Brand and creator monitoring: track what key accounts post and how it performs.
  • Audience research and lead generation: export the followers of accounts in your niche.
  • Community and newsrooms: follow replies to an announcement or a breaking-news thread.
  • Research and data science: collect posts from custom feeds and lists for analysis.
  • Social media reporting: pull engagement counts into Google Sheets or a dashboard every day.

What data can you get from Bluesky?

InputOutput
A profile (handle, DID or bsky.app/profile/… URL)The profile (bio, follower/following/post counts, avatar, banner, created date, verification), its recent posts (pinned post marked), and optionally followers and follows
A post URL or at:// URIThe post plus its whole reply tree, with depth and parent author. Optionally the parent posts above it
A custom feed URL (e.g. What's Hot)Posts in the feed's own ranking
A list URLList members (profiles), the list's post feed, or both

Paste any bsky.app link into Profiles and it is routed automatically: post links become threads, /feed/ links become feeds, and /lists/ links become lists. Duplicate inputs are processed once, even when one is a handle and another is a DID.

Post fields

url, uri, cid, postId, authorHandle, authorDid, authorDisplayName, authorAvatar, text, createdAt, indexedAt, langs, likeCount, repostCount, replyCount, quoteCount, bookmarkCount, isReply, replyParentUri, replyRootUri, replyParentAuthorHandle, isRepost, repostedByHandle, repostedAt, isPinned, isQuote, quotedPost, embedType, images[] (full-size URL, thumbnail, alt text, aspect ratio), video (HLS playlist, thumbnail), externalLink (link card), mentions (DIDs), links, hashtags, labels, threadDepth, sourceType, source, isNew, firstSeenAt, scrapedAt.

Profile fields

url, did, handle, displayName, description, avatar, banner, followersCount, followsCount, postsCount, createdAt, verified, pinnedPostUri, listsCount, feedsCount, starterPacksCount, isLabeler, labels, relation (self / follower / follow / list-member), sourceType, source, isNew, firstSeenAt, scrapedAt.

Follower, follow and list-member rows come from Bluesky's list endpoints. Those endpoints don't include counts, so the count fields on those rows are null; the profiles you put in Profiles have full counts.

How to scrape Bluesky

  1. Click Try for free (or Start) and open the Input tab.
  2. In Profiles, paste handles (bsky.app), profile links, or any post, feed or list link.
  3. Choose how many posts per profile, and optionally followers, threads, date or language filters.
  4. Set Max results to 0 for full runs, or keep a cap while you test.
  5. Click Start, then download the data as JSON, CSV or Excel, or use the API.
  6. For monitoring, turn on Only new items and add a schedule.

Example input

{
"profiles": ["bsky.app", "https://bsky.app/profile/jay.bsky.team"],
"posts": ["https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l"],
"feeds": ["https://bsky.app/profile/bsky.app/feed/whats-hot"],
"postsPerProfile": 100,
"maxFollowersPerProfile": 500,
"postedWithinDays": 30
}

Example output

Real items from a run on the bsky.app profile (a few fields left out for space). A post:

{
"itemType": "post",
"url": "https://bsky.app/profile/bsky.app/post/3mgdifcgakc2e",
"postId": "3mgdifcgakc2e",
"authorHandle": "bsky.app",
"authorDisplayName": "Bluesky",
"text": "v1.118 rolls out today!\n\nNew in this update: You can now translate posts without leaving the app.\n\nSimply tap \"translate\" on mobile and your phone's built-in translation takes it from there.",
"createdAt": "2026-03-05T19:03:11.893Z",
"langs": [
"en"
],
"likeCount": 5918,
"repostCount": 1030,
"replyCount": 280,
"quoteCount": 340,
"bookmarkCount": 124,
"isReply": false,
"isRepost": false,
"isPinned": false,
"embedType": "images",
"images": [
{
"url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreieemkkxghh3rnfm374crqr7b42cg5blhp6qb26kt3n4yhwnblw2ya",
"alt": "A screenshot of the Bluesky app demonstrating how you can now tap the \"Translate\" button…"
}
],
"hashtags": [],
"sourceType": "profile",
"source": "bsky.app",
"isNew": true,
"scrapedAt": "2026-10-31T05:13:09.881Z"
}

A profile:

{
"itemType": "profile",
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"handle": "bsky.app",
"displayName": "Bluesky",
"description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
"url": "https://bsky.app/profile/bsky.app",
"followersCount": 35460128,
"followsCount": 32,
"postsCount": 907,
"createdAt": "2023-04-12T04:53:57.057Z",
"starterPacksCount": 15,
"relation": "self",
"sourceType": "profile",
"source": "bsky.app"
}

Filters

  • Author feed filter: posts only, posts and replies, posts and self-threads, media only, or video only.
  • Include reposts and include pinned post toggles.
  • Date window: Posted on or after, Posted on or before, or Posted within last N days. Author feeds stop paginating as soon as they pass the start date, so you don't pay for pages you don't need.
  • Languages: keep only posts tagged e.g. en or ja.
  • Limits: a cap per source (posts, followers, replies, members), plus Max results, a total that is split fairly across sources so one big account can't crowd out the rest.

Monitoring: only new posts and followers

Turn on Only new items and schedule the actor (for example hourly). Each run outputs only posts and profiles that earlier runs with the same State store name didn't output. That covers new posts, new replies in a thread, new followers, and new list members. Author feeds and follower lists stop paginating at the first page that is entirely already seen, so repeat runs are cheap. Each item also carries isNew and firstSeenAt, even when the mode is off. Use a different state store name for each monitoring job.

How much does it cost to scrape Bluesky?

EventPrice
Actor start (once per run, 512 MB default)$0.005
Post written to the dataset$0.0008 ($0.80 per 1,000)
Profile written to the dataset$0.0005 ($0.50 per 1,000)

You pay only for items actually written. Filtered-out, duplicate and already-seen items are free. Writes are batched and charged exactly, and the run stops cleanly at your maximum cost per run. Example: 1,000 posts plus 10 profiles cost about $0.81.

Rate limits and good citizenship

  • Requests go through one shared polite limiter, 4 requests/s by default. Bluesky publishes a limit of 3,000 requests per 5 minutes per IP for the public AppView. HTTP 429 responses are retried after the RateLimit-Reset / Retry-After time, and 5xx errors get exponential backoff.
  • No keyword search. Bluesky has asked developers not to automate its search endpoint, so this actor doesn't do it. Use custom feeds, lists or accounts instead.
  • Opt-outs are respected. Accounts that set "Discourage apps from showing my account to logged-out users" carry the !no-unauthenticated label. They are skipped wherever they appear and counted in RUN_SUMMARY as skippedOptOut.

Run summary

The default key-value store has a RUN_SUMMARY record. For each source it shows fetched, matched, new, quota and output counts, opt-out skips and errors, plus input errors and HTTP stats. Bad or missing inputs are reported there and don't fail the run.

FAQ

Do I need a Bluesky account or login? No. Everything comes from Bluesky's public API that serves logged-out visitors.

Can I search Bluesky posts by keyword? Not with this Actor. Bluesky has asked developers not to automate its search endpoint, so we don't. Use custom feeds (many topic feeds exist), lists or accounts instead.

How many followers can I export? Set Max followers per profile. Large accounts can have millions; the run pages through them politely and you pay $0.50 per 1,000 profiles.

Can I export to CSV or Google Sheets? Yes. Download any dataset as CSV, Excel or JSON, or send it to Google Sheets with Apify's integration.

How many posts can I get on the free plan? Apify's free plan includes $5 of monthly usage, which covers about 6,000 posts with this Actor.

Why was an account skipped? Accounts that ask apps not to show them to logged-out users are skipped on purpose and counted as skippedOptOut in RUN_SUMMARY.

More scrapers from cleanfeed-data

All of our Actors use only official, documented public APIs and feeds, charge only for results, and have a new-items-only monitoring mode.

ActorWhat it does
Greenhouse, Lever & Ashby Jobs ScraperEvery open job from company career pages on 8 ATSs, with new-job alerts
App Store Reviews ScraperApple App Store reviews from many countries, with sentiment and topic tags

This actor only reads data that Bluesky's official public API serves to anyone without logging in. It does not log in or get around any access control, and it honours account opt-out labels. You are responsible for how you use the data. Comply with the Bluesky Terms of Service, the Bluesky developer guidelines, and applicable privacy laws (e.g. GDPR/CCPA) when you store or process personal data. Honour deletions: if you keep data long term, re-check it and delete posts or accounts that have been removed. Don't use the data for spam, harassment, surveillance of individuals, or to train models against users' stated wishes. This actor is not affiliated with or endorsed by Bluesky Social PBC.