Bluesky Account Audit: Fake Followers, Engagement & Score
Pricing
from $20.00 / 1,000 account auditeds
Bluesky Account Audit: Fake Followers, Engagement & Score
Audit any Bluesky account: fake and ghost follower share from a live follower sample, estimated real followers, engagement rate, posting cadence, content mix, top posts and a transparent account score. Public AT Protocol API, no login. Errors are free.
Pricing
from $20.00 / 1,000 account auditeds
Rating
0.0
(0)
Developer
Simon Liarsgård
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
Check whether a Bluesky account's audience is real before you pay, partner or follow. One row per account: the share of suspicious and ghost followers from a live follower sample, estimated real followers, engagement rate, posting cadence, content mix, top posts and a transparent account score.
Paste handles, DIDs or bsky.app links and get structured results you can sort, filter and export. Everything comes from Bluesky's public AT Protocol API. No login, no app password, no browser.
$0.02 per audited account. Invalid input, unknown or deactivated accounts and API errors are free.
Who it is for
- Influencer and creator vetting: see how much of a creator's recent follower growth looks like bots or spam before you sponsor them.
- Agencies and brands: compare a shortlist of accounts on audience quality, engagement and activity in one table.
- Partnerships and PR: check that an account is active, posts original content and reaches real people.
- Your own account: watch for spam follower waves and see which of your posts actually landed.
How to use it
- Add accounts to Accounts:
name.bsky.social, a custom-domain handle likenytimes.com,@handle, adid:plc:…or ahttps://bsky.app/profile/…link. - Optionally change Follower sample size (500 by default, up to 5,000) and Posts to analyze (100 by default, up to 1,000).
- Run. Each account becomes one dataset item. The Overview view shows the headline numbers; Detail has everything.
Schedule it weekly to track how an account's audience changes.
What you get per account
- Profile: handle, display name, DID, bio, account age, followers, following, posts, follower/following ratio, custom-domain handle, Bluesky verification, moderation labels, lists, feeds and starter packs.
- Follower audit on the most recent followers:
suspiciousShare: bot or spam patterns (see Methodology).ghostShare: accounts that have never posted.activeShare: everyone else.- The share of each individual signal: no avatar, no bio, no display name, zero posts, new account, mass-following, spam-type moderation label, broken handle.
- Median followers and posts of the followers, the share with 1,000+ followers, and the biggest accounts in the sample (
notableFollowers).
- Estimated real followers: followers × (1 − suspicious share).
- Activity: originals, replies, quotes and reposts and their shares, media and link share, posts per week, active days, last post, peak posting hours and weekdays (UTC).
- Engagement on top-level posts and quotes: median and average interactions, average likes, reposts, replies and quotes, the median and average engagement rate, and how much of the total came from the single best post.
- Content: top languages, hashtags and link domains.
- Top posts by interactions, with link, text snippet and counts.
- Scores (0 to 100) for audience quality, engagement and activity, a combined account score, a verdict (
strong,solid,mixed,weak) and flags.
Example (shortened, from a real run)
{"account": "theonion.com","status": "ok","handle": "theonion.com","displayName": "The Onion","followersCount": 1359784,"followsCount": 5,"postsCount": 8945,"verified": true,"suspiciousFollowerShare": 0.012,"estimatedRealFollowers": 1343467,"audience": { "sampleSize": 500, "suspiciousShare": 0.012, "ghostShare": 0.374, "activeShare": 0.614, "medianFollowerFollowers": 31 },"activity": { "originals": 94, "replies": 1, "reposts": 5, "postsPerWeek": 89.76, "mediaShare": 0.8105, "peakHoursUtc": [19, 18, 22] },"engagement": { "postsMeasured": 79, "medianEngagement": 1012, "avgLikes": 1238.9, "engagementRate": 0.000744 },"content": { "topLinkDomains": [{ "domain": "theonion.com", "count": 66 }] },"audienceQualityScore": 83,"engagementScore": 32,"activityScore": 100,"accountScore": 69,"verdict": "solid","flags": [],"profileUrl": "https://bsky.app/profile/theonion.com"}
Input
| Field | Default | What it does |
|---|---|---|
accounts | Handles, DIDs or bsky.app URLs. Duplicates are removed, including a handle and its DID. | |
maxAccounts | 100 | Hard cap per run (max 1,000). |
followerSampleSize | 500 | Most recent followers to check (0 to 5,000; 0 skips the follower audit). |
postsToAnalyze | 100 | Recent feed items to read (0 to 1,000; 0 skips the post analysis). |
newAccountDays | 30 | Age below which a follower counts as new (informational). |
topPostsInOutput | 5 | Top posts listed per account (0 to 25). |
notableFollowersInOutput | 5 | Largest followers listed per account (0 to 25). |
concurrency | 3 | Accounts in parallel (1 to 5). |
Example:
{"accounts": ["theonion.com", "@jay.bsky.team", "https://bsky.app/profile/nytimes.com"],"followerSampleSize": 1000,"postsToAnalyze": 200}
Methodology
Follower sample. Bluesky lists followers newest first, so the sample is the account's most recent followers. That is where bought or bot followers usually show up, but it is not a random sample of the whole audience. A long-established audience may look better or worse than recent arrivals. Each follower's full profile is read to get their post, follower and following counts.
Suspicious. A follower is suspicious when at least one of these is true:
- It carries a spam-type moderation label from a labeler other than itself:
spam,impersonation,scam,inauthentic,misleading,engagement-farming,!hide,!takedownor!warn. - Its handle no longer resolves (
handle.invalid). - It is mass-following: it follows 1,000+ accounts and has fewer than a tenth as many followers.
- It has never posted, follows 500+ accounts and has fewer than 10 followers.
Ghost. Not suspicious, but has never posted. These are usually lurkers or abandoned signups. Big accounts collect many of them through onboarding and starter packs, so ghosts weigh much less than suspicious followers. New accounts and empty profiles on their own are reported but never counted against the account.
Engagement rate. Interactions are likes + reposts + replies + quotes. They are measured on the account's own top-level posts and quotes, not on replies or reposts. The rate is the median interactions per post divided by followers, so one viral post cannot carry it (avgEngagementRate is there too). Posts younger than 24 hours are left out when at least five older ones exist, because they are still collecting interactions. Engagement rates fall naturally as accounts grow, so compare accounts of similar size.
Cadence. Posts per week counts own posts, replies and quotes from the oldest analyzed item until now. Times use the post's own timestamp, unless it is far from when Bluesky first saw the post (imports, wrong clocks).
Scores.
| Score | Formula |
|---|---|
| audienceQualityScore | 100 − 150 × suspiciousShare − 40 × ghostShare, clamped to 0 to 100; needs 20+ sampled followers |
| engagementScore | log curve over the median engagement rate: 0.01% = 0, 0.05% = 25, 0.2% = 50, 0.5% = 75, 1.5% = 100; needs 3+ posts |
| activityScore | 60 for recency (last post within 7 days = 60, 30 days = 36, 90 days = 18) + 40 × min(posts per week / 3, 1) |
| accountScore | 45% audience + 35% engagement + 20% activity, reweighted over the parts that exist |
Verdict: 75+ strong, 55+ solid, 35+ mixed, below that weak. An account that itself carries a spam-type moderation label is capped at 30. When there isn't enough data (no follower sample and fewer than two parts), the verdict is insufficient_data.
Flags. moderation_label, many_suspicious_followers (25%+), elevated_suspicious_followers (10%+), spam_labeled_followers (3%+ labeled), mostly_ghost_followers (50%+), small_follower_sample (fewer than 100 followers resolved), low_engagement (below 0.05% with 1,000+ followers), engagement_from_one_post (one post holds half the interactions), no_posts, inactive_30d, mostly_reposts (60%+ of the feed), follow_back_pattern (follows at least 80% as many accounts as follow it, with 1,000+ followers), new_account (under 90 days).
These are heuristics. They point you to what to look at, but they don't prove anything about any individual follower or account.
Pricing
Pay per event:
- $0.02 per audited account (
account-audited), whatever the sample size. - Free: invalid input, handles or DIDs without a profile, deactivated or suspended accounts, and accounts that fail because of an API error. They appear as items with a
statusand anerrorCode. - A tiny start fee of $0.00005 per run.
50 accounts cost about $1. If you set a maximum cost per run, the actor stops before going over it and lists the accounts it skipped in the run summary.
Speed
With the defaults an account takes about 5 seconds (around 27 API requests). A 5,000-follower sample takes roughly 250 requests. Requests are paced and back off automatically if Bluesky asks the actor to slow down.
Run summary
The RUN_SUMMARY record in the key-value store lists audited, charged, free and skipped counts, plus request, retry and rate-limit stats.
Data source, privacy and limits
- Data comes live from Bluesky's public AppView (
api.bsky.app) through unauthenticated AT Protocol endpoints. It is read-only: the actor never posts, likes, follows or messages. - Every run fetches fresh data, so deleted posts and deactivated accounts drop out automatically.
- Follower data is reduced to aggregate shares. The only individual followers listed are the largest public accounts in
notableFollowers, and you can turn that off. - Bluesky profiles are personal data in many jurisdictions (for example under the GDPR). You are responsible for having a legitimate reason to process them and for using the results lawfully. Don't use this actor for spam, harassment or automated interaction, and don't use it to build bulk datasets of people.
- Counts come from Bluesky's AppView and can differ slightly from what other apps show.
Disclaimer
This actor is an independent tool and is not affiliated with, endorsed by or sponsored by Bluesky Social PBC. It only reads publicly available data. A suspicious share, score or flag is a statistical estimate, not a finding that any account is fake or acting in bad faith, so check before you act on it.