Bluesky Scraper avatar

Bluesky Scraper

Pricing

Pay per usage

Go to Apify Store
Bluesky Scraper

Bluesky Scraper

Scrape Bluesky posts, profiles, threads, and search results without a login. Pull a user's posts by handle, a post plus its reply thread, or keyword search results. Walks pagination up to your chosen limit.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Goutam Soni

Goutam Soni

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Scrape Bluesky posts, profiles, threads, and keyword search results with no login and no API key. Give it handles, post links, or search terms and it returns clean structured rows with full engagement metrics, author details, media, and timestamps.

The Bluesky Scraper extracts public data from Bluesky at scale. Pull a user's recent posts by handle, fetch a single post with its full reply thread, or run keyword searches across the network. Pagination is walked automatically up to the limit you set, so you can collect hundreds or thousands of posts per source in one run.

What it does

  • User posts by handle. Collect a user's recent posts, with optional replies and a profile header row (display name, bio, follower and post counts).
  • Post threads from a URL. Fetch any post plus its nested reply tree, flattened into rows.
  • Keyword search. Search public posts by term, sorted by latest or top.
  • Full engagement metrics. Likes, reposts, replies, and quotes on every post.
  • Media and links. Photo URLs, video stream and poster image, link-card previews, and richtext links.
  • Rich post detail. Author identity, post text, language, hashtags, mentions, reply flags, repost flags, and timestamps.
  • Automatic pagination and deduplication. Walks multiple pages per source and drops duplicate rows so every result is unique.
  • No login, no password, no API key. Runs against public read-only endpoints.

Use cases

  • Brand and topic monitoring. Track keyword searches to see who is talking about your product, niche, or industry on Bluesky.
  • Lead generation and outreach. Pull posters around a topic and capture their handle, display name, and bio for prospecting.
  • Market and competitor research. Analyze a competitor's posting cadence, engagement, and audience by scraping their handle (use a public placeholder like example.bsky.social).
  • Sentiment and trend analysis. Collect large post samples for a query and feed text plus engagement counts into your own analysis.
  • Thread archiving. Save a post and its full reply thread for research, support, or compliance records.

Input

FieldTypeDescription
handlesarrayHandles to pull posts from. With or without @, or a full profile link (e.g. example.bsky.social).
postUrlsarrayPost links to fetch with their reply thread.
searchQueriesarrayKeyword searches to run across public posts.
maxItemsPerSourceintegerCap on items returned per handle, post, or query. Default 100.
includeRepliesbooleanInclude a handle's replies, not just top-level posts. Default false.
includeProfilebooleanEmit one profile row per handle before its posts. Default true.
searchSortstringSearch order: latest or top.
concurrencyintegerNumber of sources processed in parallel. Default 5.
proxyConfigobjectOptional proxy. The public endpoints do not require one.

Example input

{
"handles": ["example.bsky.social"],
"searchQueries": ["open source"],
"maxItemsPerSource": 200,
"includeReplies": false,
"includeProfile": true,
"searchSort": "latest"
}

Output

Each post is one row:

{
"type": "post",
"uri": "at://did:plc:example/app.bsky.feed.post/abc123",
"url": "https://bsky.app/profile/example.bsky.social/post/abc123",
"authorHandle": "example.bsky.social",
"authorDisplayName": "Example User",
"authorDid": "did:plc:example",
"likeCount": 42,
"repostCount": 7,
"replyCount": 3,
"quoteCount": 1,
"text": "An example post about open source.",
"lang": "en",
"tags": ["opensource"],
"mentions": [],
"links": ["https://example.com"],
"thumbnail": "https://example.com/preview.jpg",
"images": [],
"video": null,
"isReply": false,
"replyToUri": null,
"isRepost": false,
"cid": "bafyexamplecid",
"createdAt": "2026-06-01T12:00:00.000Z",
"indexedAt": "2026-06-01T12:00:05.000Z"
}

Key fields:

  • url is the public permalink to the post.
  • likeCount, repostCount, replyCount, quoteCount are the engagement counts at scrape time.
  • thumbnail is the best single preview image for the post (attached photo, video poster frame, or link-card preview), so the media column is filled even for link posts.
  • isReply / replyToUri flag reply posts; isRepost flags posts that appeared in a feed via a repost.

When includeProfile is on, each handle also emits one profile row with handle, url, displayName, did, followersCount, followsCount, postsCount, description, avatar, banner, and createdAt.

FAQ

Do I need a Bluesky login or API key? No. The scraper reads public data through public endpoints. No account, password, or key is required.

Is it free? The actor itself is pay-per-result, so you only pay for the rows you collect. Apify platform usage applies as normal. There is no per-run start fee.

How many results can I get? Set maxItemsPerSource to your target. The scraper walks pagination across multiple pages until it reaches your cap or the source runs out of posts. You can collect hundreds or thousands of posts per handle or query.

How fast is it? Sources run in parallel (set with concurrency). A few hundred posts per source typically complete in seconds to a couple of minutes depending on how many sources and pages are involved.

Can I scrape a private account? No. Only public posts, profiles, and threads are available.

What input formats does it accept for handles and posts? Handles can be plain (example.bsky.social), prefixed (@example.bsky.social), or a full profile URL. Post inputs accept the standard bsky.app post link.