Bluesky Posts Scraper – Profiles & Threads, No Login
Pricing
$0.50 / 1,000 post scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
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
- You give handles (or DIDs / profile links) and/or post links. Handles are lowercased, a leading
@is stripped, and duplicates are removed. - For each profile, the actor pages through the author feed (100 posts per request), newest first, until it reaches
maxItemsPerSource, yoursincedate, or the end of the feed. - 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. - 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
sincedate cutoff. - Threads: paste a
https://bsky.app/profile/<handle>/post/<id>link (or anat://URI) and get the post plus its replies (nested, withthreadDepth). - 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
errorset (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
| Field | Description |
|---|---|
handles | Handles, DIDs or profile URLs, e.g. bsky.app, @jay.bsky.team, https://bsky.app/profile/nytimes.com |
postUrls | Post links or at:// URIs; returns the post and its reply thread |
maxItemsPerSource | Max posts per handle/thread (default 100, 1 to 10,000) |
includeReplies | Include the author's replies in profile feeds (default true) |
includeReposts | Include reposts in profile feeds, flagged isRepost (default false) |
since | ISO date, e.g. 2026-09-01; stop paging a profile at older posts (profiles only) |
includeThreadRoot | Also 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).
Related tools
Other actors by the same developer (same flat pay-per-result pricing, no subscription):
- App Store Reviews Scraper – Apple iOS, Multi-Country
- Article Scraper & Text Extractor – Clean Markdown for LLM/RAG
- Job Postings & Career Page Scraper – Workday, Greenhouse, Lever
- Company Enrichment from Domain (Logo, Socials, Tech)
- DNS Lookup & WHOIS Domain Checker — SPF/DMARC, SSL Expiry
- Email Validator & MX Record Checker – Bulk, Disposable, Role
- Bulk PageSpeed Insights, Lighthouse & Core Web Vitals
- PDF Extractor & Parser – Bulk PDF to Text with Metadata
- SEO Audit Crawler & Broken Link Checker – Website Health
- Sitemap Extractor & Bulk URL Status Checker
- Steam Reviews Scraper – Game Reviews & App Details
- Website Technology Detector – Tech Stack, CMS & Analytics
- Website Screenshot API – Bulk Full Page PNG, JPEG & PDF
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: