Bluesky Scraper - Posts, Profiles, Search & Monitor
Pricing
from $1.00 / 1,000 scraped items
Bluesky Scraper - Posts, Profiles, Search & Monitor
Scrape Bluesky posts, profiles, keyword/hashtag search, threads, followers, likes, reposts, and custom feeds via the public AT Protocol AppView API. Incremental monitor mode for schedules. No login for public data. Fast async JSON on Apify.
Pricing
from $1.00 / 1,000 scraped items
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Bluesky Scraper — Posts, Profiles, Search & Monitor
Unofficial tool for publicly accessible Bluesky / AT Protocol AppView data. Bluesky and related trademarks belong to their respective owners. Not affiliated with, sponsored by, or endorsed by Bluesky PBC. Provided for informational use only; users must comply with applicable terms and laws.
| Social discovery | Product launches |
|---|---|
| Bluesky Scraper ◄── you are here | Product Hunt Scraper |
| Posts, profiles, search, threads, graph, monitor | Launches, reviews, comments, leaderboards |
Bluesky scraper for Apify — extract posts, profiles, hashtag/keyword search, reply threads, followers, following, likes, reposts, and custom feeds from Bluesky via the open AT Protocol public AppView API. No browser, no Cloudflare fight, and no login for public data (including post search).
Monitor mode stores per-target watermarks in a named key-value store and returns only posts newer than the last run — built for hourly/daily schedules, brand listening, and competitor tracking.
When to use this Actor
- Brand / hashtag listening without an app password
- Author feed export for influencers, journalists, or competitors
- Profile enrichment (followers, bio, post counts)
- Social graph pulls (followers / following)
- Full conversation trees for research
- Scheduled incremental monitoring of accounts or queries
Key Features
- AT Protocol XRPC — fast
httpxasync client against public AppView endpoints - Dual-host search — routes post search so it works without Bluesky credentials
- 11 modes — user posts, profiles, search, search users, threads, followers, following, custom feed, likes, reposts, monitor
- Incremental monitor — named KV watermarks; optional baseline-only first run
- Batch hydration —
getProfiles/getPosts(up to 25) - RateGate — client RPS budget + 429 backoff; proxy optional
- Flat JSON rows — Store-ready
typefield (post,profile,follower, …)
Input Parameters
| Parameter | Description |
|---|---|
mode | user_posts, user_profiles, search, search_users, post_threads, followers, following, custom_feed, likes, reposts, monitor |
startUrls | Profile / post / feed URLs or at:// URIs |
handles | Handles or DIDs |
searchQuery / searchQueries | Keyword or hashtag queries |
searchSort | latest or top (search mode) |
monitorSource | user_posts | search | custom_feed |
monitorStoreName | Named KV store for watermarks |
monitorBaselineOnly | First run: set watermark, push nothing |
resetMonitorState | Clear watermarks before run |
includeReplies / includeReposts | Author-feed filters |
threadDepth | Max reply depth for threads |
maxItems | Dataset row cap (0 = unlimited) |
concurrency | Parallel streams (default 8) |
maxRequestsPerSecond | Client rate limit (default 10) |
proxyConfiguration | Optional; usually not required |
Author feed:
{"mode": "user_posts","handles": ["jay.bsky.team", "bsky.app"],"maxItems": 100,"concurrency": 8,"maxRequestsPerSecond": 10,"includeReplies": true,"includeReposts": true,"proxyConfiguration": {"useApifyProxy": false}}
Post search (no app password):
{"mode": "search","searchQuery": "#ai","searchSort": "latest","maxItems": 200}
Monitor (schedule after a baseline run):
{"mode": "monitor","monitorSource": "search","searchQueries": ["#ai", "bluesky"],"monitorStoreName": "bluesky-monitor-brand-x","monitorBaselineOnly": true,"maxItems": 200,"maxRequestsPerSecond": 10}
After the baseline run, set monitorBaselineOnly to false (or omit it) so later runs push only new posts.
Output Format
| Field | Description |
|---|---|
type | post, profile, follower, following, like, repost |
id | AT-URI or DID |
url | Web URL on bsky.app |
text | Post body |
authorHandle / authorDid | Author identity |
likeCount / repostCount / replyCount / quoteCount | Engagement |
hashtags / mentions / media | Facets and embeds |
followersCount / followsCount / postsCount | Profile counters |
monitorTarget / monitorSource | Present on monitor rows |
{"type": "post","id": "at://did:plc:oky5czdrnfjpqslsw2a5iclo/app.bsky.feed.post/3mrdkahh4xk2r","url": "https://bsky.app/profile/jay.bsky.team/post/3mrdkahh4xk2r","text": "Example post text","authorHandle": "jay.bsky.team","authorDid": "did:plc:oky5czdrnfjpqslsw2a5iclo","likeCount": 42,"repostCount": 3,"replyCount": 5,"hashtags": [],"media": [],"monitorTarget": "#ai","monitorSource": "search"}
Workflow tips
- Use
handles+user_posts/user_profilesfor known accounts. - Prefer
searchfor discovery — no Bluesky app password needed. - Cap large follower graphs with
maxItems; add proxies only for very high RPS. - For alerts: baseline with
monitorBaselineOnly, then schedule without it. - Give each scheduled monitor a distinct
monitorStoreName.
Related Actors
| Actor | Role |
|---|---|
| Bluesky Scraper ◄── you are here | Bluesky / AT Protocol public data |
| Product Hunt Scraper | Product launches, reviews, comments |