Bluesky Scraper: Posts, Profiles & Followers avatar

Bluesky Scraper: Posts, Profiles & Followers

Pricing

from $1.50 / 1,000 post saveds

Go to Apify Store
Bluesky Scraper: Posts, Profiles & Followers

Bluesky Scraper: Posts, Profiles & Followers

Scrape Bluesky posts by keyword or hashtag, profiles with their posts, followers and following, people search and post replies. Emails and links from bios, likes, reposts, media, quotes. Only-new mode for scheduled monitoring. Public API, no login.

Pricing

from $1.50 / 1,000 post saveds

Rating

0.0

(0)

Developer

Bruno Petrelli

Bruno Petrelli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

Get Bluesky data as clean rows, straight from Bluesky's public API:

  • Posts by keyword or hashtag: text, date, likes, reposts, replies, quotes, hashtags, mentions, full links, images with alt text, video, link cards and quoted posts. Bluesky's search syntax works: from:handle, mentions:handle, domain:example.com, "exact phrase".
  • Profiles: bio, emails and links written in the bio, website, social profiles, followers, following and post counts, verification, join date, pinned post. A handle that is the account's own domain (acme.com) is returned as customDomain: Bluesky verified that the account controls it.
  • A profile's posts, optionally with its replies and reposts.
  • Followers and following of any account, each as a full profile row.
  • People search: find accounts by name or bio ("marketing agency", "data engineer") and keep only those with an email or a link.
  • A post and its replies, level by level, with the depth of each reply.

No login, no proxies, no browser. Bluesky's robots.txt says "Crawling the public parts of the API is allowed", and the Actor keeps to a handful of requests at a time, as it asks. In our test, 30 posts of a search plus a profile and its 10 latest posts took 2 seconds.

Use it for

  • Brand and topic monitoring: schedule a search for your brand, product or hashtag every hour with "Only new" and get just the new mentions.
  • Lead lists: people search or the followers of a competitor, filtered to accounts with an email or website in the bio.
  • Influencer research: profiles with follower counts, posting activity and their latest posts.
  • Research and social listening: posts on a topic with language and date filters, engagement counts and links.
  • Community management: the replies to a post, or what an account posts and reposts.
  • AI agents: one plain JSON object per post or profile, callable through the Apify MCP server.

Input

Search posts and read a profile (the example in the form):

{
"searchTerms": ["web scraping"],
"maxPostsPerSearch": 30,
"profiles": ["bsky.app"],
"postsPerProfile": 10
}

Followers of an account that have an email or link in their bio:

{
"profiles": ["apify.com"],
"postsPerProfile": 0,
"followersPerProfile": 500,
"onlyProfilesWithContact": true
}

Hourly brand monitoring in English (schedule it in Apify):

{
"searchTerms": ["\"your brand\"", "yourbrand.com"],
"languages": ["en"],
"onlyNew": true
}

Every field can be combined in one run. Profiles can be handles (jay.bsky.team or @jay.bsky.team), profile links or DIDs; posts can be bsky.app links or at:// URIs. Filters (postedWithinDays, languages, minLikes) apply to searched posts, profile posts and replies; a post you list by link is always saved.

Output

One row per post ("type": "post") or profile ("type": "profile"). The run's page has a Posts view and a Profiles view. Real results from 2026-09-30, shortened:

{
"type": "profile",
"url": "https://bsky.app/profile/apify.com",
"handle": "apify.com",
"displayName": "Apify",
"description": "Thousands of Actors to automate your business, get real-time web data, and integrate your apps and agents. ➡️ apify.com • mcp.apify.com • github.com/apify",
"emails": [],
"website": "https://apify.com",
"customDomain": "apify.com",
"links": ["https://apify.com", "https://mcp.apify.com", "https://github.com/apify"],
"socialProfiles": { "github": ["https://github.com/apify"] },
"followersCount": 117,
"followsCount": 36,
"postsCount": 138,
"createdAt": "2024-11-25T17:31:53.548Z",
"verified": false,
"pinnedPostUrl": null,
"did": "did:plc:vu5ic5ygdeyunpefgmlamsmw",
"source": "profile",
"sourceInput": "apify.com"
}
{
"type": "post",
"url": "https://bsky.app/profile/apify.com/post/3mb4ki3wrd42w",
"text": "TikTok doesn’t show follower lists - but now you can have them. …",
"createdAt": "2025-12-29T09:45:56.843Z",
"authorHandle": "apify.com",
"authorName": "Apify",
"likeCount": 2,
"repostCount": 0,
"replyCount": 0,
"quoteCount": 0,
"languages": [],
"hashtags": [],
"mentions": [],
"links": ["https://apify.com/clockworks/tiktok-followers-scraper"],
"images": [{ "url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:vu5ic5ygdeyunpefgmlamsmw/bafkreie2wfcjmk6hckxtadiok3jhvglar36ojo5ombk5gpqazh3jy5yhoe", "alt": "" }],
"isReply": false,
"quotedPostUrl": null,
"repostedBy": null,
"uri": "at://did:plc:vu5ic5ygdeyunpefgmlamsmw/app.bsky.feed.post/3mb4ki3wrd42w",
"source": "profilePosts",
"sourceInput": "apify.com"
}
  • Posts also have bookmarkCount, videoUrl, linkCard (url, title, description), replyToUrl, threadRootUrl, quotedText, quotedAuthorHandle, labels (content labels such as porn or graphic-media), repostedAt, replyDepth (in a thread), authorDid, authorAvatar, authorUrl, cid and indexedAt.
  • Profiles also have trustedVerifier, pronouns, labels (such as bot), lists, feeds, starterPacks, isLabeler, acceptsMessagesFrom, avatar, banner and indexedAt.
  • source says where a row came from: search, profile, profilePosts, follower, following, profileSearch or thread; sourceInput is the line of your input that found it.
  • The OUTPUT record of the run has the status of each input (found, not found, hidden, failed) and the totals, including how many rows each filter left out.

Pricing

Pay per event: one event per post saved and one per profile saved. Posts and profiles left out by your filters, already saved by an earlier run ("Only new"), repeated within the run, or hidden at the owner's request are free. Set a maximum cost for the run and the Actor stops cleanly when it is reached.

Good to know

  • Search returns at most 100 posts per term. Bluesky gives apps that are not logged in only the first page of a search, and the Actor respects that. To collect more, run it on a schedule with "Only new", or use narrower searches (a language, from:, a hashtag). Profiles, followers, following, people search and threads have no such cap.
  • Accounts that asked not to be shown to logged-out visitors are left out. In Bluesky's settings, people can "discourage apps from showing my account to users who are logged out". The Actor reads Bluesky logged out, so it skips those accounts and their posts and counts them as hiddenAtUserRequest (free). In four searches on 2026-09-30 that was between 6% and 20% of the posts (6 of 94 for "web scraping", 19 of 98 for "marketing" in English).
  • Only new: each search, profile feed, follower list and thread has its own memory of what was saved. A profile's posts stop at the first post an earlier run saved. The profiles you list are saved on every run, so you can follow their counts over time.
  • Deleted posts and accounts no longer come out of Bluesky's API, so they are not returned.

Personal data

Posts and profiles are written by people, and bios can contain their email address. That is personal data even when it is public. Use it only with a legal basis (for example legitimate interest under the GDPR for relevant, one-to-one outreach), honor opt-outs and deletion requests, and follow the anti-spam rules of the countries you contact.

Support

A field you need, or a result that looks wrong? Open an issue on the Actor's Issues tab with the input you used. Issues get an answer within a few days.