🦋 Bluesky Scraper — Profiles, Posts, Search & Threads
Pricing
from $0.50 / 1,000 bluesky post, thread reply or liked posts
🦋 Bluesky Scraper — Profiles, Posts, Search & Threads
Extract Bluesky profiles, feeds, profile and post search, exact posts, reply threads, followers, following, and liked posts with rich media, facets, verification and engagement data.
Pricing
from $0.50 / 1,000 bluesky post, thread reply or liked posts
Rating
0.0
(0)
Developer
Ilia
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 months ago
Last modified
Categories
Security
Limited permissionsShare
🦋 Bluesky Scraper — Profiles, Posts, Search, Threads & Graph
Turn public Bluesky data into structured, analysis-ready records. Fetch rich profiles, author feeds, exact posts, complete reply threads, followers, following, liked posts, and profile or post search results from one Actor.
✨ Everything in one Bluesky dataset
- Profiles: DID, handle, display name, bio, avatar, banner, follower/following/post counts, labels, account dates, associated resources, and verification data.
- Posts: stable AT URI and CID, canonical URL, full text, author details, creation/index dates, likes, reposts, replies, quotes, bookmarks, languages, tags, and labels.
- Rich media: full-size images, thumbnails, alt text, aspect ratios, video playlists and thumbnails, external-link cards, and quoted-post context.
- Conversation context: reply parent/root URIs, exact-post hydration, and breadth-first nested thread export with depth markers.
- Discovery: paginated actor search and post search, with the originating query attached to every result.
- Social graph and engagement: paginated followers and following, public liked-post feeds, and the likers, reposters, or quote-posts attached to exact posts.
🚀 Common workflows
- monitor creators, brands, competitors, announcements, and engagement;
- build audience, follower-overlap, and influencer datasets;
- collect conversations for sentiment, topic, and community research;
- enrich public profiles and identify relevant accounts through search;
- schedule incremental ingestion into Sheets, databases, Make, n8n, webhooks, or AI agents.
⚙️ Flexible controls
Use independent limits for feeds, search, graph rows, and threads. Filter posts by date range, BCP-47 language codes, or media presence. Include replies and reposts when needed, and pass seenPostUris to avoid duplicate records in recurring runs.
Example input
{"actors": ["bsky.app", "jay.bsky.team"],"searchActors": ["climate journalist"],"searchPosts": ["AT Protocol"],"postUrls": ["https://bsky.app/profile/bsky.app/post/3l..."],"includeProfile": true,"includePosts": true,"includeFollowers": true,"includeThreadReplies": true,"maxPostsPerActor": 100,"maxRelationshipsPerActor": 500,"languages": ["en"]}
💳 Pay only for stored results
Billing is result-based: profile/search-profile records use the profile event, posts/search/thread/liked-post records use the post event, and follower/following records use the relationship event. Filtered, duplicate, missing, and failed inputs do not create billable dataset rows.
🔌 Automation-ready output
Every record includes a recordType, source attribution, and scrape timestamp. Export JSON, CSV, Excel, XML, RSS, or HTML, or access results through the Apify API, webhooks, schedules, integrations, and MCP.
📥 Complete input reference
| Field | Type | Default | Purpose |
|---|---|---|---|
actors | array | ["bsky.app"] | Handles, @handles, profile URLs or did: identifiers. |
searchActors | array | [] | Profile search queries. Each query has its own result limit. |
searchPosts | array | [] | Post search queries, including phrases and supported operators. |
postUrls | array | [] | Fetch exact posts or complete reply threads. |
includeProfile | boolean | true | Export a rich profile row for each actor. |
includePosts | boolean | true | Export recent posts from each actor's author feed. |
includeReplies | boolean | false | Include posts that reply to another post. |
includeReposts | boolean | false | Include posts reposted by the requested actor. |
includeFollowers | boolean | false | Export profiles following each actor. |
includeFollowing | boolean | false | Export profiles followed by each actor. |
includeLikes | boolean | false | Export publicly visible liked posts from each actor's repository. |
includeThreadReplies | boolean | false | For post URLs / AT URIs, export the root and nested replies. |
includePostLikers | boolean | false | For post URLs / AT URIs, export profiles that liked each post. |
includePostReposters | boolean | false | For post URLs / AT URIs, export profiles that reposted each post. |
includeQuotePosts | boolean | false | For post URLs / AT URIs, export posts that quote each post. |
maxPostsPerActor | integer | 25 | Independent author-feed result cap for every actor. |
maxRelationshipsPerActor | integer | 100 | Independent cap for followers, following and liked posts. |
maxSearchResults | integer | 100 | Independent cap for every actor or post search query. |
maxThreadReplies | integer | 100 | Maximum root and nested reply rows exported for each thread. |
maxEngagementPerPost | integer | 100 | Independent cap for likers, reposters and quote posts for every input post. |
sort | string | "latest" | Order post-search results by recency or relevance/engagement. |
postedAfter | string | "" | Optional inclusive ISO date or YYYY-MM-DD. |
postedBefore | string | "" | Optional inclusive ISO date or YYYY-MM-DD. |
languages | array | [] | Optional BCP-47 codes such as en, de, ja. |
mediaOnly | boolean | false | Keep posts with image or video media URLs. |
seenPostUris | array | [] | Stable post URIs to skip on recurring runs. |
requestDelayMs | integer | 0 | Optional pacing delay for long collection jobs. |
📤 Complete output reference
The default dataset is exportable as JSON, CSV, Excel, XML or RSS. Fields remain stable for scheduled runs and API integrations.
| Field | Type |
|---|---|
recordType | string |
sourceDid | string / null |
sourceHandle | string / null |
did | string / null |
handle | string / null |
profileUrl | string / null |
displayName | string / null |
profileDescription | string / null |
avatarUrl | string / null |
bannerUrl | string / null |
followersCount | integer / null |
followsCount | integer / null |
postsCount | integer / null |
createdAt | string / null |
indexedAt | string / null |
labels | array / null |
associated | object / null |
verification | object / null |
searchQuery | string / null |
threadDepth | integer / null |
sourcePostUri | string / null |
engagementCreatedAt | string / null |
postUri | string / null |
cid | string / null |
postUrl | string / null |
text | string / null |
publishedAt | string / null |
authorDid | string / null |
authorHandle | string / null |
authorDisplayName | string / null |
authorAvatarUrl | string / null |
likeCount | integer / null |
repostCount | integer / null |
replyCount | integer / null |
quoteCount | integer / null |
bookmarkCount | integer / null |
languages | array / null |
tags | array / null |
facets | array / null |
replyParentUri | string / null |
replyRootUri | string / null |
isReply | boolean / null |
isRepost | boolean / null |
repostedBy | object / null |
repostedAt | string / null |
likedAt | string / null |
likeRecordUri | string / null |
embedType | string / null |
images | array / null |
mediaUrls | array / null |
video | object / null |
external | object / null |
quotedPost | object / null |
viewer | object / null |
scrapedAt | string |
🔌 API & integrations
Run this Actor from the Apify Console, API, CLI, MCP, Make, Zapier or n8n. Replace the Actor identifier and token in this template:
curl -X POST "https://api.apify.com/v2/acts/bluesky-profile-author-feed-monitor/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{}'
Results are stored in the run's default dataset and can be forwarded with Apify webhooks or scheduled Tasks.
🔎 Search keywords
Bluesky Scraper — Profiles, Posts, Search, Threads & Graph, bluesky, scraper, profiles, posts, search, threads, graph, profile, author, feed, monitor, Apify Actor, scraper API, structured data, scheduled monitor, automation.
💰 Pricing
Billing is tied to successfully delivered result events. Empty, filtered, duplicate or failed records are not charged as results. Open the Pricing tab for the current per-event rate before starting a run, and use Apify's maximum-charge control to enforce a hard budget.