Bluesky Scraper | Enterprise Grade
Pricing
from $0.72 / 1,000 comment extracteds
Bluesky Scraper | Enterprise Grade
Export public Bluesky replies, nested conversation context, author details, timestamps, and engagement metrics from post URLs or AT URIs.
Pricing
from $0.72 / 1,000 comment extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Bluesky Comments Scraper
Export public replies from Bluesky post threads as structured JSON, CSV, Excel, or API-ready records. Monitor customer feedback, community response, campaign engagement, and public conversations without a Bluesky login.
Provide one or more public post URLs or AT URIs. The Actor follows the conversation tree, saves nested replies, preserves source-post context, and returns clean records ready for analysis.
What data can you export?
Each comment includes:
- Stable post identifiers (
id,uri, andcid) - Canonical comment and source-post URLs
- Author handle, DID, display name, and avatar
- Comment text and language tags
- Creation and indexing timestamps
- Reply, repost, like, and quote counts
- Parent and root reply references
- Conversation depth and source-post author
{"kind": "comment","id": "3mk66abcxyz2q","uri": "at://did:plc:example/app.bsky.feed.post/3mk66abcxyz2q","cid": "bafyreiexample","url": "https://bsky.app/profile/reply-user.bsky.social/post/3mk66abcxyz2q","authorHandle": "reply-user.bsky.social","authorDid": "did:plc:example","authorName": "Reply User","authorAvatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:example/example@jpeg","text": "This is a useful write-up.","createdAt": "2026-04-23T14:02:11.000Z","indexedAt": "2026-04-23T14:02:12.000Z","languages": ["en"],"replyCount": 1,"repostCount": 0,"likeCount": 7,"quoteCount": 0,"replyParentUri": "at://did:plc:2q2hs5o42jhbd23pp6lkiauh/app.bsky.feed.post/3lhtdtw23m22m","replyRootUri": "at://did:plc:2q2hs5o42jhbd23pp6lkiauh/app.bsky.feed.post/3lhtdtw23m22m","commentDepth": 1,"sourcePostUri": "at://did:plc:2q2hs5o42jhbd23pp6lkiauh/app.bsky.feed.post/3lhtdtw23m22m","sourcePostUrl": "https://bsky.app/profile/petebuttigieg.bsky.social/post/3lhtdtw23m22m","sourcePostAuthorHandle": "404media.co"}
Ready-to-run examples
Open a public example to inspect its input, run it, or reuse it as a task:
Export the first 20 comments
{"postUrls": ["https://bsky.app/profile/petebuttigieg.bsky.social/post/3lhtdtw23m22m"],"maxCommentsPerPost": 20,"maxDepth": 100}
Monitor several posts
{"postUrls": ["https://bsky.app/profile/petebuttigieg.bsky.social/post/3lhtdtw23m22m","at://did:plc:example/app.bsky.feed.post/3example"],"maxCommentsPerPost": 100,"maxDepth": 20,"maxRunSeconds": 120}
Input settings
| Field | Type | Description |
|---|---|---|
postUrls | string array | Public Bluesky post URLs or AT URIs. |
maxCommentsPerPost | integer | Maximum replies saved per source post, from 1 to 1,000. |
maxDepth | integer | Maximum nested reply depth requested. |
maxRunSeconds | integer | Optional 35–300 second run budget. |
Use low limits while validating a new workflow, then increase the limit for scheduled production runs.
Output fields
| Group | Fields |
|---|---|
| Record identity | kind, id, uri, cid, url |
| Author | authorHandle, authorDid, authorName, authorAvatar |
| Content | text, languages, createdAt, indexedAt |
| Engagement | replyCount, repostCount, likeCount, quoteCount |
| Thread context | replyParentUri, replyRootUri, commentDepth |
| Source context | sourcePostUri, sourcePostUrl, sourcePostAuthorHandle |
Records can be downloaded from the Dataset tab as JSON, CSV, Excel, XML, or RSS, or consumed through the API.
Who is it for?
- Social media teams tracking public reactions to posts and announcements
- Marketing analysts comparing engagement across campaigns
- Community managers finding recurring questions and feedback themes
- Researchers studying public conversation structures and reply networks
- Developers and data teams feeding Bluesky comments into dashboards, warehouses, or AI pipelines
Use cases
- Monitor replies to product announcements and campaigns.
- Analyze public feedback and conversation depth.
- Refresh engagement dashboards on an Apify schedule.
- Compare comment volume and sentiment across source posts.
- Archive public discussion context for reproducible research.
- Send new replies to a webhook, spreadsheet, CRM, or data warehouse.
Pricing
Pay per run start and per comment saved. Subscription tiers receive volume rates. See the live Pricing tab for current prices before starting a large run.
You are not charged a comment event for a reply-free post. Set maxCommentsPerPost to control the maximum output and cost per source post.
API usage
Replace $APIFY_TOKEN with an Apify API token stored securely in your environment.
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~all-in-one-bluesky-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"postUrls":["https://bsky.app/profile/petebuttigieg.bsky.social/post/3lhtdtw23m22m"],"maxCommentsPerPost":20}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/all-in-one-bluesky-scraper').call({postUrls: ['https://bsky.app/profile/petebuttigieg.bsky.social/post/3lhtdtw23m22m'],maxCommentsPerPost: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/all-in-one-bluesky-scraper').call(run_input={'postUrls': ['https://bsky.app/profile/petebuttigieg.bsky.social/post/3lhtdtw23m22m'],'maxCommentsPerPost': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use the same Actor from Apify schedules, webhooks, Make, Zapier, n8n, or any HTTP-capable application.
MCP and AI agents
Add the Apify MCP server to Claude Code:
$claude mcp add apify --transport http "https://mcp.apify.com?tools=fetch_cat/all-in-one-bluesky-scraper"
Example MCP client configuration:
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com?tools=fetch_cat/all-in-one-bluesky-scraper"}}}
Example prompts:
- “Export up to 50 replies from this public Bluesky post and summarize common questions.”
- “Collect comments from these three Bluesky post URLs and compare engagement.”
- “Return the authors and text of nested replies at depth two or greater.”
Tips
- Start with 20 comments to verify the selected post and output shape.
- Use canonical public post URLs copied from Bluesky when possible.
- Use AT URIs when another Bluesky integration already supplies them.
- Schedule recurring runs for engagement monitoring.
- Deduplicate downstream records by
uriorid. - Keep run limits aligned with the number and size of source threads.
Limits and expected behavior
- Only publicly available Bluesky threads can be exported.
- Deleted, blocked, moderated, or otherwise unavailable replies cannot be returned.
- Deeply nested threads are limited by
maxDepth,maxCommentsPerPost, and source availability. - A public post with no replies completes successfully with an empty dataset and run summary.
- Invalid or unavailable source posts are reported clearly rather than converted into fabricated rows.
- Counts reflect the values available when each reply is collected and may change later.
FAQ
Does it require a Bluesky account?
No. It exports public thread data without a Bluesky login.
Can I process multiple posts?
Yes. Add multiple values to postUrls; limits apply to each source post.
Are nested replies included?
Yes, up to maxDepth and maxCommentsPerPost.
Can I use an AT URI instead of a web URL?
Yes. Both public bsky.app post URLs and valid post AT URIs are accepted.
How do I export CSV or Excel?
Open the run Dataset tab and choose the preferred download format, or request a format from the dataset API.
How do I control spend?
Use a low maxCommentsPerPost value first and review the live Pricing tab before scaling.
Related Actors
More Bluesky scrapers
Support
Open an issue on the Actor page with the public post URL, expected result, and run ID. Do not include private credentials, tokens, or personal data that is not already public.