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.What it returns
8 fields from the published dataset schema. Export as JSON, CSV or Excel, or read the dataset through the Apify API.
recordTypeurlcreatedAtauthorHandledisplayNametextlikeCountrepostCount
Input
| Setting | Type | Required | Default | What 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
| Setting | Type | Required | Default | What 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.
| Apify plan | Per 1,000 | 10,000 results | 100,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.
- 1 Bluesky Posts, Profiles, Feeds & Threads Scraper 8 output fields, pay per event 7 of 7 core fields
$0.99 / 1K - + 8 other Store tools, combined Reference only 7 of 7 core fields
from $0.50 / 1K - API Bluesky API (AT Protocol) Public API fields not compared
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.
Other Store tools for Bluesky
Reference only, from their public listings.
| Tool | Fields | Price / 1K |
|---|---|---|
| Bluesky Followers Scraper | 78 | $0.50 |
| Bluesky Posts Scraper | 8 | $1.10 |
| Bluesky Scraper | 24 | $3.00 |
| Bluesky Scraper | 48 | $1.49 |
| Bluesky Scraper | 33 | $2.30 |
What people use it for
- search posts and profiles
- explore feeds and threads
Similar Actors
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…
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…
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,…
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…
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…
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…
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
- Bluesky Posts, Profiles, Feeds & Threads Scraper on Apify Store
- Published build with input and output schema (JSON)
- Bluesky API (AT Protocol) documentation
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.