Bluesky Scraper avatar

Bluesky Scraper

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Bluesky Scraper

Bluesky Scraper

Bluesky Scraper is a Python tool designed to extract public posts, user profiles, feeds, engagement metrics, and follower graphs via the AT Protocol API. It exports structured social data into clean CSV or JSON formats for sentiment analysis, social listening, and trend research.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

ZeroBreak

ZeroBreak

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Bluesky Scraper: Export Posts, Profiles, Followers and Search Results

Bluesky Scraper

Overview

The Bluesky Scraper collects publicly available posts, profiles, followers, following lists, threads, likes, reposts, and search results. No Bluesky account, app password, or login is required.

Each run produces a dataset that you can export as JSON, CSV, or Excel.

Features

  • Search public posts and users by keyword.
  • Collect posts from specified user profiles.
  • Look up profiles by handle, DID, or profile URL.
  • Retrieve followers and following lists.
  • Collect post threads and replies.
  • Identify users who liked or reposted a post.
  • Enrich profile records with follower and post counts.
  • Extract available email addresses from profile bios.
  • Preserve post text, timestamps, engagement counts, hashtags, mentions, links, images, and other metadata.
  • Export results as JSON, CSV, or Excel.
  • Save errors for individual inputs without stopping the entire run.
  • Handle rate limits, retries, and request timeouts.

Use Cases

  • Social listening: Monitor public discussions about brands, products, or keywords.
  • Lead discovery: Find relevant accounts and inspect public profile information.
  • Research datasets: Collect posts and threads, including non-English text and emoji.
  • Competitor monitoring: Track public posts from selected accounts.
  • Community analysis: Examine followers, following relationships, likes, and reposts.

Input Parameters

ParameterTypeDefaultDescription
modestringsearch_postsCollection mode: search_posts, search_users, author_posts, profiles, followers, follows, post_thread, post_likes, or post_reposts.
searchQueriesarray—Keywords or phrases for post and user searches.
searchSortstringlatestSearch order: latest or top.
handlesarray—Account handles, DIDs, or profile URLs.
postUrlsarray—Post URLs or at:// URIs.
feedFilterstringposts_no_repliesFilter for author feeds. Reposts may still appear.
includeRepostsbooleanfalseInclude reposts in author feeds.
enrichProfilesbooleanfalseAdd follower and post counts to profile rows, using batches of 25 profiles.
threadDepthinteger6Number of reply levels to collect. 0 collects only the root post.
dateFromstring—Collect posts after a specified date where supported for author feeds and latest-sorted searches.
maxItemsinteger100Overall result limit, capped at 5,000.
maxItemsPerInputinteger100Result limit per query, handle, or post.
maxConcurrencyinteger5Maximum number of concurrent inputs. Cannot exceed 5.
timeoutSecsinteger300Maximum run duration in seconds.
requestTimeoutSecsinteger30Timeout for an individual request.

Example Inputs

1. Search Posts

Search public posts for a keyword and collect the latest results.

{
"mode": "search_posts",
"searchQueries": ["web scraping"],
"searchSort": "latest",
"maxItems": 100
}

2. Collect Posts from a Profile

Collect posts from a selected account while excluding reposts where possible.

{
"mode": "author_posts",
"handles": ["bsky.app"],
"feedFilter": "posts_no_replies",
"includeReposts": false,
"maxItemsPerInput": 50
}

Some accounts repost frequently. Keep includeReposts disabled if you primarily want posts written by the account itself.

3. Collect Profiles

Look up profiles using handles, profile URLs, or decentralized identifiers.

{
"mode": "profiles",
"handles": [
"bsky.app",
"OPEN_PROFILE_URL",
"did:plc:z72i7hdynmk6r22z27h6tvur"
]
}

4. Search Users

Find accounts matching a keyword and enrich their profile records.

{
"mode": "search_users",
"searchQueries": ["apify"],
"enrichProfiles": true,
"maxItems": 25
}

5. Collect Followers

Retrieve an account's followers and enrich the resulting profile records.

{
"mode": "followers",
"handles": ["apify.com"],
"enrichProfiles": true,
"maxItemsPerInput": 100
}

Use mode: "follows" to collect accounts that a selected user follows. Relationship records include fields such as relation and subjectHandle.

6. Collect a Post Thread

Retrieve a post and its replies up to the specified depth.

{
"mode": "post_thread",
"postUrls": ["SOURCE_POST_URL"],
"threadDepth": 2,
"maxItems": 100
}

Use post_likes or post_reposts to collect users who liked or reposted a specified post. Like records can include likedAt and postUri; repost records identify the relationship using reposter.

Output Data

The dataset includes three table views:

  • Posts: Post content, metadata, engagement metrics, and thread information.
  • Profiles: Public profile details and available account statistics.
  • Errors: Failed inputs and their associated error details.

Profile Fields

FieldDescription
didDecentralized identifier of the account.
handleAccount handle.
displayNamePublic display name.
descriptionProfile description or bio.
profileBioProfile bio text used in the dataset view.
followersCountNumber of followers, when available.
followsCountNumber of accounts followed, when available.
postsCountNumber of posts, when available.
createdAtAccount creation timestamp, when available.
urlProfile URL.
emailsInBioEmail addresses detected in the public bio.
verifiedStatusAvailable verification status.

The description and profileBio fields contain the same profile text.

Post Fields

Post records can include:

  • uri, cid, url, and text
  • createdAt and indexedAt
  • langs and author details
  • replyCount, repostCount, likeCount, quoteCount, and bookmarkCount
  • isRepost and repostedBy
  • isReply and reply URIs
  • embedType and image information, including URLs and alt text
  • External link metadata, including URI, title, and description
  • quotedPostUri, hashtags, mentions, links, and labels
  • depth for thread records
  • searchQuery and sourceInput to identify the input associated with a result
  • scrapedAt to record when the item was collected

The fields available in each record depend on the source data and collection mode.

Error Records

A missing or invalid handle does not necessarily stop the run. The dataset can record an error row containing:

  • errorMessage
  • httpStatus
  • sourceInput

Other inputs continue processing when possible.

Limits and Performance

  • Public data only: Private or inaccessible content is not collected.
  • Maximum results: The free collection limit is 5,000 results per run.
  • Search coverage: Results depend on what the platform has indexed and made available.
  • Large accounts: Accounts with millions of followers can produce large datasets. Set maxItems and maxItemsPerInput carefully.
  • Feed ordering: Author feeds are collected newest first. Reposts may appear even with the posts_no_replies filter.
  • Date filtering: dateFrom is supported for author feeds and latest-sorted searches. It is not applied to top-sorted search results because that ordering is not chronological.
  • Concurrency: The maximum concurrency is five.
  • Rate limiting: Requests are spaced out, and HTTP 429 or 5xx responses trigger backoff. When available, server-provided retry timing is respected.
  • Profile enrichment: Follower and post counts are retrieved in batches of 25 profiles.

FAQ

Do I need a Bluesky account?

No. The scraper collects publicly available information without requiring a login or app password.

How is this different from the firehose?

The firehose is a live stream of network events. This scraper retrieves selected searches, accounts, and posts, then stops when the configured limits are reached. It is designed for targeted data collection rather than continuous monitoring of every event.

Can user search results include follower counts?

Yes. Enable enrichProfiles to retrieve follower and post counts for matching profiles. Without enrichment, those counts may not be included in the original search results.

What happens if a handle does not exist?

The scraper can record the returned error, including the message and HTTP status, while continuing with other inputs.

Can I export the results?

Yes. Download the dataset as JSON, CSV, or Excel after the run.

Can I automate collection?

You can schedule recurring runs using your preferred workflow platform and use the exported dataset for analysis or reporting.

Trademark Notice

Bluesky and related names, logos, and trademarks belong to their respective owners. Their use in this documentation is solely to identify the source of the data and does not imply affiliation, sponsorship, endorsement, or partnership.

Disclaimer

This is an independent data collection tool. It is not affiliated with, endorsed by, sponsored by, or officially associated with Bluesky.

Collecting information that is already public is generally legal. Scraping is not the same thing as hacking, and there is no single law that bans it. The limits are the usual ones: do not break into accounts, do not take private or confidential data, and be careful with personal data and copyrighted works. A site's terms can also restrict how you access it. Facts such as a public name, price, or rating are not the same thing as republishing someone's article or photo.

This actor collects information from public pages. It does not log in and it does not bypass access controls. This is not legal advice. For the longer explanation, see Apify's article Is web scraping legal?.