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; export likes, reposts, follows, quotes and relationships.

Open in Apify Store$0.99 / 1K on Free

Short answer

Bluesky Posts, Profiles, Feeds & Threads Scraper is an Apify Store Actor for Bluesky data that returns 8 published output fields, including url, createdAt, authorHandle, displayName. It lists $0.99 per 1,000 results on the Free plan (pay per event), $0.49 on the Business plan. It takes 45 input settings; one is required (mode). It covers 7 of the 7 core Bluesky fields this site tracks. Last updated Nov 6, 2026.

From the public Store listing and published build schema, synced 2026-11-12.
Bluesky Social mediaAutomationDeveloper tools

What it returns

8 fields from the published dataset schema. Export as JSON, CSV or Excel, or read the dataset through the Apify API.

  • recordType
  • url
  • createdAt
  • authorHandle
  • displayName
  • text
  • likeCount
  • repostCount

Input

Input settings for Bluesky Posts, Profiles, Feeds & Threads Scraper
SettingTypeRequiredDefaultWhat it does
mode string Yes search What to fetch.
searchQuery string No bluesky Keyword, hashtag, phrase, or Lucene-style query. Used by search, actorSearch, starterPackSearch, and feedGeneratorsDiscovery.
searchSort string No latest Search ranking. `latest` returns newest first; `top` returns engagement-ranked posts. Both use time-window pagination to collect beyond one page.
searchTags array No [] Only posts with these hashtags (without `#`). Multiple tags are AND-matched. (mode=search)
searchDomain string No – Only posts linking to this domain, e.g. `github.com`. (mode=search)
searchUrl string No – Only posts linking to this exact URL. (mode=search)
mentionsUser string No – Only posts mentioning this handle or DID. (mode=search)
fromUser string No – Only posts authored by this handle or DID. (mode=search)
since string No – Earliest post date as `YYYY-MM-DD` or an ISO datetime. (mode=search)
until string No – Latest post date as `YYYY-MM-DD` or an ISO datetime. (mode=search)
Show the other 35 settings
More input settings for Bluesky Posts, Profiles, Feeds & Threads Scraper
SettingTypeRequiredDefaultWhat it does
language string No – ISO 639-1 language filter for post search and post records. Empty means no filter.
authorFeedFilter string No posts_with_replies Which posts to include in the author feed. (mode=profile)
includePins boolean No false Include the pinned post at the top of the author feed. (mode=profile)
includeParents boolean No false Include ancestor posts above the requested post. (mode=postThread)
threadDepth integer No 6 How many reply levels and ancestor levels to walk. Depths beyond about 10 reply levels are reached by walking reply branches across requests. 0 returns only the requested post. (mode=postThread)
maxRepliesPerPost integer No 100 Maximum direct replies followed under each post while walking a thread. Larger values reach more branches but cost more requests. (mode=postThread)
actor string No – Bluesky handle or DID. Used by profile, follows, followers, lists, actorLikes, actorFeeds, relationships, and discoveryType=suggestedFollows.
actors array No [] Handles, DIDs, or profile URLs for batch lookup. Used by profiles and by relationships as the accounts to check against `actor`.
postUri string No – AT URI of a post. Used by postThread, getLikes, repostedBy, and quotes.
postUris array No [] AT URIs of posts to hydrate. Used by getPosts and as a fallback for single-post modes.
postUrls array No [] bsky.app post, profile, list, feed, or starter-pack URLs. Used by urlFetch, getPosts, and as a fallback for single-post modes.
listUri string No – AT URI of a Bluesky list. Used by getList and listFeed.
listUris array No [] AT URIs or bsky.app list URLs for batch list processing. (mode=getList)
starterPackUri string No – AT URI of a starter pack. (mode=getStarterPack)
starterPackUris array No [] AT URIs or bsky.app starter-pack URLs for batch processing. (mode=getStarterPack)
feedPreset string No – Built-in feed preset. Live presets are listed first, followed by legacy aliases mapped to What's Hot. An explicit `feedUri` always takes precedence; if neither is set, What's Hot is used for mode=feed.
feedUri string No – AT URI or bsky.app feed URL of a custom feed generator. (mode=feed / feedGenerator)
feedUris array No [] AT URIs or bsky.app feed URLs for batch feed-generator lookup. (mode=feedGenerator)
discoveryType string No trendingTopics Which discovery surface to fetch. (mode=discovery)
excludeReplies boolean No false Drop posts that are replies to another post.
excludeReposts boolean No false Drop posts surfaced as reposts.
mediaOnly boolean No false Only emit posts with at least one image, video, or external embed.
excludeLabeled boolean No false Drop posts and accounts that carry moderation or self-labels, including labels on a post's author.
respectNoUnauthenticated boolean No true Skip records whose author carries the `!no-unauthenticated` label. The run status reports how many records were skipped.
verifiedOnly boolean No false Only emit accounts with a valid Bluesky verification, or posts whose author is verified. Records with no verification object are excluded. Post modes hydrate author profiles so verification can be checked.
minLikes integer No – Drop posts with fewer likes.
minReposts integer No – Drop posts with fewer reposts.
minReplies integer No – Drop posts with fewer replies.
minQuotes integer No – Drop posts with fewer quote posts.
minFollowers integer No – Keep accounts with at least this many followers.
maxFollowers integer No – Keep accounts with at most this many followers.
includeListMetadata boolean No false Emit a list record before its members. (mode=getList)
includeStarterPackMembers boolean No true Emit the accounts in the starter pack's list after the pack record. (mode=getStarterPack)
hydrateAuthors boolean No true Fetch full author profiles for post records. Adds one batched profile request per 25 unique authors and flat author follower, following, post and verification fields. Enabled by default; the daily profile prefill leaves it off to stay cheap.
maxItems integer No 40 Hard cap on emitted records. For batch modes the cap applies across the whole run.

Example input

Built from the input form's published example values and defaults.

{
  "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 it from code or an AI agent

The same run through the Apify API, with the example input. You need an Apify API token; the run is billed to your account at the Store price.

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.

What a run costs

The result rate falls on higher Apify plans. Each figure is the published per-result rate times the number of results.

Cost of Bluesky Posts, Profiles, Feeds & Threads Scraper results by Apify plan
Apify planPer 1,00010,000 results100,000 results
Free plan$0.99$9.90$99
Starter plan$0.82$8.20$82
Scale plan$0.66$6.60$66
Business plan$0.49$4.90$49
  • Every run also has a start event, charged per GB of memory (minimum one): $0.10 on Free, $0.03 on Business. At its default memory of 1 GB a run starts at $0.10 on Free. Fewer, larger runs keep this small.
  • The Free plan includes $5 of monthly usage (Apify pricing, checked 2026-11-11); at the Free rate that covers at most about 5,050 results, less start events and platform usage.
  • Worked example: 10,000 results in one run on the Free plan cost $10 ($9.90 for results + $0.10 start), plus Apify platform usage (compute), billed separately by Apify.
  • Pay per event. Platform usage (compute) is billed by Apify on top of the event prices. Compare other tools in the cost estimator.

Where it fits among Bluesky routes

It ranks 1 of 1 catalogue Actors for Bluesky on the published formula (fields, price, reliability, freshness). Its line is highlighted on the map.

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.

Official route: Bluesky API (AT Protocol)

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.

Official documentation

Other Store tools for Bluesky

Reference only, from their public listings.

Other Store tools for Bluesky
ToolFieldsPrice / 1K
Bluesky Followers Scraper78$0.50
Bluesky Posts Scraper8$1.10
Bluesky Scraper24$3.00
Bluesky Scraper48$1.49
Bluesky Scraper33$2.30

What people use it for

  • search posts and profiles
  • explore feeds and threads

LinkedIn Trending Posts & Top Voices Feed Scraper

Pull LinkedIn's trending and top-performing posts by topic keyword, with reaction/comment/repost counts, a per-reaction-type breakdown, author…

19 output fields $0.99 per 1K

Reddit Multi-Mode Scraper for Posts, Comments & Profiles

Pick one of five modes to pull subreddit posts, full comment threads, user profiles, keyword search results or curated community listings from…

9 output fields $0.99 per 1K

StockTwits Ticker Sentiment & Trending Symbol Feed

Reads StockTwits' public message stream for any ticker or user, the market-wide trending-symbols list with trend summaries, and ticker search,…

12 output fields $0.99 per 1K

Instagram Profile Scraper - Bio & Posts

Scrape public Instagram profiles from a list of usernames: bio, followers, following, post count, verified badge and bio links. Add recent posts…

25 output fields $0.70 per 1K

LinkedIn Profile Feed Scraper with Likers & Commenters

Pull posts from a LinkedIn profile's activity feed or a direct post URL, with engagement counts, hashtags, media, and optionally the people who…

15 output fields $0.99 per 1K

TikTok Explore Feed Trending Post Scraper

Collect trending posts from TikTok's Explore feed across one or more content categories, with engagement stats, author snapshot, sound and video…

18 output fields $0.99 per 1K

Questions people ask

How much does Bluesky Posts, Profiles, Feeds & Threads Scraper cost?

The published result rate depends on your Apify plan: $0.99 per 1,000 on Free, $0.82 per 1,000 on Starter, $0.66 per 1,000 on Scale, $0.49 per 1,000 on Business. So 10,000 results cost about $9.90 on the Free plan and $4.90 on Business, plus a start fee of $0.10 per run per GB of memory on Free. Platform usage is billed separately.

What data does Bluesky Posts, Profiles, Feeds & Threads Scraper return?

Its published output schema lists 8 fields: recordType, url, createdAt, authorHandle, displayName, text, likeCount, repostCount. A listed field is not guaranteed to be filled in every row.

What input does Bluesky Posts, Profiles, Feeds & Threads Scraper need?

Required: mode. Optional settings include searchQuery, searchSort, searchTags, searchDomain, searchUrl, mentionsUser.

How do I run Bluesky Posts, Profiles, Feeds & Threads Scraper from Python or the API?

Use the Apify API client: in Python, ApifyClient(token).actor("nimbryxo-studio/bluesky-posts-profiles-feeds-and-threads-scraper").call(run_input=...), then read the run's default dataset (run.default_dataset_id); in JavaScript the same call is client.actor("nimbryxo-studio/bluesky-posts-profiles-feeds-and-threads-scraper").call(input). Without a client, POST the input JSON to https://api.apify.com/v2/actors/nimbryxo-studio~bluesky-posts-profiles-feeds-and-threads-scraper/run-sync-get-dataset-items with your API token. Ready-to-paste code with the example input is on this page.

Sources

Actor updated 2026-11-06 Data synced 2026-11-12
Cite this page

Scraper Finder. "Bluesky Posts, Profiles, Feeds & Threads Scraper." https://scraperfinder.com/catalogue/bluesky-posts-profiles-feeds-and-threads-scraper/ (data checked 2026-11-12).

Run Bluesky Posts, Profiles, Feeds & Threads Scraper

$0.99 per 1,000 results. Paste the example input above, set your Bluesky query, then export the dataset. Still choosing? Compare every Bluesky route.

Open in Apify Store