Bluesky Scraper - Posts, Profiles & Search avatar

Bluesky Scraper - Posts, Profiles & Search

Pricing

Pay per usage

Go to Apify Store
Bluesky Scraper - Posts, Profiles & Search

Bluesky Scraper - Posts, Profiles & Search

Scrape Bluesky posts, profiles, search, threads & followers via the public AT Protocol. Clean flat JSON/CSV with image alt-text & quoted posts. No login.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Radosław Szal

Radosław Szal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Bluesky Posts, Profiles & Search Scraper (AT Protocol)

🔗 Part of the Apify actors collection — 6 reliable, tested scrapers & data tools.

Export Bluesky data at scale — posts, profiles, keyword search, full reply threads and follower graphs — as clean JSON, CSV or Excel. Built directly on the public AT Protocol, so scraping public posts and profiles needs no login.

One actor, seven jobs. No browser, no proxies, no fragile HTML parsing — just the official protocol Bluesky itself runs on.


What you can scrape

ModeWhat it doesLogin?
Author postsEvery post from one or more accounts (with replies / media filters)No
Search postsKeyword search across all of Bluesky (date, language, author, hashtag filters)App password
ProfilesFull profile details for given accountsNo
Search profilesFind accounts by keywordNo
Post threadThe complete reply tree under a postNo
FollowersAn account's followersNo
FollowsWho an account followsNo

Only keyword post search needs an app password (Bluesky doesn't serve that endpoint anonymously). Everything else runs on the public AppView out of the box.


Why this scraper

  • Clean, flat, stable schema — not a raw API dump. Engagement counts, hashtags, mentions, links and media are pulled up to top-level fields, and every post gets a real https://bsky.app/... URL you can click.
  • Richer than the rest — we extract image alt-text (great for AI, search and accessibility), pull out the quoted post in full when a post quotes another, and flag unresolved handles (handleResolved) with a working profile URL either way. Details other scrapers quietly drop.
  • Everything in one actor — posts, profiles, search, threads and the social graph. No juggling five different tools.
  • Monitoring built in — flip on onlyNew and any scrape becomes a change monitor: each scheduled run returns only posts you haven't seen yet. Wire it to a Bluesky mention search and you have brand-alert / social-listening on a timer.
  • Predictable pricing — pay per result, flat. No surprise "compute unit" bills.
  • No proxies to configure — the AT Protocol AppView serves public data directly.

Quick start

Get a user's latest posts (no login):

{
"mode": "author_posts",
"handles": ["nytimes.com", "bsky.app"],
"maxItems": 100
}

Search posts by keyword (needs an app password — see below):

{
"mode": "search_posts",
"searchQuery": "electric vehicles",
"lang": "en",
"since": "2026-07-01",
"sort": "latest",
"maxItems": 500,
"blueskyIdentifier": "you.bsky.social",
"blueskyAppPassword": "<your-app-password>"
}

Monitor mentions of your brand (schedule it, e.g. hourly):

{
"mode": "search_posts",
"searchQuery": "\"YourBrand\"",
"onlyNew": true,
"stateKey": "yourbrand-mentions",
"blueskyIdentifier": "you.bsky.social",
"blueskyAppPassword": "<your-app-password>"
}

Get the full thread under a post (no login):

{
"mode": "post_thread",
"postUrls": ["https://bsky.app/profile/bsky.app/post/3l..."],
"threadDepth": 6
}

How to get a Bluesky app password (for post search only)

  1. Open Bluesky → Settings → Privacy and Security → App Passwords.
  2. Add App Password, name it (e.g. "Apify"), copy the generated value (format xxxx-xxxx-xxxx-xxxx).
  3. Paste your handle into Bluesky handle and the value into Bluesky app password.

An app password is revocable and scoped — it is not your main password. It is only ever sent to Bluesky's own createSession endpoint to sign in, and is never stored in the dataset or logs.


Output

Each post record:

{
"uri": "at://did:plc:.../app.bsky.feed.post/3l...",
"url": "https://bsky.app/profile/handle/post/3l...",
"cid": "bafy...",
"text": "the post text",
"createdAt": "2026-07-20T10:00:00.000Z",
"indexedAt": "2026-07-20T10:00:01.000Z",
"langs": ["en"],
"author": { "did": "did:plc:...", "handle": "handle", "displayName": "Name", "avatar": "https://..." },
"likeCount": 6512, "repostCount": 539, "replyCount": 88, "quoteCount": 12, "bookmarkCount": 4,
"author": { "did": "did:plc:...", "handle": "handle", "handleResolved": true, "displayName": "Name", "avatar": "https://..." },
"hashtags": ["climate"], "mentions": ["did:plc:..."], "links": ["https://..."],
"embedType": "images",
"media": [{ "url": "https://...", "alt": "a solar farm at sunset", "type": "image" }],
"quotedPost": { "uri": "at://...", "url": "https://bsky.app/profile/.../post/...", "author": "quoted.handle", "text": "the quoted post" },
"external": null,
"isReply": false, "isRepost": false, "replyParent": null, "replyRoot": null,
"labels": []
}

Note the richness most scrapers skip: image alt-text (media[].alt — the author's own description of each image), the quoted post pulled out in full (quotedPost), and handleResolved so you can tell verified handles from unresolved ones (handle.invalid) — with a working profile URL either way.

Each profile record:

did, handle, handleResolved, url, displayName, description, avatar, banner, followersCount, followsCount, postsCount, createdAt, indexedAt, labels
.

Download from the run's Dataset tab as JSON, CSV, Excel, or pull via the Apify API.


Pricing

Pay per result — you are charged for each record delivered (result-item), flat, regardless of how many pages were walked to find it. The first few seconds of every run are free, so you can test inputs at no cost.

Common uses

  • Social listening / brand monitoring on the fastest-growing X alternative.
  • Clean, ethically-sourced datasets for AI / research (public data, open protocol).
  • Tracking accounts, hashtags and topics as Bluesky adoption grows.
  • Lead and community research — find and profile accounts around a topic.

Notes & fair use

  • Reads only public data through the official public AT Protocol AppView. No private posts, no logged-in-only content, no fake accounts.
  • Respects the API: automatic backoff on rate limits and transient errors.
  • You are responsible for using exported data in line with Bluesky's terms and applicable law (e.g. GDPR when handling personal data).

Built on the AT Protocol (app.bsky.*). Keywords: bluesky scraper, bluesky api, at protocol scraper, scrape bluesky posts, bluesky profile scraper, bluesky search, social media scraper, bluesky data export.