Bluesky: scrapers and the official API, compared

Public posts, profiles, feeds, threads, likes and reposts from Bluesky.

Short answer

Bluesky's official Bluesky API (AT Protocol) is public and free (public read endpoints need no account or key); start there for single lookups, and use a scraper when you need many posts in one run. For most Bluesky jobs, start with Bluesky Posts, Profiles, Feeds & Threads Scraper: it covers 7 of 7 core fields (url, created, author, display and 3 more) at $0.99 per 1,000 results on Apify's Free plan. The top published score for Bluesky goes to Bluesky Followers Scraper by blueskyscraper (93 of 100), a Store tool from another publisher, listed for reference.

From published Store listings, output schemas and the official documentation. Checked 2026-11-06. How the ranking works.

Bluesky Posts, Profiles, Feeds & Threads Scraper: inputs, code and costOpen in Apify Store

1 catalogue Actor 8 other Store tools Official API: Public API Lowest rate  $0.50 per 1K

Route map

Each line is one way to get Bluesky data; each stop is a field you probably need. Green lines are catalogue Actors, ranked by the published formula.

Route diagram for Bluesky dataBluesky Posts, Profiles, Feeds & Threads Scraper: stops at 6 of the 10 fields shown; Other Store tools (8): stops at 10 of the 10 fields shown; Bluesky API (AT Protocol): public, field coverage not compared.BlueskyurlcreatedauthordisplaytextlikefollowersCountfollowsCountpostsCountreplyCount1+API

Stops are fields. A ring means the field is in that route's published output schema; no ring means the line passes without it. Bold labels are the core fields for this website, the rest are fields that differ between routes. A white capsule means every data line stops there. The red line is the official API; its field coverage is not compared. A crossed red line means there is no open official API.

Catalogue Actors for Bluesky

Bluesky Posts, Profiles, Feeds & Threads Scraper

Search Bluesky posts by keyword, hashtag, author, mention, domain or URL; read profiles, threads, lists, starter packs, feeds and followers;…

7/7 core fields 8 output fields $0.99 per 1K Open in Apify Store

Field matrix: who returns what

Every tool with a published output schema, against the 7 fields most Bluesky jobs need. A dot means the field name appears in the schema; rows can still leave it empty.

Which tools return each core Bluesky field, from published output schemas
ToolurlcreatedauthordisplaytextlikerepostFields
Bluesky Posts, Profiles, Feeds & Threads Scraper●●●●●●●7/7
Bluesky Followers ScraperReference only, by blueskyscraper●●–●●●●6/7
Bluesky Posts ScraperReference only, by lexis-solutions●●●–●●●6/7
Bluesky ScraperReference only, by cryptosignals●●●●●●●7/7
Bluesky ScraperReference only, by fatihtahta●●●–●●●6/7
Bluesky ScraperReference only, by goat255●●●●●●●7/7
Bluesky ScraperReference only, by nocodeventure●●●–●●●6/7
Bluesky ScraperReference only, by sian.agency●●●●●●●7/7
Bluesky Users ScraperReference only, by lexis-solutions●––●–––2/7
Tools returning it9876888

Field dictionary: the exact keys

The same core field has a different key in each Actor's output. Map these before you merge datasets; a dash means the published schema has no matching key. Need a field that is not listed here, such as email? Search every Bluesky Actor by field.

Output keys for each core Bluesky field in the top catalogue Actors
Core field Bluesky Posts, Profiles…
url url
created createdAt
author authorHandle
display displayName
text text
like likeCount
repost repostCount

All 9 tools, scored

Catalogue Actors link to their detail pages; the score (0 to 100) is the published formula, identical for every tool. Other Store tools follow in their own table, for reference. Price is the published primary-result rate per 1,000 (the Free-plan rate where the price is tiered; higher Apify plans pay less); start events and platform usage are excluded.

Catalogue Actors for Bluesky, ranked by the published method
Sample fields
87
Bluesky Posts, Profiles, Feeds & Threads Scraper Catalogue Actor, pay per event
url, createdAt, authorHandle 8 $0.99 10 runs, too few to rate Nov 2026

Other Store tools, for reference

Scored with the same published formula and listed for comparison only; this site does not link or recommend them.

Other Store tools for Bluesky, for reference
Sample fields
93
Bluesky Followers Scraper Reference only, by blueskyscraper
uri, createdAt, displayName 78 $0.50 100% of 144 runs Nov 2026
92
Bluesky Posts Scraper Reference only, by lexis-solutions
url, createdAt, authorName 8 $1.10 100% of 4,248 runs Apr 2026
91
Bluesky Scraper Reference only, by cryptosignals
postUrl, createdAt, authorHandle 24 $3.00 98% of 401 runs Sep 2026
91
Bluesky Scraper Reference only, by fatihtahta
uri, createdAt, authorHandle 48 $1.49 100% of 24,598 runs May 2026
91
Bluesky Scraper Reference only, by goat255
uri, createdAt, authorDisplayName 33 $2.30 100% of 59 runs Nov 2026
90
Bluesky Scraper Reference only, by nocodeventure
uri, createdAt, author 13 $1.00 100% of 228 runs Apr 2026
83
Bluesky Scraper Reference only, by sian.agency
url, created_at, author_handle 39 $6.00 100% of 1,927 runs Sep 2026
56
Bluesky Users Scraper Reference only, by lexis-solutions
url, displayName, id 11 $9.00 100% of 2,649 runs Sep 2026

Official API route

Bluesky API (AT Protocol)

Many Bluesky app endpoints are public and need no authentication via public.api.bsky.app; the firehose and Jetstream stream network data without auth. The docs moved from docs.bsky.app to bsky.network.

Price. Free; public read endpoints need no account or key.

Limits. Bluesky-hosted PDS instances allow 3,000 API requests per 5 minutes per IP; account record writes are capped at 5,000 points per hour and 35,000 per day. Limits on other services differ and may change.

Official documentation

Public posts only; respect Bluesky's terms, developer guidelines and personal-data rules. This is general information, not legal advice.

Read Bluesky's terms. Keep to public data, do not bypass logins or access controls, and check whether personal data is involved before you collect it. The can-I-scrape checklist walks through it.

How to start

  1. Open Bluesky Posts, Profiles, Feeds & Threads Scraper and start from its default input; its Actor page has the full example input and code.
  2. Set the Bluesky search, profile, listing or URL you need and a result limit; the required input is mode.
  3. Run it and export the dataset as JSON, CSV or Excel, or call it from the Apify API.

Call Bluesky Posts, Profiles, Feeds & Threads Scraper from code

The example input uses the Actor's published defaults; set your own Bluesky query before you run it. You need an Apify API token.

Python

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
    "mode": "profile",
    "searchQuery": "bluesky",
    "searchSort": "latest",
    "searchTags": [],
    "authorFeedFilter": "posts_with_replies",
    "includePins": False,
    "includeParents": False,
    "threadDepth": 6,
    "maxRepliesPerPost": 100,
    "actor": "bsky.app",
    "actors": [],
    "postUris": [],
    "postUrls": [],
    "listUris": [],
    "starterPackUris": [],
    "feedPreset": "whats-hot",
    "feedUris": [],
    "discoveryType": "trendingTopics",
    "excludeReplies": False,
    "excludeReposts": False,
    "mediaOnly": False,
    "excludeLabeled": False,
    "respectNoUnauthenticated": True,
    "verifiedOnly": False,
    "includeListMetadata": False,
    "includeStarterPackMembers": True,
    "hydrateAuthors": False,
    "maxItems": 3
}

run = client.actor("nimbryxo-studio/bluesky-posts-profiles-feeds-and-threads-scraper").call(run_input=run_input)
if run is None:
    raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

pip install apify-client

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
    "mode": "profile",
    "searchQuery": "bluesky",
    "searchSort": "latest",
    "searchTags": [],
    "authorFeedFilter": "posts_with_replies",
    "includePins": false,
    "includeParents": false,
    "threadDepth": 6,
    "maxRepliesPerPost": 100,
    "actor": "bsky.app",
    "actors": [],
    "postUris": [],
    "postUrls": [],
    "listUris": [],
    "starterPackUris": [],
    "feedPreset": "whats-hot",
    "feedUris": [],
    "discoveryType": "trendingTopics",
    "excludeReplies": false,
    "excludeReposts": false,
    "mediaOnly": false,
    "excludeLabeled": false,
    "respectNoUnauthenticated": true,
    "verifiedOnly": false,
    "includeListMetadata": false,
    "includeStarterPackMembers": true,
    "hydrateAuthors": false,
    "maxItems": 3
};

const run = await client.actor("nimbryxo-studio/bluesky-posts-profiles-feeds-and-threads-scraper").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

npm install apify-client

cURL

curl -X POST "https://api.apify.com/v2/actors/nimbryxo-studio~bluesky-posts-profiles-feeds-and-threads-scraper/run-sync-get-dataset-items"   -H "Authorization: Bearer $APIFY_TOKEN"   -H "Content-Type: application/json"   -d '{"mode":"profile","searchQuery":"bluesky","searchSort":"latest","searchTags":[],"authorFeedFilter":"posts_with_replies","includePins":false,"includeParents":false,"threadDepth":6,"maxRepliesPerPost":100,"actor":"bsky.app","actors":[],"postUris":[],"postUrls":[],"listUris":[],"starterPackUris":[],"feedPreset":"whats-hot","feedUris":[],"discoveryType":"trendingTopics","excludeReplies":false,"excludeReposts":false,"mediaOnly":false,"excludeLabeled":false,"respectNoUnauthenticated":true,"verifiedOnly":false,"includeListMetadata":false,"includeStarterPackMembers":true,"hydrateAuthors":false,"maxItems":3}'

Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).

MCP (AI agents)

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=nimbryxo-studio/bluesky-posts-profiles-feeds-and-threads-scraper",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}

Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.

Questions people ask

What is the cheapest catalogue Actor for Bluesky data?

Bluesky Posts, Profiles, Feeds & Threads Scraper lists $0.99 per 1,000 results (pay per event), with 8 fields in its published output schema. Start events and platform usage are billed separately. Checked 2026-11-06.

Which Bluesky scraper returns the most core fields?

Bluesky Posts, Profiles, Feeds & Threads Scraper covers 7 of the 7 core Bluesky fields this page tracks (url, created, author, display, text, like, repost), based on its published output schema.

Does Bluesky have an official API?

Public API: Many Bluesky app endpoints are public and need no authentication via public.api.bsky.app; the firehose and Jetstream stream network data without auth. The docs moved from docs.bsky.app to bsky.network. Free; public read endpoints need no account or key.

Is it legal to scrape Bluesky?

It depends on what you collect and how. Public posts only; respect Bluesky's terms, developer guidelines and personal-data rules. Read Bluesky's terms (https://bsky.social/about/support/tos) before you collect, and check whether personal data is involved. This is general information, not legal advice.

More on Bluesky

Sources

Data checked 2026-11-06
Cite this page

Scraper Finder. "How to get Bluesky data." https://scraperfinder.com/sites/bluesky/ (data checked 2026-11-06).

Highest-scoring catalogue Actor

Bluesky Posts, Profiles, Feeds & Threads Scraper: 7 of 7 core fields, $0.99 per 1,000 results, score 87. The highest score overall is 93 (Bluesky Followers Scraper, a Store tool from another publisher); both are in the table above.

Open in Apify Store