Bluesky Posts Scraper – Profiles & Threads, No Login avatar

Bluesky Posts Scraper – Profiles & Threads, No Login

Pricing

$0.50 / 1,000 post scrapeds

Go to Apify Store
Bluesky Posts Scraper – Profiles & Threads, No Login

Bluesky Posts Scraper – Profiles & Threads, No Login

Bluesky scraper for posts from any public profile feed or thread via the official public API — no login, no cookies. Social media data: text, date, author, likes, reposts, replies, quotes, links, images, language. $0.50 per 1,000 posts.

Pricing

$0.50 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

Forever Tools

Forever Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

Bluesky Posts Scraper - profiles & threads, no login

Scrape public Bluesky posts from profile feeds and reply threads using the official public AppView API (public.api.bsky.app). No login, no cookies, no browser, no app password. One dataset row per post, with likes, reposts, replies, quotes, links, images and hashtags.

Great for: brand and account monitoring, tracking what a list of accounts posts, exporting a reply thread for analysis, community research, and feeding public posts into your own analytics or LLM pipelines.

How it works

  1. You give handles (or DIDs / profile links) and/or post links. Handles are lowercased, a leading @ is stripped, and duplicates are removed.
  2. For each profile, the actor pages through the author feed (100 posts per request), newest first, until it reaches maxItemsPerSource, your since date, or the end of the feed.
  3. For each post link, it resolves the author's handle to a DID if needed, then fetches the post's reply thread (up to 10 levels deep) and flattens it into rows with a threadDepth.
  4. Every post is normalized into one dataset row and deduplicated by post URI across all sources in the run.

Up to 3 sources are processed in parallel. HTTP 429 and 5xx responses and network errors are retried with backoff (up to 4 retries).

Features

  • Profiles: newest-first posts from any handle, DID or profile link; optional replies, reposts and a since date cutoff.
  • Threads: paste a https://bsky.app/profile/<handle>/post/<id> link (or an at:// URI) and get the post plus its replies (nested, with threadDepth).
  • Engagement: likes, reposts, replies, quotes.
  • Links (from text and link cards), images (with alt text; video posts return the thumbnail and playlist URL), quoted post URI, hashtags, mentioned DIDs, languages.
  • Deduplicated by post URI across all sources in a run.
  • A bad handle or link never crashes the run: you get a row with error set (not charged).

Use cases

Social media monitoring

Schedule a daily run over a list of brand, competitor or newsroom accounts with since set to yesterday, and collect only new posts with their engagement counts.

Thread and reply analysis

Export every reply under a post to study sentiment, questions or objections. Each row has threadDepth, replyParentUri and replyRootUri so the tree can be rebuilt.

Research and datasets

Build a corpus of public posts from chosen accounts, with language tags, hashtags, link cards and quoted-post references, as JSON, CSV or Excel.

AI agents and LLM pipelines

Call the actor through the Apify MCP server or API when an agent needs current public posts from a specific account.

Input

FieldDescription
handlesHandles, DIDs or profile URLs, e.g. bsky.app, @jay.bsky.team, https://bsky.app/profile/nytimes.com
postUrlsPost links or at:// URIs; returns the post and its reply thread
maxItemsPerSourceMax posts per handle/thread (default 100, 1 to 10,000)
includeRepliesInclude the author's replies in profile feeds (default true)
includeRepostsInclude reposts in profile feeds, flagged isRepost (default false)
sinceISO date, e.g. 2026-09-01; stop paging a profile at older posts (profiles only)
includeThreadRootAlso return the linked post itself (default true)

Output (one dataset row per post)

{
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mw2cdr44fc2a",
"url": "https://bsky.app/profile/bsky.app/post/3mw2cdr44fc2a",
"text": "If you're in line to vote for @bsky38.com, please stay in line! ...",
"createdAt": "2026-09-21T18:04:06.128Z",
"author": { "handle": "bsky.app", "displayName": "Bluesky", "did": "did:plc:z72i7hdynmk6r22z27h6tvur" },
"likeCount": 1200, "repostCount": 90, "replyCount": 97, "quoteCount": 12,
"langs": ["en"], "links": [], "linkCards": [], "images": [], "embedType": "record",
"quotedPostUri": "at://did:web:bsky38.com/app.bsky.feed.post/3muphbj35cs2h",
"hashtags": [], "mentionDids": ["did:web:bsky38.com"],
"isReply": false, "replyParentUri": null, "replyRootUri": null,
"isRepost": false, "repostedBy": null,
"source": "bsky.app", "sourceType": "handle", "scrapedAt": "...", "error": null
}

Rows also include indexedAt. Thread rows also carry threadDepth (0 = linked post, 1 = direct reply, ...). Only public post content and the author's public handle, display name and DID are returned. No emails, no contact details, no follower lists.

Pricing

Pay per event: $0.0005 per post ($0.50 per 1,000). Apify platform usage is billed separately as usual.

  • 1,000 posts = $0.50
  • 20 accounts x 100 posts = 2,000 posts = $1.00
  • One reply thread with 350 replies (plus the root) = 351 posts = about $0.18

Charged: each post row saved to the dataset. Not charged: error rows (bad handle, post not found) and duplicate posts already returned by another source in the same run. If you set a maximum charge for the run, the actor stops before exceeding it.

Limitations

  • No keyword search: Bluesky's public API currently rejects unauthenticated keyword search (HTTP 403), and this actor does not use logins. Use profiles or thread links instead.
  • Threads: up to 10 levels of replies as returned by the API; very large threads may be truncated by the API. Parent posts above the linked post are not included.
  • Counts are a snapshot at scrape time.
  • Deleted, blocked, private or taken-down content is not available.
  • Not affiliated with Bluesky. Built and maintained with AI assistance; problems or requests go to the Issues tab.

FAQ

Do I need a Bluesky account? No. Everything comes from Bluesky's public, unauthenticated API.

Can I search posts by keyword or hashtag? Not in this version (see Limitations). Hashtags used in each post are returned in hashtags, so you can filter scraped posts yourself.

How far back can I go on a profile? As far as the author feed pages go; set maxItemsPerSource and/or since.

Why did a profile return fewer posts than expected? Deleted, blocked or moderated posts are not returned by the API, reposts are skipped unless enabled, and posts already returned by another source in the same run are deduplicated.

Can I get all replies to a post? Yes, pass the post link in postUrls. Replies come back nested up to 10 levels, each with threadDepth.

Is this legal / allowed? It reads only public data through Bluesky's documented public API with modest request rates. You are responsible for how you use the data (respect privacy law and Bluesky's terms).

Other actors by the same developer (same flat pay-per-result pricing, no subscription):

Integrations

Run it from the Apify API, a schedule, or no-code tools: the Apify apps for Zapier, Make and n8n can start any public actor ("Run Actor") and read its dataset. AI agents can call it through the Apify MCP server.

Ready-made examples

One-click tasks you can run or copy and adapt: