Bluesky Actor Search Scraper

Search public Bluesky profiles by keyword and export handles, DIDs, bios, avatars, labels, verification metadata, and profile URLs.

Data fields

FieldTypeDescription
querystringValue exported as query.
modestringValue exported as mode.
rankintegerValue exported as rank.
didstring | nullValue exported as did.
handlestring | nullValue exported as handle.
displayNamestring | nullValue exported as displayName.
descriptionstring | nullValue exported as description.
avatarstring | nullValue exported as avatar.

Input preview

queriesSearch queries *
modeSearch mode
maxItemsMaximum profiles
limitPerRequestProfiles per API request
includeRawProfileInclude raw profile JSON

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Discover public Bluesky profiles by keyword using the official public Bluesky actor search API. Export profile handles, DIDs, bios, avatars, labels, verification metadata, and profile URLs for social listening, source discovery, and lead research.

At a glance

  • Primary job: Find public Bluesky profiles that match keywords before downstream feed, follower, or profile enrichment.
  • Input: Search queries, search mode, and a maximum profile limit.
  • Output: One dataset row per unique public Bluesky profile.
  • Best for: Brand monitoring, journalist/source discovery, community mapping, influencer prospecting, and research workflows.

Who is it for?

Social listening teams, journalists, community managers, influencer researchers, and developers can use this Bluesky profile search workflow to find public accounts and export stable handles and DIDs. This Bluesky scraper also fits scheduled monitoring and Bluesky API enrichment pipelines.

Common workflows

  • Social listening discovery: Search product, brand, or community terms to find relevant Bluesky accounts.
  • Journalist and expert sourcing: Find profiles that mention beats, topics, organizations, or credentials.
  • Lead and influencer prospecting: Export handles and DIDs for downstream CRM, follower, or feed analysis.
  • Automation: Schedule repeat runs and export datasets through CSV, JSON, Excel, API, webhooks, or MCP tools.

Input recipes

  • Brand discovery: queries: ["apify", "web scraping"], mode: "searchActors", maxItems: 50.
  • Topic experts: queries: ["climate", "science journalist"], mode: "searchActors", maxItems: 75.
  • Typeahead suggestions: queries: ["open source", "marketing"], mode: "typeahead", maxItems: 20, includeRawProfile: true.

What data can you extract?

Field Description
query Search keyword that produced the profile.
mode searchActors or typeahead.
rank Profile rank within the query before duplicate skips.
did Bluesky / AT Protocol decentralized identifier.
handle Public Bluesky handle.
displayName Public display name, when available.
description Public profile bio, when available.
avatar, banner Public profile image URLs, when available.
followersCount, followsCount, postsCount Current public profile statistics from Bluesky profile-detail enrichment.
createdAt, indexedAt Public timestamps returned by Bluesky.
labels, associated, verification, status Public profile metadata returned by Bluesky.
sourceUrl Public bsky.app profile URL.
scrapedAt Timestamp when the Actor saved the row.
rawProfile Optional raw Bluesky profile JSON.

Example input

{
  "queries": ["apify", "climate"],
  "mode": "searchActors",
  "maxItems": 10,
  "limitPerRequest": 10,
  "includeRawProfile": false
}

Example output

{
  "query": "apify",
  "mode": "searchActors",
  "rank": 1,
  "did": "did:plc:example",
  "handle": "apify.com",
  "displayName": "Apify",
  "description": "Web scraping and automation platform.",
  "avatar": "https://cdn.bsky.app/img/avatar/...",
  "banner": "https://cdn.bsky.app/img/banner/...",
  "followersCount": 4200,
  "followsCount": 180,
  "postsCount": 640,
  "createdAt": "2024-01-01T00:00:00.000Z",
  "indexedAt": "2026-07-24T00:00:00.000Z",
  "labels": [],
  "associated": {},
  "verification": null,
  "status": null,
  "sourceUrl": "https://bsky.app/profile/apify.com",
  "scrapedAt": "2026-07-24T08:00:00.000Z",
  "rawProfile": null
}

Tips for best results

  • Start small: Use maxItems: 10 until output quality and pricing are verified.
  • Use focused keywords: Brand names, topics, occupations, and communities work better than very broad words.
  • Use typeahead for suggestions: typeahead is best for quick autocomplete-style candidates, not exhaustive discovery.
  • Use downstream actors: Feed/follower/profile actors can enrich handles or DIDs found here.

API usage

Node.js:

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/bluesky-actor-search-scraper").call({
  queries: ["apify"],
  mode: "searchActors",
  maxItems: 10
});
console.log(run.defaultDatasetId);

Python:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/bluesky-actor-search-scraper").call(run_input={
    "queries": ["apify"],
    "mode": "searchActors",
    "maxItems": 10,
})
print(run["defaultDatasetId"])

cURL:

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~bluesky-actor-search-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["apify"],"mode":"searchActors","maxItems":10}'

MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/bluesky-actor-search-scraper"

MCP server JSON configuration:

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/bluesky-actor-search-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}

Example prompt: "Run Bluesky Actor Search Scraper for climate journalists and summarize the top profile handles."

Limits and caveats

  • Scope: This Actor searches public profiles only. It does not scrape posts, replies, DMs, logged-in viewer state, or private data.
  • Completeness: Bluesky search ranking and available fields are controlled by Bluesky's public API.
  • Rate limits: Very large or frequent runs may be throttled by the public API; the Actor uses bounded retries.

Legality and responsible use

Process only data that users are allowed to access. Follow Bluesky's terms, Apify's terms, and applicable laws.

Support

Open an issue from the Actor page if a run fails or output looks wrong: https://apify.com/fetch_cat/bluesky-actor-search-scraper/issues. Include the run ID or run URL, a reproducible public URL or example public URL, input JSON, expected output, and actual output.

Common questions

Questions and answers reused from the canonical actor README.

What data can I export with Bluesky actor search?

You can export public profile handles, DIDs, display names, descriptions, avatars, labels, verification metadata, profile URLs, and optional raw profile data. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

Can I run Bluesky Actor Search Scraper through an API, schedule, or MCP client?

Yes. Run it through the Apify API or SDK, schedule recurring searches in Console, or connect it to an MCP-compatible AI client using the setup above.

How much does a run cost?

Runs charge once at startup and per unique profile saved. Check the live Pricing tab for current rates and plan-tier discounts.

Why are some fields empty?

Bluesky profiles are sparse and the public API does not expose every field for every account. The Actor leaves unavailable fields empty instead of guessing.