Bluesky Social Search — Monitor, Sentiment, Trends & Alerts is an Apify actor on ApifyForge. Bluesky Social Search is a social listening and analytics engine for Bluesky — it monitors mentions, detects trends, scores sentiment, and generates signals from social data. It costs $0.001 per post-fetched. 4 users have run it 869 times with a 98% success rate. Best for brand managers and researchers analyzing reviews, tracking mentions, or gathering social proof across platforms. Not ideal for real-time social listening or high-frequency sentiment streaming. Maintenance pulse: 90/100. Last verified March 27, 2026. Built by Ryan Clinton (ryanclinton on Apify).

SOCIAL MEDIA

Bluesky Social Search — Monitor, Sentiment, Trends & Alerts

Bluesky Social Search — Monitor, Sentiment, Trends & Alerts is an Apify actor available on ApifyForge at $0.001 per post-fetched. Bluesky Social Search is a social listening and analytics engine for Bluesky — it monitors mentions, detects trends, scores sentiment, and generates signals from social data. Built on the AT Protocol API, it extracts posts, profiles, threads, and social graph data with full engagement metrics, hashtags, mentions, media metadata, and content labels. Bluesky Social Search — Monitor, Sentiment, Trends & Alerts has been used by 4 users across 869 total runs with a 98% success rate over the last 30 days.

Best for brand managers and researchers analyzing reviews, tracking mentions, or gathering social proof across platforms.

Not ideal for real-time social listening or high-frequency sentiment streaming.

Try on Apify Store
$0.001per event
Last verified: March 27, 2026
3
Users (30d)
777
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.001
Per event

What to know

  • Review and post data is limited to publicly visible content on each platform.
  • Platform rate limits may affect throughput for very large queries.
  • Requires an Apify account — free tier available with limited monthly usage.

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

post-fetcheds
Estimated cost:$0.10

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
post-fetchedCharged per Bluesky social post record retrieved.$0.001

Example: 100 events = $0.10 · 1,000 events = $1.00

Documentation

Bluesky Social Search is a social listening and analytics engine for Bluesky — it monitors mentions, detects trends, scores sentiment, and generates signals from social data. In simple terms: it watches Bluesky, analyzes what's happening, and tells you what it means.

Built on the AT Protocol API, it extracts posts, profiles, threads, and social graph data with full engagement metrics, hashtags, mentions, media metadata, and content labels. On top of extraction, it adds built-in sentiment analysis, engagement scoring, trend detection, spike alerts, and signal generation — so you get intelligence, not just data. No Bluesky login or API key is required.

Beginner-friendly — no setup, no infrastructure, no API knowledge required. Instead of building your own AT Protocol pipeline or using raw APIs, Bluesky Social Search gives you structured data and analytics instantly. Compared to basic Bluesky scrapers, it adds sentiment, alerts, trend detection, and signal generation out of the box. Works for brand monitoring, influencer research, academic datasets, market intelligence, or any workflow that needs structured Bluesky data.

Exports to CSV, JSON, Google Sheets, Slack, or any webhook.

Use this if you need Bluesky monitoring, brand alerts, sentiment tracking, trend detection, or trading signals. Don't use this if you need real-time streaming, full historical archives, or private account access.

Bluesky Social Search at a glance

  • Scrape and monitor Bluesky posts, profiles, threads, and followers
  • No login or API key required — uses public AT Protocol endpoints
  • Extract engagement metrics, hashtags, mentions, language, and media metadata
  • Heuristic sentiment scoring on every post (bullish/bearish/neutral — no LLM, zero latency)
  • Engagement scoring, weighted engagement, and viral detection on every post
  • Filter by minimum likes, minimum followers, or language
  • Incremental mode: only get new results since your last run
  • Presets: one-click searches for crypto, AI, markets, climate, viral content
  • Query expansion: automatically broaden short queries with synonyms
  • Influence scoring on every profile (posts-per-follower ratio)
  • Engagement velocity and momentum detection (accelerating/steady/decelerating)
  • Alert conditions: spike thresholds, mention thresholds, ticker spikes, sentiment bias
  • Ticker-level intelligence: per-ticker mentions, engagement, sentiment breakdown
  • Final signal output: STRONG_BULLISH / BULLISH / NEUTRAL / BEARISH / STRONG_BEARISH / LOW_SIGNAL
  • Signal confidence (0-1) based on volume + velocity + weighted engagement
  • Time-series analytics with spike detection in KV store
  • Built-in analytics: top posts, top authors, top hashtags, engagement distribution
  • Export to CSV, JSON, Google Sheets, or retrieve via API
  • Automate Bluesky monitoring with scheduling and webhooks
  • $0.001 per result, pay-per-event

Best for: brand monitoring, trading signals from social data, sentiment tracking, trend detection, influencer research, social listening, hashtag tracking, competitive intelligence, social graph mapping, and exporting Bluesky data to Sheets, dashboards, or AI pipelines. Not for: private account access, full historical archives beyond the API's search window, native date-range filtering, real-time streaming, or automated posting.

Also known as: Bluesky scraper, Bluesky API tool, AT Protocol data extractor, Bluesky post search, Bluesky monitoring tool, Bluesky social listening tool, Bluesky post exporter, Bluesky follower export tool.

Search modesPosts, profiles, author feed, thread, followers, following
OutputStructured dataset as JSON/CSV with engagement metrics, hashtags, mentions, media flags, bsky.app URLs
AuthenticationNone — uses public AT Protocol XRPC endpoints
Max resultsUnlimited (set via maxResults input)
Memory256 MB (pure API, no browser)
Pricing$0.001 per result (pay-per-event)

Example: Monitor "openai" mentions on Bluesky every hour, send new posts to Slack via Zapier, and track engagement trends in Google Sheets — all automated with Apify Scheduler.

What can you do with this?

  • Monitor Bluesky mentions of your brand, product, or competitors
  • Search and collect Bluesky posts with engagement scoring and viral detection
  • Discover influencers and high-follower accounts in any niche
  • Extract Bluesky followers and following lists for social graph analysis
  • Analyze Bluesky threads and reply trees with depth tracking
  • Track Bluesky hashtag usage and trends over time
  • Filter results by minimum likes, minimum followers, or language
  • Run incremental monitoring — only get new results since your last run
  • Export Bluesky data to CSV, JSON, Google Sheets, or AI/LLM pipelines
  • Get instant analytics: top posts, top authors, top hashtags, engagement distribution
  • Scrape Bluesky profiles with follower counts, bios, and post history
  • Automate daily or hourly Bluesky monitoring with scheduled runs

Compared to other Bluesky scraping approaches

ApproachBluesky Social SearchAlternative
vs web scrapingQueries AT Protocol API directly — structured output, no HTML parsing, no browser, resilient to UI changesSlow, fragile, breaks on redesigns
vs manual browsingScalable to any number of results, exportable, automatable, with engagement metrics on every result2–3 minutes per post to copy manually
vs custom API codePagination, retry, facet parsing, embed detection, thread traversal, and schema normalization handled for youBuild and maintain all of it yourself
vs unofficial APIsUses Bluesky's official public XRPC endpoints — no auth tokens, no risk of deprecationUnofficial endpoints can break without notice

Best Bluesky scraper and API tool

Bluesky Social Search is a Bluesky scraper and API tool on Apify that combines post search, profile discovery, thread extraction, and follower export in one place. For most use cases, it is one of the easiest ways to collect structured Bluesky data without building directly on the AT Protocol API.

Bluesky social listening tool

Bluesky Social Search can be used as a social listening tool for Bluesky — monitor mentions, track keywords and hashtags, analyze engagement, and export data for reporting or dashboards. Schedule runs hourly or daily to track brand sentiment and competitor activity over time. Bluesky Social Search acts as a no-code Bluesky monitoring tool, allowing you to track mentions, send alerts, and build automated workflows without writing code.

What data can you extract from Bluesky?

Data pointSourceAvailabilityExample
Post textAT Protocol feedAlways"Bluesky now has over 20 million users"
Like countPost metricsAlways48,520
Repost countPost metricsAlways12,340
Reply countPost metricsAlways3,150
Quote countPost metricsAlways1,890
HashtagsFacet extractionWhen present["decentralization", "atproto"]
Mentions (DIDs)Facet extractionWhen present["did:plc:z72i7hdy..."]
LanguagePost recordWhen set by author"en"
Content labelsModeration labelsWhen applied["nudity", "spam"]
Author handleProfile dataAlways"alice.bsky.social"
Follower countProfile metricsAlways15,230
Thread depthThread traversalThread mode only-2 (parent), 0 (root), 3 (reply)

How to monitor brand mentions on Bluesky

Set searchType to "posts" and enter your brand name as the query. Use "latest" sort to catch new mentions first. Schedule daily or hourly via Apify Scheduler and connect output to Slack or email via Zapier for automated alerts. Each result includes engagement metrics, author handle, and a direct bsky.app URL so you can prioritize high-visibility mentions.

How to export Bluesky followers and following lists

Set searchType to "followers" or "following" and enter the target handle (without the @ symbol). Returns profiles with handle, display name, bio, follower count, and post count. Export as CSV for network analysis, CRM import, or influencer research.

Can I search Bluesky posts without an API key?

Yes. Bluesky Social Search uses Bluesky's public AT Protocol XRPC endpoints, which do not require login credentials, API keys, or a Bluesky account. You can scrape Bluesky without an API key or authentication — all 6 search modes work on public endpoints.

How to analyze Bluesky threads and reply trees

Set searchType to "thread" and provide a post URL (e.g., https://bsky.app/profile/bsky.app/post/3lbfm4g7hsc2c) or an AT Protocol URI. The actor fetches the full conversation tree: parent chain (negative threadDepth values) and nested replies (positive values). The root post has threadDepth: 0. Use this to understand discourse around viral posts or track how conversations develop.

How to export Bluesky posts and data to CSV or Google Sheets

The easiest way to export Bluesky posts to CSV or Google Sheets is to use Bluesky Social Search, which provides built-in exports and automatic syncing via integrations. Run a post search, then download results from the Dataset tab in Apify Console as CSV, JSON, or Excel. For ongoing export to Google Sheets, use the Google Sheets integration to automatically sync results after each scheduled run. The structured output includes one row per post with all engagement metrics and metadata.

Can I track Bluesky hashtags and trends over time?

Yes. Schedule recurring runs with a hashtag as the query and "latest" sort. Each run captures new posts since the last check. Export to Google Sheets or a database to build a time-series view of hashtag usage, engagement trends, and posting volume.

Automate Bluesky monitoring and alerts

Schedule Bluesky Social Search to run on any interval — hourly, daily, or weekly — using Apify Scheduler. Connect output to notification and workflow tools:

  • Slack alerts — Send new brand mentions to a Slack channel via Zapier or Make
  • Email digests — Trigger email summaries when new results arrive via webhooks
  • Google Sheets sync — Auto-append results to a shared spreadsheet after each run
  • Webhook triggers — Push results to any HTTP endpoint for custom pipelines
  • CRM updates — Route influencer profiles to HubSpot or Salesforce via Make

No code required for basic automations. For custom workflows, use the Apify API from Python, JavaScript, or any HTTP client.

Export Bluesky data to CSV, JSON, or Google Sheets

Every run produces a structured dataset you can export in multiple formats:

  • CSV — one row per result, ready for Excel or database import
  • JSON — structured records for programmatic access and pipelines
  • Excel — direct download from Apify Console
  • Google Sheets — automatic sync via Sheets integration
  • API — retrieve datasets programmatically from any language
  • Webhooks — receive results as HTTP POST when a run finishes

All export formats include the full field set: engagement metrics, hashtags, mentions, media flags, language, labels, and bsky.app URLs.

Why use this instead of building directly on AT Protocol?

ConcernThis actorCustom AT Protocol code
PaginationAutomatic cursor handling across 6 endpointsBuild cursor loops per endpoint
Rate limitingAdaptive pacing + exponential backoff on 429/5xxImplement retry logic
Embed parsingDetects 4 embed types (images, video, links, recordWithMedia)Parse embed type switches
Hashtag/mention extractionAutomatic from AT Protocol facetsParse facet objects manually
Repost detectionFlags reposts in author feeds automaticallyCheck reason.$type per item
Thread traversalRecursive parent + reply walk with depth trackingBuild recursive tree walker
Output normalizationConsistent JSON schema across all 6 modesDesign your own schema
SchedulingApify Scheduler (cron)Build and host cron jobs
ExportJSON, CSV, Excel, API, webhooks, SheetsBuild export pipeline
Cost$0.001 per result, no infrastructureEngineering time + hosting

If your use case is a one-off query, curl against the XRPC endpoint works. For repeatable searches, scheduled monitoring, multi-mode extraction, or pipeline integration, this actor eliminates the implementation work.

Search modes

  • Post keyword search — Search posts by any keyword or phrase, sorted by relevance ("top") or chronological order ("latest"), with no hard result limit
  • Profile discovery — Find Bluesky accounts by keyword, returning handle, bio, follower count, following count, and post count
  • Author feed — Get all recent posts from a specific handle, with automatic repost detection
  • Thread extraction — Fetch full conversation trees from any post URL or AT URI, including parent chain and nested replies with depth tracking
  • Follower export — Extract follower list for any handle with full profile data
  • Following export — Extract accounts a handle follows with full profile data

Data enrichment (included automatically)

  • Hashtags — Parsed from AT Protocol facet objects in each post record
  • Mentions — Extracted @mention DIDs from facets for network analysis
  • Language — Language code set by the post author (e.g., "en", "de", "ja")
  • Content labels — Moderation labels applied to posts or profiles
  • Media detection — Flags for images, video, external links, and recordWithMedia composites
  • Embed extraction — URL and title from external link embeds
  • Reply context — Whether a post is a reply, plus the parent post URI
  • Engagement metrics — Like, repost, reply, and quote counts on every post
  • Engagement score — Weighted composite: likes + (reposts x 2) + (replies x 3) + (quotes x 4)
  • Weighted engagement — Engagement score multiplied by log10(author followers + 1). A post with 50 likes from a 100K-follower account scores higher than the same 50 likes from a 10-follower account. Filters spam and bot noise.
  • Viral detectionisViral: true when engagement score reaches 500+
  • Ticker extraction — Cashtags like $BTC, $TSLA, $XAU automatically extracted from post text via regex
  • Cross-run dedup — CID-based deduplication across runs prevents duplicate results from overlapping queries
  • Emerging topics — Compares hashtag frequency against previous run to detect trending topics (in KV summary)
  • Query scoring — For expanded/OR queries, shows which terms produced results and which returned nothing (in KV summary)
  • Smart sorting — Posts sorted by engagement score (highest first), profiles by follower count. Best results appear at the top of your dataset.

Filters

Filter results after fetching to narrow down to exactly what you need. Filters are applied post-fetch, so they work with all search modes.

  • Minimum likes (minLikes) — Only return posts with at least N likes. Use to surface high-engagement content only.
  • Minimum followers (minFollowers) — Only return profiles with at least N followers. Use for influencer discovery.
  • Language filter (language) — Only return posts in a specific language (2-letter ISO code like "en", "de", "ja"). The Bluesky API doesn't support native language filtering, so this actor filters post-fetch using the author-set language code.

Presets

One-click searches for common use cases. Set the preset field and leave everything else blank — the preset fills in query, search type, sort order, and filters.

PresetWhat it does
crypto-pulseLatest posts about Bitcoin, Ethereum, crypto, DeFi
ai-researchLatest posts about AI, machine learning, LLMs, neural networks
tech-newsLatest tech and startup posts with 5+ likes
market-sentimentLatest stock market, trading, and equities posts
climate-watchLatest climate change and renewable energy posts
viral-todayTop posts with 100+ likes across all of Bluesky

Example:

{
    "preset": "crypto-pulse",
    "maxResults": 500,
    "onlyNew": true
}

Query expansion

Enable expandQuery: true to automatically broaden short queries with synonyms. This improves recall without requiring you to manually construct OR queries.

You typeExpands to
btcbitcoin OR btc OR $btc
ethethereum OR eth OR $eth
goldgold OR xau OR "gold price"
ai"artificial intelligence" OR AI OR "machine learning" OR LLM
cryptocrypto OR cryptocurrency OR bitcoin OR ethereum OR defi
stocksstocks OR "stock market" OR equities OR trading OR S&P
climate"climate change" OR "global warming" OR "climate crisis" OR "net zero"

Works with any search mode. If your query isn't in the expansion table, it passes through unchanged.

Influence scoring (profiles)

Every profile result includes an influenceScore — the ratio of posts to followers. This measures how active a creator is relative to their audience size.

  • High score (e.g., 5.0+) — active creator, posts frequently relative to follower count
  • Low score (e.g., 0.01) — passive or celebrity account, large audience but infrequent posting
  • null — no followers (can't compute)

Use this to separate signal accounts from noise when doing influencer discovery or social graph analysis.

Ticker extraction

Every post is scanned for cashtag tickers like $BTC, $TSLA, $XAU, $ETH. Extracted via regex (\$[A-Z]{2,5}), deduplicated per post, and available in the tickers output field. The KV summary includes topTickers — the most-mentioned tickers across all results, ranked by frequency.

Use this for financial signal detection, market sentiment tracking, or filtering posts about specific assets.

Heuristic sentiment

Every post is scored for sentiment using keyword matching — no LLM, no API calls, zero added latency or cost.

  • Bullish keywords: buy, long, moon, breakout, rally, surge, bullish, pump, hodl, opportunity, uptrend, recovery, golden cross, etc.
  • Bearish keywords: sell, short, dump, crash, plunge, bearish, collapse, correction, death cross, panic, rug pull, rekt, capitulation, etc.

Each post gets:

  • sentimentScore — integer (positive = bullish, negative = bearish, 0 = neutral)
  • sentimentLabel"bullish", "bearish", or "neutral"

The KV summary aggregates sentiment across all posts: total bullish/bearish/neutral counts, net sentiment, and overall bias.

Includes built-in real-time sentiment scoring optimized for market and opinion language — no LLM required, zero added latency, fully deterministic. Covers 50+ bullish and bearish keywords. For deeper semantic analysis, the structured output also integrates cleanly with LLM pipelines.

Engagement velocity

The KV summary includes engagement velocity — how the most recent hour compares to the average of previous hours:

  • velocity — ratio (e.g., 2.4 means 2.4x the average engagement)
  • momentum"accelerating" (>1.5x), "steady" (0.5-1.5x), or "decelerating" (<0.5x)

Use velocity to detect momentum shifts in real-time monitoring. A spike combined with bullish sentiment and high velocity is a strong signal.

Alert conditions

Set thresholds in the input and the actor flags alerts in the KV summary when conditions are met. No extra cost — alerts are computed from data already collected.

InputTypeDescription
alertSpikeMultipliernumberTrigger spike alert when hourly volume exceeds this multiplier of average (default: 2)
alertMinMentionsintegerTrigger mention alert when total count reaches this threshold

The actor also automatically triggers:

  • Ticker spike alerts when a ticker has 10+ mentions and engagement is accelerating
  • Sentiment bias alerts when >60% of opinionated posts lean one direction

Alerts appear in the KV summary under the marketAlerts key with type, message, and supporting data.

Ticker intelligence

Beyond simple extraction, the KV summary includes per-ticker intelligence:

{
    "ticker": "$BTC",
    "mentions": 842,
    "totalEngagement": 120000,
    "avgWeightedEngagement": 340.5,
    "sentimentBias": "bearish",
    "bullishPosts": 120,
    "bearishPosts": 280
}

Top 20 tickers ranked by mention count. Use this for multi-asset monitoring, portfolio sentiment tracking, or building alternative data feeds.

Final signal

The KV summary opens with a single decision-ready field — signal — that compresses sentiment, velocity, and confidence into one label:

SignalMeaning
STRONG_BULLISHConfidence ≥0.8 + accelerating momentum + bullish sentiment
BULLISHConfidence ≥0.5 + bullish sentiment
NEUTRALMixed or insufficient directional signal
BEARISHConfidence ≥0.5 + bearish sentiment
STRONG_BEARISHConfidence ≥0.8 + accelerating momentum + bearish sentiment
LOW_SIGNALConfidence below 0.3 — too little data to assess

Every signal comes with signalDrivers — a plain-English array explaining why it fired:

{
    "signal": "STRONG_BULLISH",
    "signalDrivers": [
        "High confidence (0.82)",
        "Accelerating momentum (2.1x)",
        "bullish sentiment (68% of opinionated posts)",
        "3 viral posts"
    ]
}

Thresholds are deliberately tight — STRONG_* requires ≥0.8 confidence AND accelerating momentum. This means fewer signals, but the ones that fire are worth acting on.

Signal confidence

Every run's KV summary includes signalConfidence (0.0 to 1.0) — the reliability of the signal:

  • Volume signal (30%) — more posts = higher confidence
  • Velocity signal (30%) — engagement acceleration = higher confidence
  • Engagement signal (40%) — higher weighted engagement = higher confidence

0.8+ means high volume, accelerating engagement, and strong author-weighted signal. Below 0.3 means sparse data — treat with caution.

Cross-run intelligence

When you run the actor repeatedly (with or without onlyNew), it builds intelligence across runs:

  • Dedup — Results are deduplicated by CID/DID across runs. If a post was returned in a previous run, it won't appear again. The actor stores up to 50,000 CIDs.
  • Emerging topics — The actor saves hashtag frequency per run. On subsequent runs, it compares current hashtag counts against the previous run and flags emerging topics with growth percentages (e.g., "xau": +240%). Available in the KV summary under emergingTopics.
  • Query scoring — For expanded or OR queries, the KV summary includes queryScoring — a breakdown of which query terms actually matched posts and how many hits each got. Terms with 0 hits are logged as warnings.

These features work automatically with no extra configuration. Run the same query twice and the second run is smarter.

Incremental monitoring (only new results)

Enable onlyNew: true to turn Bluesky Social Search into a true monitoring tool. On each run, the actor saves a timestamp. On the next run, it only returns results newer than that timestamp — so you never see the same post twice.

How to set up daily brand monitoring:

  1. Set searchType to "posts", enter your brand name, set sortBy to "latest"
  2. Enable onlyNew
  3. Schedule the actor to run daily or hourly via Apify Scheduler
  4. Connect output to Slack, email, or Google Sheets via integrations

Each run only returns new mentions, so your alerts stay clean and actionable.

Analytics (KV store)

Every run saves rich analytics to the KV store SUMMARY key — no extra cost, no extra setup. The analytics are computed from your results automatically.

Post analytics include:

  • Top 5 posts by engagement score (with text preview, handle, score, URL)
  • Top 10 authors by total engagement across all their posts in the result set
  • Top 10 authors by efficiency (highest average engagement per post, minimum 2 posts)
  • Top 10 hashtags by frequency
  • Language breakdown (how many posts per language)
  • Media breakdown (images vs video vs links)
  • Content breakdown (original posts vs replies vs reposts)
  • Engagement distribution (total, average, median)
  • Viral post count
  • Time series — posts and engagement bucketed by hour
  • Sentiment breakdown — bullish/bearish/neutral counts, net sentiment, overall bias
  • Engagement velocity — last hour vs average, momentum status (accelerating/steady/decelerating)
  • Signal confidence (0-1) — composite signal reliability metric
  • Spike detection — hours with 2x+ average volume flagged automatically
  • Ticker intelligence — per-ticker mentions, engagement, sentiment breakdown (top 20)
  • Market alerts — triggered conditions (spikes, mention thresholds, ticker spikes, sentiment bias)
  • Query scoring — per-term hit counts for OR queries (shows which terms worked)
  • Emerging topics — hashtags growing vs previous run (cross-run intelligence)

Profile analytics include:

  • Top 10 profiles by follower count
  • Top 10 profiles by influence score (most active relative to audience)
  • Total followers and posts across all profiles
  • Average followers per profile

Access analytics via the Apify API: GET /v2/key-value-stores/{storeId}/records/SUMMARY

Use cases

Brand monitoring on Bluesky

Track mentions of your company, product, or trademark. Schedule daily runs, sort by "latest", and pipe results into Slack or email for alerts. Key outputs: post text, author handle, engagement metrics, bsky.app URL.

Influencer discovery and research

Search profiles by niche keywords to find high-follower accounts. Export follower counts, then use author feed mode to analyze their content strategy and engagement patterns.

Competitive intelligence

Search posts for competitor brand names to monitor launches, campaigns, and public sentiment. Compare engagement patterns across competitors by running parallel searches.

Social graph analysis

Map influence networks by extracting followers and following lists for target handles. Cross-reference common connections to identify network clusters and community leaders.

Academic and discourse research

Export structured datasets with language codes, content labels, and thread depth for corpus analysis on decentralized social platforms.

Bluesky data for AI and LLM pipelines

Feed structured post data into LangChain, LlamaIndex, or custom NLP pipelines for sentiment classification, topic modeling, or content generation. The JSON output maps directly to common AI framework input formats.

Input parameters

ParameterTypeRequiredDefaultDescription
searchTypeenumNo"posts"posts, profiles, feed, thread, followers, or following
querystringFor posts/profilesSearch keyword. Also accepts post URL or AT URI for thread mode.
handlestringFor feed/followers/followingBluesky handle (e.g., jay.bsky.team). Omit the @.
postUrlstringFor threadBluesky post URL or AT URI
sortByenumNo"top"top (relevance) or latest (chronological). Post search only.
maxResultsintegerNo100No upper limit
minLikesintegerNoOnly return posts with at least this many likes
minFollowersintegerNoOnly return profiles with at least this many followers
languagestringNoOnly return posts in this language (2-letter code, e.g., "en")
presetenumNoOne-click search preset: crypto-pulse, ai-research, tech-news, market-sentiment, climate-watch, viral-today. Overrides query and filters.
expandQuerybooleanNofalseExpand short queries with synonyms (e.g., btcbitcoin OR btc OR $btc)
alertSpikeMultipliernumberNoTrigger spike alert when hourly volume exceeds this multiplier of average
alertMinMentionsintegerNoTrigger alert when total mentions reach this threshold
onlyNewbooleanNofalseOnly return results newer than your last run (incremental monitoring)

Input examples

Post search:

{
    "searchType": "posts",
    "query": "artificial intelligence",
    "sortBy": "latest",
    "maxResults": 200
}

Author feed:

{
    "searchType": "feed",
    "handle": "jay.bsky.team",
    "maxResults": 500
}

Thread extraction:

{
    "searchType": "thread",
    "postUrl": "https://bsky.app/profile/bsky.app/post/3lbfm4g7hsc2c",
    "maxResults": 100
}

Follower export:

{
    "searchType": "followers",
    "handle": "bsky.app",
    "maxResults": 1000
}

Brand monitoring (incremental, English only, 50+ likes):

{
    "searchType": "posts",
    "query": "openai",
    "sortBy": "latest",
    "maxResults": 500,
    "minLikes": 50,
    "language": "en",
    "onlyNew": true
}

Output example

Post result:

{
    "type": "post",
    "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3lbfm4g7hsc2c",
    "cid": "bafyreigxkzbjkr5h4p7tnj6k5q3dxwvhnmyclass47x6mtcfoknu4suvsi",
    "author": {
        "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
        "handle": "bsky.app",
        "displayName": "Bluesky",
        "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihagr2..."
    },
    "text": "Bluesky now has over 20 million users! Thank you to everyone who has joined.",
    "createdAt": "2024-11-20T18:30:00.000Z",
    "language": "en",
    "hashtags": ["bluesky", "decentralization"],
    "mentions": [],
    "likeCount": 48520,
    "repostCount": 12340,
    "replyCount": 3150,
    "quoteCount": 1890,
    "engagementScore": 82690,
    "weightedEngagement": 504415.1,
    "sentimentScore": 0,
    "sentimentLabel": "neutral",
    "isViral": true,
    "isReply": false,
    "parentPostUri": null,
    "hasImages": false,
    "hasVideo": false,
    "hasLink": true,
    "embedUrl": "https://bsky.social/about/blog/11-20-2024-20-million",
    "embedTitle": "Bluesky Reaches 20 Million Users",
    "isRepost": false,
    "tickers": [],
    "labels": [],
    "blueskyUrl": "https://bsky.app/profile/bsky.app/post/3lbfm4g7hsc2c"
}

Profile result:

{
    "type": "profile",
    "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
    "handle": "bsky.app",
    "displayName": "Bluesky",
    "description": "Official account for Bluesky Social. Building a social internet.",
    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihagr2...",
    "banner": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreib3...",
    "followersCount": 1250000,
    "followsCount": 35,
    "postsCount": 890,
    "influenceScore": 0.001,
    "labels": [],
    "createdAt": "2023-04-12T00:00:00.000Z",
    "blueskyUrl": "https://bsky.app/profile/bsky.app"
}

Output fields

Post fields:

FieldTypeDescription
typestringAlways "post"
uristringAT Protocol URI
cidstringContent identifier hash
author.didstringAuthor's DID (permanent identifier)
author.handlestringAuthor's handle (e.g., alice.bsky.social)
author.displayNamestringDisplay name
author.avatarstring/nullAvatar URL
textstringPost text
createdAtstringISO 8601 timestamp
languagestring/nullLanguage code. Null if not set by author.
hashtagsstring[]From AT Protocol facets. Empty if none.
mentionsstring[]Mentioned DIDs from facets. Empty if none.
likeCountnumberLikes
repostCountnumberReposts
replyCountnumberReplies
quoteCountnumberQuote posts
engagementScorenumberWeighted engagement: likes + (reposts x 2) + (replies x 3) + (quotes x 4)
weightedEngagementnumberEngagement weighted by author authority: engagementScore * log10(followers + 1). Filters spam, boosts real signal.
sentimentScorenumberHeuristic sentiment: positive = bullish, negative = bearish, 0 = neutral
sentimentLabelstring"bullish", "bearish", or "neutral"
isViralbooleanWhether engagement score reached 500+
isReplybooleanWhether this is a reply
parentPostUristring/nullParent post URI if reply
hasImagesbooleanContains image attachments
hasVideobooleanContains video
hasLinkbooleanContains external link embed
embedUrlstring/nullExternal link URL
embedTitlestring/nullExternal link title
isRepostbooleanWhether this is a repost (feed mode)
tickersstring[]Cashtags extracted from text (e.g., $BTC, $TSLA). Empty if none.
labelsstring[]Content moderation labels
threadDepthnumberThread position (thread mode only): negative = parent, 0 = root, positive = reply
blueskyUrlstringDirect bsky.app URL

Profile fields:

FieldTypeDescription
typestringAlways "profile"
didstringDID (permanent identifier)
handlestringBluesky handle
displayNamestringDisplay name
descriptionstring/nullBio text
avatarstring/nullAvatar URL
bannerstring/nullBanner URL
followersCountnumberFollowers
followsCountnumberFollowing
postsCountnumberTotal posts
influenceScorenumber/nullPosts-per-follower ratio. High = active creator, low = passive account.
labelsstring[]Content moderation labels
createdAtstring/nullAccount creation timestamp
blueskyUrlstringDirect bsky.app URL

Pricing

$0.001 per result returned. Pay-per-event — you only pay for data delivered. ~$1 to generate a full market signal from 1,000 posts.

ResultsCost
100$0.10
500$0.50
1,000$1.00
10,000$10.00
50,000$50.00

Scheduled runs compound — 10,000 results/day = ~$300/month. Set a spending limit on your Apify account to cap costs.

The actor stops returning results when the limit is reached and shows your total PPE charges in the final status message. Apify's free tier includes $5/month in platform credits.

Typical performance

MetricTypical valueNotes
100 results~5 secondsSingle API page, based on internal testing April 2026
500 results~20 secondsVaries with API response times
1,000 results~30 secondsAdaptive rate limiting with automatic backoff
10,000 results~5 minutesIncrease timeout for large exports
Memory256 MBPure API, no browser rendering

API usage

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/bluesky-social-search").call(run_input={
    "searchType": "posts",
    "query": "artificial intelligence",
    "sortBy": "latest",
    "maxResults": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['author']['handle']}: {item['text'][:80]}...")
    print(f"  Likes: {item['likeCount']} | Reposts: {item['repostCount']}")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/bluesky-social-search").call({
    searchType: "posts",
    query: "artificial intelligence",
    sortBy: "latest",
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    console.log(`${item.author.handle}: ${item.text.substring(0, 80)}...`);
    console.log(`  Likes: ${item.likeCount} | Reposts: ${item.repostCount}`);
}

cURL

curl -X POST "https://api.apify.com/v2/acts/ryanclinton~bluesky-social-search/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchType":"posts","query":"artificial intelligence","sortBy":"latest","maxResults":100}'

curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

How it works

Each search type maps to a specific AT Protocol XRPC endpoint:

ModeEndpoint
Postsapp.bsky.feed.searchPosts
Profilesapp.bsky.actor.searchActors
Author feedapp.bsky.feed.getAuthorFeed
Threadapp.bsky.feed.getPostThread
Followersapp.bsky.graph.getFollowers
Followingapp.bsky.graph.getFollows

The actor handles cursor-based pagination (up to 100 results per page) with adaptive pacing and automatic retry with exponential backoff on HTTP 429 and 5xx errors (up to 3 attempts). If the API returns repeated failures, pagination stops gracefully and returns the results collected so far — your data is never lost. Raw responses are normalized into consistent schemas — facets are parsed for hashtags and mentions, 4 embed types are detected, and feed items are checked for repost flags.

In thread mode, the actor requests parentHeight: 10 and walks the parent chain recursively (negative depth values), then walks replies (positive depth values). The root post is threadDepth: 0.

Limitations

  • Search window depth — AT Protocol search endpoints have a practical index depth. Very old posts may not be reachable via search. For ongoing collection, schedule recurring runs.
  • No native date-range filtering — The Bluesky search API does not accept date parameters. Filter the createdAt field after export.
  • No native language filtering — Results may include any language matching the query text. Filter using the language output field.
  • Public content only — Unauthenticated endpoints. Private accounts and blocked content are not accessible.
  • Rate limiting — Adaptive pacing with automatic backoff on 429 responses. ~1,000 results per 20 seconds under normal conditions.
  • Embed scope — Detects images, video, external links, and recordWithMedia. Feed generator and list embeds are not flagged.
  • Handle changes — Constructed bsky.app URLs use the handle at search time and may break if the user changes their handle. The did field is permanent.
  • Thread depth — Up to 10 parent levels and reply depth limited by maxResults.

Integrations

  • Zapier — Send Bluesky alerts to Slack, email, or Sheets
  • Make — Multi-step workflows routing results to CRMs
  • Google Sheets — Auto-sync results to shared spreadsheets
  • Apify API — Trigger from Python, JavaScript, or any HTTP client
  • Webhooks — Receive results via HTTP POST
  • LangChain / LlamaIndex — Feed data into LLM pipelines

Combine with other actors

ActorCombination
Website Contact ScraperExtract emails from websites linked in Bluesky post embeds
Company Deep ResearchResearch companies mentioned in Bluesky posts
Trustpilot Review AnalyzerCross-reference Bluesky brand mentions with review sentiment

FAQ

How is this different from scraping the Bluesky website? This actor queries the official AT Protocol XRPC API — the same data layer that powers the Bluesky app. Structured output from the source, no HTML parsing, no browser overhead, no breakage when the UI changes.

Can I search Bluesky posts by date range? Not natively. Use "latest" sort and filter createdAt after export. For ongoing date-bounded collection, schedule daily runs.

What is the AT Protocol? The Authenticated Transfer Protocol is the open, decentralized protocol powering Bluesky. It defines how user identities (DIDs), posts, and social interactions work across federated servers. This actor queries its XRPC API layer.

Can I use this for sentiment analysis? Yes. Every post includes built-in heuristic sentiment scoring (sentimentScore and sentimentLabel: bullish/bearish/neutral) optimized for market and opinion language. The KV summary aggregates sentiment across all results with a net bias and confidence score. For deeper semantic analysis, the structured output also integrates with LLM pipelines like LangChain.

What are DIDs and why do they matter? DIDs (Decentralized Identifiers) are permanent cryptographic account identifiers. Unlike handles, a DID never changes. Both are included in output so you can track accounts across handle changes.

Does it detect reposts? Yes. In author feed mode, the isRepost field flags reshared content vs original posts.

Is it legal to extract Bluesky data? This actor accesses publicly available data through AT Protocol's public API endpoints. Legality depends on jurisdiction, use case, and compliance with Bluesky's Terms of Service and data protection laws. Consult legal counsel for your situation.

What happens if a user changes their handle? The blueskyUrl uses the handle at search time and may redirect or break. The did field is permanent and can always resolve the current handle.

Tips

  1. Use "latest" sort for monitoring — catches new posts as they appear. "top" is better for discovering high-engagement content.
  2. Start with 25–50 results — test your query before scaling to hundreds.
  3. Omit the @ from handles — use jay.bsky.team, not @jay.bsky.team.
  4. Combine post search with author feed — find interesting authors from post results, then analyze their full posting history.
  5. Cross-reference followers and following — run both exports to identify mutual connections and network clusters.
  6. Filter by language after export — use the language output field in your spreadsheet or pipeline.

Troubleshooting

"Query is required" error — You selected posts or profiles mode but left the query empty.

"Handle is required" error — You selected feed, followers, or following mode but left the handle empty.

Zero results — Query may be too specific, account may have no public posts, or handle may be misspelled. Verify on bsky.app.

Timeout — Large result sets (5,000+) may exceed the default timeout. Increase the timeout in run configuration for big exports.

Spending limit reached — Your Apify spending limit was hit. Increase it in account settings or reduce maxResults.

Responsible use

Bluesky Social Search accesses publicly available data via the AT Protocol API. It does not bypass authentication, CAPTCHAs, or access restricted content. Users must comply with applicable laws, Bluesky's Terms of Service, and data protection regulations (GDPR, CCPA). Do not use extracted data for spam, harassment, or unauthorized advertising.

Support

Found a bug or have a feature request? Open an issue in the Issues tab. For custom solutions, reach out through the Apify platform.

Last verified: March 27, 2026

Ready to try Bluesky Social Search — Monitor, Sentiment, Trends & Alerts?

Start for free on Apify. No credit card required.

Open on Apify Store