Bluesky Scraper — Posts, Profiles & Search
Pricing
$4.99/month + usage
Bluesky Scraper — Posts, Profiles & Search
Bluesky scraper 2026 — extract posts, profiles and trending content from Bluesky social network without API key. Pay-per-result pricing. Returns structured JSON. Perfect for decentralized social media monitoring and research.
Pricing
$4.99/month + usage
Rating
0.0
(0)
Developer
Web Data Labs
Actor stats
0
Bookmarked
15
Total users
7
Monthly active users
a day ago
Last modified
Categories
Share
Bluesky Scraper
⭐ Found this useful? Leave a review — it helps other developers find this actor and motivates continued improvement.
⭐ Free to try — if this actor saves you time, please leave a quick review. It takes 30 seconds, helps other developers find it, and keeps us motivated to maintain it.
Extract posts, profiles, and social graphs from Bluesky (bsky.app) at scale. Built on the AT Protocol — no login required for public data. Handles pagination, URI resolution, and rate limiting automatically.
Why Bluesky Data?
Bluesky is the fastest-growing decentralized social network, with millions of active users posting public content indexed by the AT Protocol. Unlike X/Twitter, Bluesky's protocol-level openness makes it ideal for:
- Trend monitoring — track topics, hashtags, and sentiment across the network
- Influencer research — map follower graphs and engagement patterns
- Content aggregation — feed posts into LLM pipelines or dashboards
- Brand monitoring — detect mentions and measure reach
Input Parameters
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
mode | string | Yes | "profile" | Scrape mode: profile, search, feed, followers, following | "search" |
handles | array | For profile/followers/following | — | Bluesky handles to scrape | ["bsky.app", "pfrazee.com"] |
maxPosts | integer | No | 100 | Maximum posts to return per handle | 500 |
includeReplies | boolean | No | false | Include reply posts in results | true |
searchQuery | string | For search | — | Keyword or hashtag to search | "AI agents" |
feedUri | string | For feed | — | AT Protocol feed URI | "at://did:plc:.../app.bsky.feed.generator/..." |
Output Fields
Posts
| Field | Type | Description | Example |
|---|---|---|---|
uri | string | AT Protocol URI | "at://did:plc:abc123/app.bsky.feed.post/xyz789" |
cid | string | Content identifier | "bafyreid..." |
handle | string | Author handle | "pfrazee.com" |
displayName | string | Author display name | "Paul Frazee" |
text | string | Post content | "shipping a new feature..." |
createdAt | string | ISO 8601 timestamp | "2024-11-12T10:05:33.000Z" |
indexedAt | string | AT Protocol index time | "2024-11-12T10:05:40.000Z" |
likeCount | integer | Number of likes | 342 |
repostCount | integer | Number of reposts | 58 |
replyCount | integer | Number of replies | 29 |
lang | string | Detected language | "en" |
isReply | boolean | Whether post is a reply | false |
hasMedia | boolean | Contains images/video | false |
mediaCount | integer | Number of media items | 0 |
mediaUrls | array | URLs of attached media | [] |
authorFollowersCount | integer | Author's follower count | 28400 |
engagementScore | number | Normalized engagement metric | 0.87 |
Social Graph (followers/following mode)
| Field | Type | Description |
|---|---|---|
did | string | Decentralized identifier |
handle | string | User handle |
displayName | string | Display name |
description | string | Bio text |
Example Input
{"mode": "search","searchQuery": "AI agents","maxPosts": 50,"includeReplies": false}
Example Output
{"uri": "at://did:plc:abc123/app.bsky.feed.post/xyz789","cid": "bafyreid...","handle": "pfrazee.com","displayName": "Paul Frazee","text": "shipping a new feature for the AT Protocol today","createdAt": "2024-11-12T10:05:33.000Z","indexedAt": "2024-11-12T10:05:40.000Z","likeCount": 342,"repostCount": 58,"replyCount": 29,"lang": "en","isReply": false,"hasMedia": false,"mediaCount": 0,"authorFollowersCount": 28400,"engagementScore": 0.87}
Using with Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("cryptosignals/bluesky-scraper").call(run_input={"mode": "profile","handles": ["bsky.app"],"maxPosts": 100,"includeReplies": False,})for post in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"@{post['handle']}: {post['text'][:80]}...")print(f" Likes: {post['likeCount']} | Reposts: {post['repostCount']} | Replies: {post['replyCount']}")
Using with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('cryptosignals/bluesky-scraper').call({mode: 'search',searchQuery: 'AI agents',maxPosts: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(post => {console.log(`@${post.handle}: ${post.text.slice(0, 80)}...`);console.log(` Engagement: ${post.engagementScore}`);});
Proxy
Even with Bluesky's open AT Protocol, high-volume requests from a single IP get throttled. Residential proxies distribute the load and prevent temporary soft-bans during large-scale data collection.
ThorData offers residential proxies in 195+ countries that work well with this actor for reliable, uninterrupted scraping.
Integrations
Connect this actor to Google Sheets, Airtable, BigQuery, Slack, Zapier, Make, or use the Apify API for programmatic access and webhook notifications.
Built by cryptosignals
⭐ Support This Actor
If this actor saved you time, please leave a quick review — it takes 30 seconds and helps others discover it. Thank you!
⭐ Leave a Review
If this actor saved you time, please take 30 seconds to leave a review: 👉 https://apify.com/cryptosignals/bluesky-scraper/reviews
Reviews are the #1 way to help this actor reach more developers and ensure we keep it maintained, free-tier friendly, and updated.