Bluesky Scraper 🦋
Pricing
from $1.50 / 1,000 results
Bluesky Scraper 🦋
Scrape Bluesky posts and DMs without the hassle. This Actor extracts posts, replies, and direct messages from Bluesky, fast, reliable.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
No-Code Venture
Maintained by CommunityActor stats
1
Bookmarked
24
Total users
4
Monthly active users
2 months ago
Last modified
Categories
Share
Scrape Bluesky posts and DMs without the hassle. Scrapes posts, replies, and direct messages from Bluesky — fast, reliable, and no browser automation needed.
✨ Features
- 🔍 Search Mode – Search for posts by keyword across all of Bluesky
- 👤 User Feed Mode – Scrape posts from any public Bluesky profile
- 💬 Reply Threads – Extract full reply threads with configurable depth
- 📨 Direct Messages – Scrape your private DM conversations (requires auth)
- 🖼️ Rich Content – Extracts text, images, videos, external links, and quote posts
- ⚡ Fast & Lightweight – Uses the AT Protocol API directly (no browser needed)
- 🔐 Authenticated – Requires login with your credentials (app password)
🚀 Getting Started
📖 Three Modes: Search, User Feed, or Messages
| Mode | When to Use | Required Fields |
|---|---|---|
| Search | Find posts by keyword across Bluesky | scrapeMode: posts, searchQuery, auth |
| User Feed | Scrape posts from a specific user | scrapeMode: posts, handle, auth |
| Messages | Scrape your direct messages | scrapeMode: messages, auth |
⚠️ Note: All modes require authentication.
📝 Posts Mode
🔍 Search for Posts
Search for posts by keyword across all of Bluesky.
{"scrapeMode": "posts","searchQuery": "artificial intelligence","searchSort": "top","postCount": 20}
Search Sort Options:
top– Most relevant/popular results (default)latest– Most recent posts first
👤 Scrape User Feed
Scrape posts from a specific Bluesky user's profile.
{"scrapeMode": "posts","handle": "apify.com","feedFilter": "posts_and_author_threads","postCount": 25}
Feed Filter Options:
| Filter | Description |
|---|---|
posts_and_author_threads | Posts + conversation threads (default) |
posts_no_replies | Only original posts, no replies |
posts_with_replies | Posts including replies to others |
posts_with_media | Only posts with images/videos |
💬 Including Reply Threads
Enable includeReplies to fetch the full reply thread for each post:
{"scrapeMode": "posts","handle": "jay.bsky.team","postCount": 10,"includeReplies": true,"repliesDepth": 3}
📨 Messages Mode (DMs)
Scrape your direct message conversations. Requires authentication.
{"scrapeMode": "messages","conversationCount": 10,"messagesPerConversation": 50,"unreadOnly": false,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
Message Options:
| Parameter | Description | Default |
|---|---|---|
conversationCount | Number of conversations to fetch (0 = all) | 10 |
messagesPerConversation | Messages per conversation (0 = all) | 50 |
unreadOnly | Only fetch conversations with unread messages | false |
📋 JSON Examples for All Use Cases
1. Search Posts - Basic
Find posts about a topic (authentication required):
{"scrapeMode": "posts","searchQuery": "web scraping","postCount": 10,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
2. Search Posts - Latest
Get the latest posts:
{"scrapeMode": "posts","searchQuery": "breaking news","searchSort": "latest","postCount": 50,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
3. Search Posts - With Reply Threads
Search and get all reply threads:
{"scrapeMode": "posts","searchQuery": "controversial topic","searchSort": "top","postCount": 20,"includeReplies": true,"repliesDepth": 5,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
4. User Feed - All Post Types
Get all posts from a user (posts + threads):
{"scrapeMode": "posts","handle": "apify.com","feedFilter": "posts_and_author_threads","postCount": 100}
5. User Feed - Original Posts Only
Get only original posts (no replies to others):
{"scrapeMode": "posts","handle": "jay.bsky.team","feedFilter": "posts_no_replies","postCount": 50}
6. User Feed - Media Only
Get only posts with images/videos:
{"scrapeMode": "posts","handle": "photography.bsky.social","feedFilter": "posts_with_media","postCount": 30}
7. User Feed - With All Replies
Get posts including all replies to other users:
{"scrapeMode": "posts","handle": "influencer.bsky.social","feedFilter": "posts_with_replies","postCount": 100,"includeReplies": true,"repliesDepth": 0}
8. User Feed - Unlimited Posts
Get ALL posts from a user (0 = unlimited):
{"scrapeMode": "posts","handle": "active-user.bsky.social","feedFilter": "posts_and_author_threads","postCount": 0,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
9. Direct Messages - Basic
Get your recent DM conversations:
{"scrapeMode": "messages","conversationCount": 10,"messagesPerConversation": 50,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
10. Direct Messages - Unread Only
Get only conversations with unread messages:
{"scrapeMode": "messages","conversationCount": 0,"messagesPerConversation": 20,"unreadOnly": true,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
11. Direct Messages - Full Backup
Export ALL conversations with ALL messages:
{"scrapeMode": "messages","conversationCount": 0,"messagesPerConversation": 0,"unreadOnly": false,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
12. Brand Monitoring
Track mentions of your brand:
{"scrapeMode": "posts","searchQuery": "\"your brand name\"","searchSort": "latest","postCount": 100,"includeReplies": true,"repliesDepth": 2,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
13. Competitor Analysis
Monitor competitor's posts:
{"scrapeMode": "posts","handle": "competitor.bsky.social","feedFilter": "posts_no_replies","postCount": 50,"includeReplies": true,"repliesDepth": 3}
14. Hashtag/Topic Research
Find posts about a specific hashtag or topic:
{"scrapeMode": "posts","searchQuery": "#buildinpublic","searchSort": "top","postCount": 100,"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
🔑 Authentication
Authentication is required for all operations.
{"blueskyIdentifier": "your-handle.bsky.social","blueskyPassword": "your-app-password"}
⚠️ Important: Use an App Password, not your main account password!
Create one at: Settings → App Passwords → Add App Password
Input Parameters
Mode Selection
| Parameter | Type | Description | Default |
|---|---|---|---|
scrapeMode | String | What to scrape: posts or messages | posts |
Posts Mode Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
searchQuery | String | Search term (enables search mode) | — |
searchSort | String | Sort: top, latest | top |
handle | String | User handle without "@" | — |
feedFilter | String | Feed filter type | posts_and_author_threads |
postCount | Integer | Posts to scrape (0 = all) | 10 |
includeReplies | Boolean | Fetch reply threads | false |
repliesDepth | Integer | Reply thread depth (0 = all) | 2 |
Messages Mode Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
conversationCount | Integer | Conversations to fetch (0 = all) | 10 |
messagesPerConversation | Integer | Messages per convo (0 = all) | 50 |
unreadOnly | Boolean | Only unread conversations | false |
Authentication
| Parameter | Type | Description | Default |
|---|---|---|---|
blueskyIdentifier | String | Your handle or email | — |
blueskyPassword | String | Your app password | — |
Protocol Settings
| Parameter | Type | Description | Default |
|---|---|---|---|
service | String | AT Protocol service URL (for alternative PDS servers) | https://bsky.social |
📊 Output Examples
Post Output
{"uri": "at://did:plc:xxx/app.bsky.feed.post/yyy","cid": "bafyrei...","text": "Just launched our new web scraping platform! 🚀","author": "Apify","authorHandle": "apify.com","authorDid": "did:plc:vu5ic5ygdeyunpefgmlamsmw","authorAvatar": "https://cdn.bsky.app/img/avatar/...","createdAt": "2024-01-15T10:30:00.000Z","likeCount": 142,"repostCount": 28,"replyCount": 15,"quoteCount": 5,"url": "https://bsky.app/profile/apify.com/post/yyy","embed": {"type": "images","images": [{"url": "https://cdn.bsky.app/img/feed_fullsize/...","alt": "Screenshot of the new platform"}]},"replies": [{"uri": "at://did:plc:abc/app.bsky.feed.post/zzz","text": "This looks amazing!","author": "TechEnthusiast","authorHandle": "techlover.bsky.social","likeCount": 8,"depth": 1}]}
DM Output
{"conversation": {"id": "3abc123...","members": [{"did": "did:plc:xxx","handle": "friend.bsky.social","displayName": "Friend Name","avatar": "https://cdn.bsky.app/..."}],"lastMessage": {"id": "msg123","text": "Hey, how's it going?","sender": "did:plc:xxx","sentAt": "2024-01-15T10:30:00.000Z"},"unreadCount": 0,"muted": false},"messages": [{"id": "msg123","text": "Hey, how's it going?","sender": {"did": "did:plc:xxx","handle": "friend.bsky.social","displayName": "Friend Name"},"sentAt": "2024-01-15T10:30:00.000Z","conversationId": "3abc123..."}]}
Embed Types
| Type | Description | Fields |
|---|---|---|
images | One or more images | images[].url, images[].alt |
video | Video content | video.url, video.thumbnail |
external | Link preview | external.uri, external.title, external.description |
quote | Quote post | record.uri, record.cid, record.text |
🎯 Use Cases
Posts
- Brand Monitoring – Track mentions of your company or product
- Market Research – Analyze trends and sentiment
- Content Curation – Find popular posts for content ideas
- Competitor Analysis – Monitor competitor activity
Direct Messages
- Backup DMs – Export your conversation history
- Message Analytics – Analyze your communication patterns
- Data Migration – Move conversations to another platform
- Research – Study DM patterns (with consent)
⚙️ How It Works
- Initialize – Creates a connection to Bluesky's API
- Authenticate (if provided) – Logs in for DM access or higher rate limits
- Fetch – Retrieves posts via search/feed or DMs via chat API
- Process – Extracts replies or messages as configured
- Output – Saves structured data to the dataset
🛡️ Rate Limits
| Status | Approximate Limits |
|---|---|
| Authenticated | ~3000 requests/minute |
💡 Tips
- App passwords – Always use app passwords, never your main password
- Start small – Test with small counts before scaling
- Feed filters – Use
posts_no_repliesfor cleaner original content - Search tips – Use quotes for exact phrases:
"machine learning" - Alternative PDS – If your account is on a self-hosted PDS, set the
serviceparameter
📜 Legal & Ethical Use
This Actor scrapes Bluesky's. Please:
- Respect Bluesky's Terms of Service
- Don't share or expose private messages
- Use reasonable rate limits
- Comply with data protection laws
🤝 Support
Having issues? Found a bug? Want a feature?
- Open an issue on the Actor's page
- Contact the developer through Apify
Built by nocodeventure • Made with 💙 for the Apify community