Bluesky Scraper - Posts, Profiles & Search
Pricing
from $2.00 / 1,000 post scrapeds
Bluesky Scraper - Posts, Profiles & Search
Scrape Bluesky posts by keyword search and by user handle, with full author profiles, engagement stats, images and hashtags.
Pricing
from $2.00 / 1,000 post scrapeds
Rating
0.0
(0)
Developer
Long Li
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Bluesky Scraper Lite π¦
Scrape Bluesky posts and profiles β keyword search, user timelines and full author stats in one Actor. Search any keyword, or list handles like @apify.com, and get clean JSON with post text, hashtags, engagement counts, images, link cards and complete author info (followers, following, post counts). No login required β built on Bluesky's open AT Protocol, so it's fast, reliable and cheap.
The all-in-one alternative to buying separate post and user scrapers: search + profiles + author feeds in a single run.
π What you can scrape
- Keyword search β all posts matching a query, newest (
latest) or most engaging (top) first, with optional date range (since/until) and language filters - Profile timelines β every post by any handle, with or without replies
- Full profiles β follower/following/post counts, display name, description, avatar
- Per-post extras β hashtags (extracted), images with alt text, embedded link cards, reply/repost/like/quote counts, web URL for every post
π₯ Input
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | Array | β | Keywords to search posts for. |
profileHandles | Array | β | Handles to scrape (with or without @), e.g. apify.com. Saves the profile + their posts. |
postsPerQuery | Integer | 25 | Max posts per query/handle. |
sort | Select | latest | latest or top (search only). |
since / until | Date | β | Only posts in this date range, YYYY-MM-DD (search only). |
lang | String | β | Language filter like en, de (search only). |
includeAuthorInfo | Boolean | true | Attach follower/following/post counts to every post. |
includeReplies | Boolean | false | Include replies when scraping profiles. |
maxConcurrency | Integer | 5 | Parallel API requests. |
proxyConfig | Object | β | Optional; Bluesky's API is open so usually not needed. |
At least one of searchQueries / profileHandles is required.
Example input
{"searchQueries": ["web scraping"],"profileHandles": ["@bsky.app"],"postsPerQuery": 25,"sort": "top"}
π€ Output
One item per post (and one per profile) in the default dataset β export to JSON, CSV, Excel, HTML, XML:
{"itemType": "post","id": "3l7vlkxhqxs2c","uri": "at://did:plc:.../app.bsky.feed.post/3l7vlkxhqxs2c","url": "https://bsky.app/profile/bsky.app/post/3l7vlkxhqxs2c","text": "We just shipped something #bluesky","createdAt": "2026-10-01T12:00:00.000Z","hashtags": ["bluesky"],"langs": ["en"],"authorDid": "did:plc:...","authorHandle": "bsky.app","authorName": "Bluesky","authorAvatar": "https://...","authorFollowers": 250000,"authorFollows": 100,"authorPosts": 5000,"images": [{ "fullsize": "https://...", "thumb": "https://...", "alt": "..." }],"link": { "uri": "https://...", "title": "...", "description": "..." },"replyCount": 12,"repostCount": 45,"likeCount": 300,"quoteCount": 8,"query": "web scraping"}
Profile items have itemType: "profile" with the same author fields plus text = bio.
βοΈ How it works
Built directly on Bluesky's public AT Protocol endpoints (app.bsky.feed.searchPosts, app.bsky.feed.getAuthorFeed, app.bsky.actor.getProfile) β the same API the official app uses. No browser, no login, no blocked accounts. Handles cursor pagination automatically until your postsPerQuery limit, deduplicates posts across queries, and caches author lookups so popular authors cost one request, not hundreds.
β FAQ
How do I scrape Bluesky without an API key?
Just enter a keyword and run β no key, no login. Bluesky's AT Protocol exposes post search, author feeds and profiles publicly. One caveat this Actor handles for you: the public.api.bsky.app host returns 403 for unauthenticated keyword search (known upstream issue), so it calls api.bsky.app, where the same endpoint works freely. An optional app password only raises rate limits.
How do I scrape Bluesky posts for free?
Enter a keyword in searchQueries (or a handle in profileHandles) and click Start. Your Apify account includes free monthly platform credits β because this Actor uses Bluesky's open API instead of a browser, each run costs only fractions of a credit.
Can I scrape posts from a specific Bluesky user?
Yes β put their handle (e.g. @bsky.app or bsky.app) into profileHandles. You get their profile with follower counts plus their latest posts. Enable includeReplies to also capture replies.
Can I search Bluesky posts by keyword with a date range?
Yes β fill searchQueries, set sort (latest or top), and optionally since/until (YYYY-MM-DD) and lang to filter by language.
Does it need my Bluesky login or password?
No. All data comes from Bluesky's public API β no account, cookies or credentials required. You only see public data.
Can I get the data as Excel or CSV?
Yes β every run produces a dataset exportable to JSON, JSONL, CSV, XLSX, HTML, XML and RSS from the Console, or via GET /v2/datasets/{id}/items?format=xlsx.
Can I run it via API from my app?
Yes: POST https://api.apify.com/v2/acts/liver0914~bluesky-scraper-lite/run-sync-get-dataset-items with your input and token returns the scraped data directly in the response.
π‘ Tips
- Trend monitoring: run on a schedule with
sort: "top"andsinceset to yesterday. - Influencer research: list up to 1000 handles in
profileHandlesβ profiles include follower counts for ranking. - Cheapest runs: keep
postsPerQuerytight; every item is one API page or less.
π οΈ Local development & testing
npm installnpm test # boots a local mock of the Bluesky XRPC API and runs 16 end-to-end assertions
π Related
Built by the same developer as Contact Info Scraper Lite, Rumble Scraper Lite, Mastodon Scraper Lite, Cloudflare Bypasser Lite and GitHub Email Scraper Lite β a full open-web scraping toolkit.