Bluesky Scraper - Posts, Profiles, Search & Monitor avatar

Bluesky Scraper - Posts, Profiles, Search & Monitor

Pricing

from $1.00 / 1,000 scraped items

Go to Apify Store
Bluesky Scraper - Posts, Profiles, Search & Monitor

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

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 discoveryProduct launches
Bluesky Scraper ◄── you are hereProduct Hunt Scraper
Posts, profiles, search, threads, graph, monitorLaunches, 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 httpx async 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 hydrationgetProfiles / getPosts (up to 25)
  • RateGate — client RPS budget + 429 backoff; proxy optional
  • Flat JSON rows — Store-ready type field (post, profile, follower, …)

Input Parameters

ParameterDescription
modeuser_posts, user_profiles, search, search_users, post_threads, followers, following, custom_feed, likes, reposts, monitor
startUrlsProfile / post / feed URLs or at:// URIs
handlesHandles or DIDs
searchQuery / searchQueriesKeyword or hashtag queries
searchSortlatest or top (search mode)
monitorSourceuser_posts | search | custom_feed
monitorStoreNameNamed KV store for watermarks
monitorBaselineOnlyFirst run: set watermark, push nothing
resetMonitorStateClear watermarks before run
includeReplies / includeRepostsAuthor-feed filters
threadDepthMax reply depth for threads
maxItemsDataset row cap (0 = unlimited)
concurrencyParallel streams (default 8)
maxRequestsPerSecondClient rate limit (default 10)
proxyConfigurationOptional; 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

FieldDescription
typepost, profile, follower, following, like, repost
idAT-URI or DID
urlWeb URL on bsky.app
textPost body
authorHandle / authorDidAuthor identity
likeCount / repostCount / replyCount / quoteCountEngagement
hashtags / mentions / mediaFacets and embeds
followersCount / followsCount / postsCountProfile counters
monitorTarget / monitorSourcePresent 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

  1. Use handles + user_posts / user_profiles for known accounts.
  2. Prefer search for discovery — no Bluesky app password needed.
  3. Cap large follower graphs with maxItems; add proxies only for very high RPS.
  4. For alerts: baseline with monitorBaselineOnly, then schedule without it.
  5. Give each scheduled monitor a distinct monitorStoreName.
ActorRole
Bluesky Scraper ◄── you are hereBluesky / AT Protocol public data
Product Hunt ScraperProduct launches, reviews, comments