Bluesky Profile Posts Scraper avatar

Bluesky Profile Posts Scraper

Pricing

$1.00 / 1,000 posts

Go to Apify Store
Bluesky Profile Posts Scraper

Bluesky Profile Posts Scraper

The Bluesky Profile Posts Scraper efficiently extracts posts from Bluesky profiles, capturing text content, images, videos, and engagement metrics. Ideal for social media analysis, trend tracking, and content monitoring.

Pricing

$1.00 / 1,000 posts

Rating

1.0

(1)

Developer

FalconScrape

FalconScrape

Maintained by Community

Actor stats

3

Bookmarked

74

Total users

5

Monthly active users

5 days ago

Last modified

Share

🚀 Bluesky Scraper: Posts, Profiles, Followers & Threads

The Bluesky Scraper exports Bluesky posts, profile stats, followers and full reply threads as clean JSON, CSV or Excel, with no login. Use it for Bluesky monitoring of brands and public figures, for Bluesky analytics on likes, reposts and follower growth, or as a no-code alternative to the Bluesky API.

One Actor, five modes:

  • Posts: every post from the profiles you list, newest first, with likes, reposts, replies, quotes, text, images, video, link cards and quoted posts. Reposts are flagged.
  • Profiles: follower, following and post counts, bio, join date, verification and pinned post for each profile.
  • Followers and Follows: the accounts following each profile, or followed by it, with handle, name and bio.
  • Threads: a post and all the replies Bluesky shows publicly, with who replied to whom.

Every row has a type field (post, reply, profile, follower, follows) and a url to open it on bsky.app.

🎯 Use Cases

  • Bluesky monitoring: schedule a daily run on brand, media or competitor accounts and catch every new post with its engagement.
  • Bluesky stats and analytics: track follower count, following count and post count per profile over time, and compare likes, reposts and replies per post.
  • Export Bluesky posts: pull a profile's full post history, or only posts since a date, into a spreadsheet or database.
  • Bluesky followers lists: export who follows an account, or who it follows, for audience research and community mapping.
  • Conversation analysis: collect every public reply to a viral post to study reactions and sentiment.

✨ Features

  • Engagement counts as numbers: likeCount, repostCount, replyCount and quoteCount on every post and reply.
  • Media and attachments: embed.type says what is attached (images, video, external, quote, quoteWithMedia). Image links (thumbnail and full size) with alt text and aspect ratio, video playlist and thumbnail links, link cards (and GIFs) with URL, title, description and thumbnail, and quoted posts with their link, author, text and date.
  • Reposts flagged: isRepost is true when the profile reposted someone else's post into its feed; author is then the original author and repostedBy the profile that reposted it.
  • Know which profile a row came from: of holds the profile (or thread URL) you entered, so runs over many profiles stay easy to split.
  • Date filter: postedAfter stops at the first post older than your date, so you pay only for new posts. It also takes relative values like 1 day or 7 days for scheduled runs.
  • Deep threads: long reply chains are followed to the end, and each reply carries replyTo and threadRoot (plus bsky.app links replyToUrl and threadRootUrl) so you can rebuild the tree.
  • No duplicates: a pinned post appears once, not again at its own date.
  • Max charge respected: the run stops saving when it reaches the maximum charge you set.

🛠️ How It Works

  1. Pick a mode and paste Bluesky profile URLs or handles (or post URLs for threads).
  2. Set a limit with Max results per profile or thread, and optionally a Posted after date.
  3. Run the scraper and download the results, or pull them through the API.

⚙️ Input

FieldUsed byWhat it does
What to scrape (mode)allposts (default), profiles, followers, follows or threads.
Profiles (profiles)posts, profiles, followers, followsProfile URLs or handles: https://bsky.app/profile/t3.gg, jay.bsky.team.
Post URLs (postUrls)threadsbsky.app post links.
Max results per profile or thread (maxItemsPerInput)posts, followers, follows, threadsLimit per profile or per thread. 0 = no limit (the default).
Posted after (postedAfter)postsStop at posts older than this date, e.g. 2026-09-01, or a relative 1 day / 7 days.

The last 100 posts of two profiles since September:

{
"profiles": ["bsky.app", "https://bsky.app/profile/jay.bsky.team"],
"maxItemsPerInput": 100,
"postedAfter": "2026-09-01"
}

Follower, following and post counts for several accounts:

{
"mode": "profiles",
"profiles": ["bsky.app", "jay.bsky.team", "pfrazee.com"]
}

A reply thread:

{
"mode": "threads",
"postUrls": ["https://bsky.app/profile/bsky.app/post/3mp54n7zccc2j"],
"maxItemsPerInput": 500
}

💰 Pricing

Pay only for the results you get. No monthly rental.

EventPriceWhat you get
Result$0.001 per result ($1.00 per 1,000)One post, reply, profile, follower or followed account.

Examples: 100 posts = $0.10 · profile stats for 25 accounts = $0.025 · 1,000 followers = $1.00 · a thread with 500 replies = $0.50.

📊 Sample Bluesky Posts and Profile Data

Post:

{
"type": "post",
"of": "bsky.app",
"isRepost": false,
"repostedBy": null,
"url": "https://bsky.app/profile/bsky.app/post/3mv3shqdfuc2e",
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mv3shqdfuc2e",
"text": "Not to brag, but ... we snagged a couple of passes to today’s Apple event. Stay tuned for our take on all the latest and greatest Apple products.",
"likeCount": 2315,
"quoteCount": 40,
"replyCount": 116,
"repostCount": 148,
"indexedAt": "2026-09-09T15:00:45.669Z",
"createdAt": "2026-09-09T15:00:07.513Z",
"author": {
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"handle": "bsky.app",
"displayName": "Bluesky",
"avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/…",
"labels": [],
"createdAt": "2023-04-12T04:53:57.057Z",
"verification": { "verifications": [], "verifiedStatus": "none", "trustedVerifierStatus": "valid" }
},
"embed": {
"type": "images",
"images": [
{
"thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:z72i7hdynmk6r22z27h6tvur/…",
"fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/…",
"alt": "An enormous pile of red apples and green apples—sweet, tart, delicious, and coming soon to an Apple Store near you!…",
"aspectRatio": { "height": 3000, "width": 4000 }
}
]
},
"replyTo": null,
"replyToUrl": null,
"threadRoot": null,
"threadRootUrl": null
}

A quote post's embed (a link card has embed.external with uri, title, description and thumb instead; quoteWithMedia has both quote and images or video links):

{
"type": "quote",
"quote": {
"url": "https://bsky.app/profile/niedermeyer.online/post/3mycywfduwb2p",
"uri": "at://did:plc:yn75hmwkitdshnylue6d3grk/app.bsky.feed.post/3mycywfduwb2p",
"author": { "handle": "niedermeyer.online", "displayName": "e.w. niedermeyer" },
"text": "🔴 LIVE https://stream.place/niedermeyer.online Elon Take The Wheel Livestream: Alex Gibney, Director of \"MUSK\"",
"createdAt": "2026-10-20T15:59:54Z"
}
}

Profile:

{
"type": "profile",
"url": "https://bsky.app/profile/bsky.app",
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"handle": "bsky.app",
"displayName": "Bluesky",
"description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
"avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/…",
"banner": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/…",
"followersCount": 35072471,
"followsCount": 15,
"postsCount": 864,
"createdAt": "2023-04-12T04:53:57.057Z",
"verified": false,
"labels": [],
"pinnedPost": "https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l"
}

Followed account:

{
"type": "follows",
"of": "jay.bsky.team",
"url": "https://bsky.app/profile/jeffvandermeer.bsky.social",
"did": "did:plc:jvhw6v6rt4motcndq4gh5qo7",
"handle": "jeffvandermeer.bsky.social",
"displayName": "Jeff VanderMeer",
"description": "NYT bestselling author of the Southern Reach series, including Annihilation.…",
"avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:jvhw6v6rt4motcndq4gh5qo7/…",
"createdAt": "2023-07-01T20:22:07.349Z"
}

of is the profile the follower or followed account was listed for. verified is true when the account has Bluesky's blue check; the post's author.verification also shows trustedVerifierStatus, which is valid for organizations allowed to verify others. Video posts have embed.playlist and embed.thumbnail instead of images. Thread rows have the same shape as posts, with type: "reply", of set to the thread URL you entered, and replyTo / threadRoot holding the at:// URI of the post each reply answers and of the thread's first post (replyToUrl / threadRootUrl are the same posts as bsky.app links).

🔁 Schedule Bluesky Monitoring and Integrate

For Bluesky monitoring, run posts mode once a day with postedAfter set to 1 day (or 2 days for some overlap) and keep the posts whose uri you haven't seen yet; for a one-off backfill, use an absolute postedAfter date. For follower growth and other Bluesky stats, run profiles mode daily or weekly: every run is a dated snapshot of the counts. Set it up in Apify Schedules. Send the results to Google Sheets, Zapier, Make, n8n or a webhook with Apify integrations, so new posts land where your team already works.

🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (https://mcp.apify.com). An agent can call it with:

{ "profiles": ["bsky.app"], "maxItemsPerInput": 20 }

❓ FAQ

Does Bluesky have an official API? Yes. Bluesky is built on the open AT Protocol and offers a public, documented API for developers. Using it means writing code, handling pagination and rate limits, and flattening nested responses yourself. This Actor does that for you: no code, no account, flat rows with post links, and exports to CSV, Excel or Google Sheets on a schedule.

Can this Actor search Bluesky by keyword? No. Bluesky search needs a logged-in account, so this Actor does not offer it. Start from profiles or post links.

Do I need a Bluesky account? No. Everything comes from public data.

Why is a field empty? displayName and description are null when the account has not set them. embed is {} for text-only posts. In a quoted post, text, author and createdAt are null when the quoted post was deleted or is hidden. text is an empty string for image-only posts. pinnedPost is null when the profile has no pinned post.

Why does a thread return fewer replies than replyCount? Threads contain the replies Bluesky serves publicly. Replies that are hidden, deleted or from blocked accounts are left out.

How many results can I get? With maxItemsPerInput at 0, posts, followers and follows modes page through everything, which for large accounts can be millions of rows. Set a limit or a maximum charge per run. Profiles mode returns one row per profile.

How do I track Bluesky follower count over time? Bluesky doesn't show past follower counts. Schedule profiles mode daily and keep each run's dataset (or append the rows to a Google Sheet) to build the history yourself.