Bluesky Scraper avatar

Bluesky Scraper

Pricing

from $0.005 / actor start

Go to Apify Store
Bluesky Scraper

Bluesky Scraper

Pricing

from $0.005 / actor start

Rating

0.0

(0)

Developer

Eonix Pvt Ltd

Eonix Pvt Ltd

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Bluesky Scraper β€” Posts, Profiles, Followers & Search API

Bluesky has 30M+ users and almost no good scrapers. This one gives you clean, ready-to-use data on Bluesky posts, hashtags, profiles, followers and full reply threads. There's no login, no browser and no waiting: most runs finish in seconds.

Export to JSON, CSV, Excel or HTML, or pull the results straight into your app, spreadsheet, AI agent or automation.

What can it scrape?

ModeYou give itYou get
Search postsKeywords or hashtags (#ai, climate change, from:bsky.app)Matching posts, newest or most popular first
Profile detailsHandles (bsky.app) or profile linksBio, website, follower / following / post counts, avatar, banner, join date
Author feedHandlesEverything a user posted, optionally with replies and reposts
FollowersHandlesEveryone who follows the account, with full profile details
FollowsHandlesEveryone the account follows, with full profile details
Thread repliesPost linksThe post plus every reply in the conversation, with reply depth

Every post includes its text, link, author, date, likes, reposts, replies, quotes, languages, hashtags, mentions, links, images (full size + alt text), video, link previews and quoted posts.

Use cases

  • Social listening & brand monitoring. Track mentions of your brand, product or competitors, and schedule the Actor to run hourly for a live feed.
  • Lead generation & influencer discovery. Pull the followers of a niche account, sort by follower count, and read their bios and websites.
  • Market & academic research. Build datasets of conversations around a topic, event or hashtag, with full reply threads for discourse analysis.
  • AI agents & RAG. Feed fresh, structured Bluesky content to LLMs, vector databases and agents via the API or MCP.
  • Content & trend monitoring. See which posts get traction, which links get shared, and what hashtags are rising.

Why this scraper?

  • No login required. Uses Bluesky's official public API, so there's no account and no cookies to break.
  • Fast and cheap. No browser; runs usually return in seconds.
  • Clean, flat data. Consistent field names, ISO-8601 dates, real numbers, null instead of empty strings, and no duplicates.
  • Respects privacy choices. Accounts that asked Bluesky to hide their content from logged-out visitors are skipped automatically.
  • Budget-safe. The run stops cleanly at your maximum cost, and you're never charged for items you didn't get.

Sample output

Here are the first 3 results from a real run with the default input (search #ai), trimmed to the most useful fields. The full output also includes cid, authorDid, authorAvatar, indexedAt, mentionDids, video, quotedPost, reply/repost/thread fields, labels, source and scrapedAt.

[
{
"url": "https://bsky.app/profile/nextlogic-ai.bsky.social/post/3mwgtfe5cge2z",
"uri": "at://did:plc:37qq64lnbpp5rswmszg67qgq/app.bsky.feed.post/3mwgtfe5cge2z",
"authorHandle": "nextlogic-ai.bsky.social",
"authorDisplayName": "NextLogic-AI",
"text": "🎨 New Post: Revolutionizing Cancer Detection: How Liquid Biopsies Could Transform Healthcare Careers\n#ai #biotechnology #cancer #TechNews ...\n\nπŸ‘‡ View Full Illustration:\nhttps://nextlogic-ai.achlabo.com/en/revolutionizing-cancer-detection-how-liquid-biopsies-could-transform-healthcare-careers/",
"createdAt": "2026-09-26T17:41:07.000Z",
"likeCount": 0,
"repostCount": 0,
"replyCount": 0,
"quoteCount": 0,
"langs": [],
"hashtags": ["ai", "biotechnology", "cancer", "TechNews"],
"links": ["https://nextlogic-ai.achlabo.com/en/revolutionizing-cancer-detection-how-liquid-biopsies-could-transform-healthcare-careers/"],
"embedType": "images",
"images": [
{
"fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:37qq64lnbpp5rswmszg67qgq/bafkreiduoimzny45u3qgjxzvmqiaixxfsgeuqgwg7logobwoda5h4i26wy",
"alt": "Revolutionizing Cancer Detection: How Liquid Biopsies Could Transform Healthcare Careers"
}
],
"externalLink": null,
"isReply": false
},
{
"url": "https://bsky.app/profile/autoflow.bsky.social/post/3mwgteoy4my2p",
"uri": "at://did:plc:ait3ewyppkd4ubgkldb6pvn3/app.bsky.feed.post/3mwgteoy4my2p",
"authorHandle": "autoflow.bsky.social",
"authorDisplayName": "Automation",
"text": "Stop hardcoding your AI agent’s logic. Switch to \"State-Driven\" workflows using tools like LangGraph. By keeping the conversation state external, you can make your agents pause, human-in-the-loop, and recover from errors easily. #AI #Automation",
"createdAt": "2026-09-26T17:40:47.737Z",
"likeCount": 0,
"repostCount": 0,
"replyCount": 0,
"quoteCount": 0,
"langs": ["en"],
"hashtags": ["AI", "Automation"],
"links": [],
"embedType": null,
"images": [],
"externalLink": null,
"isReply": false
},
{
"url": "https://bsky.app/profile/schoenenberger.bsky.social/post/3mwgtdubmys2e",
"uri": "at://did:plc:bz6mqlgvztm3otrubyvmniyb/app.bsky.feed.post/3mwgtdubmys2e",
"authorHandle": "schoenenberger.bsky.social",
"authorDisplayName": "Henning Schoenenberger",
"text": "Can visual AI help us understand cities without reducing urban life to what cameras can capture? #MIT researchers examine both the promise and peril.\n\nnews.mit.edu/2026/studyin...\n\n#Sociology #UrbanStudies #AI",
"createdAt": "2026-09-26T17:40:19.927Z",
"likeCount": 0,
"repostCount": 0,
"replyCount": 0,
"quoteCount": 0,
"langs": ["de"],
"hashtags": ["MIT", "Sociology", "UrbanStudies", "AI"],
"links": ["https://news.mit.edu/2026/studying-cities-using-visual-ai-fabio-duarte-martina-mazzarello-carlo-ratti-fan-zhang-book-0924"],
"embedType": "external",
"images": [],
"externalLink": {
"url": "https://news.mit.edu/2026/studying-cities-using-visual-ai-fabio-duarte-martina-mazzarello-carlo-ratti-fan-zhang-book-0924",
"title": "The promise and peril of using visual AI to study cities"
},
"isReply": false
}
]

A profile result (profile, followers and follows modes) looks like this:

{
"type": "profile",
"did": "did:plc:z72i7hdynmk6r22z27h6tvur",
"handle": "bsky.app",
"url": "https://bsky.app/profile/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/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
"followersCount": 35049457,
"followsCount": 15,
"postsCount": 864,
"createdAt": "2023-04-12T04:53:57.057Z",
"website": null,
"pinnedPostUri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l",
"relation": null,
"relationSubjectHandle": null
}

In followers / follows mode, relation is "follower" or "follows", and relationSubjectHandle tells you whose list the profile came from. website is the first web address found in the bio.

Pricing

You pay only for results. There's no monthly fee.

EventPriceWhen
Actor start$0.005Once per run
Post scraped$0.0005Each post saved (search, author feed, thread)
Profile scraped$0.002Each profile saved (profile, followers, follows)

Worked examples:

  • 10,000 posts β‰ˆ $5: 10,000 Γ— $0.0005 = $5.00, plus $0.005 to start.
  • 1,000 posts β‰ˆ $0.51: $0.50 for the posts, plus $0.005.
  • 1,000 followers with full profiles β‰ˆ $2.01: 1,000 Γ— $0.002 = $2.00, plus $0.005.

Set Maximum cost per run in Apify Console and the Actor stops cleanly when it gets there. You're never charged for posts you didn't receive, and duplicates are never charged.

Input

FieldWhat it doesDefault
modesearch, profile, authorFeed, followers, follows or threadsearch
queriesSearch terms or hashtags (Search mode)["#ai"]
handlesHandles, DIDs or profile links (Profile, Author feed, Followers, Follows)["bsky.app"]
postUrlsPost links or at:// URIs (Thread mode)a sample post
maxItemsMax results per search term / handle / thread (in Profile mode: max handles)200
sinceOnly posts created on or after this date (UTC), e.g. 2025-01-31β€”
untilOnly posts created before this date (UTC)β€”
includeRepliesInclude replies in Search and Author feedfalse
includeRepostsInclude reposts in Author feedfalse
expandEmbedsAdd full quoted posts and link-preview detailstrue
searchSortlatest or toplatest
blueskyHandleOptional. Your handle, to unlock deep search (see FAQ)β€”
blueskyAppPasswordOptional. An app password (never your main password)β€”
blueskyServiceUrlWhere to log in; change only for self-hosted accountshttps://bsky.social
proxyConfigurationProxy settingsApify Proxy

Example input:

{
"mode": "authorFeed",
"handles": ["bsky.app", "nytimes.com"],
"maxItems": 500,
"since": "2025-01-01",
"includeReposts": false
}

How to use it

Apify API (cURL)

curl -X POST "https://api.apify.com/v2/acts/yasaslive~bluesky-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","queries":["#ai"],"maxItems":100}'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("yasaslive/bluesky-scraper").call(run_input={
"mode": "followers",
"handles": ["bsky.app"],
"maxItems": 1000,
})
for profile in client.dataset(run["defaultDatasetId"]).iterate_items():
print(profile["handle"], profile["followersCount"], profile["website"])

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('yasaslive/bluesky-scraper').call({
mode: 'thread',
postUrls: ['https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'posts in the thread');

Make, n8n and Zapier

  • Make: add the Apify β†’ Run an Actor module, choose yasaslive/bluesky-scraper, paste your input JSON, then add Apify β†’ Get Dataset Items.
  • n8n: use the Apify node (Run Actor + Get dataset items), or an HTTP Request node that POSTs your input to the run-sync-get-dataset-items URL above.
  • Zapier: use the Apify app with the Run Actor action.

AI agents (MCP)

Connect Claude, Cursor or any MCP client to the Apify MCP server and it can call this Actor as a tool:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?actors=yasaslive/bluesky-scraper",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Then ask something like "Find the latest Bluesky posts about #climate and summarize the main arguments."

FAQ

Do I need a Bluesky account? No, every mode works without one. The only exception is deep search (below).

Why does Search return at most ~100 posts per term? Bluesky's public API gives logged-out visitors only the first page of search results, and blocks date filters. This Actor respects that limit. You have three options:

  1. Add more search terms, since each term gets its own ~100 results.
  2. Use Author feed, Followers or Thread modes, which have no such limit.
  3. For deep search, fill in blueskyHandle and blueskyAppPassword. The Actor then logs in with your account and pages through all results, with server-side date filters.

Create an app password at bsky.app/settings/app-passwords. App passwords can be revoked at any time and can't change your account password. The login is used for search only. The password is stored encrypted by Apify and never logged.

Why are some posts or profiles missing? Some Bluesky users ask not to be shown to logged-out visitors. Bluesky's own website hides them, and so does this Actor. The run's STATS record shows how many were skipped (optOutSkipped). Deleted, blocked or suspended content is also unavailable.

Are follower counts included in Followers / Follows mode? Yes. Each profile is enriched with its full details, including follower, following and post counts.

How fresh is the data? Live. Every run reads directly from Bluesky.

Can I schedule it? Yes. Use Apify Schedules to run it hourly or daily, and connect a webhook or integration to receive new results.

Where can I see what happened in a run? Open the run's Storage β†’ Key-value store β†’ STATS. It shows request counts, errors by type (blocked, rate-limited, proxy, network, parse, not found), items per input, charges, and whether the budget was reached.

Limitations

  • Logged-out search returns up to ~100 posts per search term (see FAQ). Other modes page through everything the API offers.
  • Very large threads are returned as far as Bluesky's thread API goes, up to 1,000 levels deep.
  • since / until apply to post modes. In Author feed mode the Actor stops paging once it passes since.
  • Videos are returned as streaming playlist (.m3u8) and thumbnail URLs, not as downloaded files.
  • website is best-effort, parsed from the bio text.

This Actor only reads public data from Bluesky's official public API. It doesn't log in unless you choose to, it doesn't bypass any access restriction, and it honours users' request not to be shown to logged-out visitors.

Scraped data can still contain personal data. You're responsible for how you use it: comply with the Bluesky Terms of Service, the Bluesky developer guidelines, and data-protection laws such as the GDPR and CCPA. Have a legitimate purpose, keep only what you need, and don't use the data for spam, harassment or profiling of individuals. If you're unsure, consult a lawyer.

Support

Found a bug or need a field that's missing? Open an issue on the Actor's Issues tab and include your run ID.