Bluesky Scraper ๐Ÿฆ‹ avatar
Bluesky Scraper ๐Ÿฆ‹

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Bluesky Scraper ๐Ÿฆ‹

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

No-Code Venture

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

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

ModeWhen to UseRequired Fields
SearchFind posts by keyword across BlueskyscrapeMode: posts, searchQuery, auth
User FeedScrape posts from a specific userscrapeMode: posts, handle, auth
MessagesScrape your direct messagesscrapeMode: 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:

FilterDescription
posts_and_author_threadsPosts + conversation threads (default)
posts_no_repliesOnly original posts, no replies
posts_with_repliesPosts including replies to others
posts_with_mediaOnly 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:

ParameterDescriptionDefault
conversationCountNumber of conversations to fetch (0 = all)10
messagesPerConversationMessages per conversation (0 = all)50
unreadOnlyOnly fetch conversations with unread messagesfalse

๐Ÿ“‹ 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

ParameterTypeDescriptionDefault
scrapeModeStringWhat to scrape: posts or messagesposts

Posts Mode Parameters

ParameterTypeDescriptionDefault
searchQueryStringSearch term (enables search mode)โ€”
searchSortStringSort: top, latesttop
handleStringUser handle without "@"โ€”
feedFilterStringFeed filter typeposts_and_author_threads
postCountIntegerPosts to scrape (0 = all)10
includeRepliesBooleanFetch reply threadsfalse
repliesDepthIntegerReply thread depth (0 = all)2

Messages Mode Parameters

ParameterTypeDescriptionDefault
conversationCountIntegerConversations to fetch (0 = all)10
messagesPerConversationIntegerMessages per convo (0 = all)50
unreadOnlyBooleanOnly unread conversationsfalse

Authentication

ParameterTypeDescriptionDefault
blueskyIdentifierStringYour handle or emailโ€”
blueskyPasswordStringYour app passwordโ€”

Protocol Settings

ParameterTypeDescriptionDefault
serviceStringAT 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

TypeDescriptionFields
imagesOne or more imagesimages[].url, images[].alt
videoVideo contentvideo.url, video.thumbnail
externalLink previewexternal.uri, external.title, external.description
quoteQuote postrecord.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

  1. Initialize โ€“ Creates a connection to Bluesky's API
  2. Authenticate (if provided) โ€“ Logs in for DM access or higher rate limits
  3. Fetch โ€“ Retrieves posts via search/feed or DMs via chat API
  4. Process โ€“ Extracts replies or messages as configured
  5. Output โ€“ Saves structured data to the dataset

๐Ÿ›ก๏ธ Rate Limits

StatusApproximate 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_replies for 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 service parameter

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