Bluesky Profile Lookup: Followers, Bio and Labels avatar

Bluesky Profile Lookup: Followers, Bio and Labels

Pricing

from $0.75 / 1,000 profile returneds

Go to Apify Store
Bluesky Profile Lookup: Followers, Bio and Labels

Bluesky Profile Lookup: Followers, Bio and Labels

Look up Bluesky profiles by handle or DID: followers, follows, posts count, bio, created date, labels and verification status. No key, no login, one row per profile.

Pricing

from $0.75 / 1,000 profile returneds

Rating

0.0

(0)

Developer

Adriana Voss

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Bluesky profile lookup by handle. Paste handles or DIDs and get one row per account: followers, follows, posts count, bio, created date, labels and verification status. No key, no login, no proxy.

Rows come from Bluesky's public AT Protocol profile endpoint at request time, so the counts are the live numbers, not a stale snapshot.

Who it's for

  • Influencer and creator vetting teams checking follower counts and account age before outreach.
  • Brand and trust-and-safety analysts who need labels, verification status and created date per account.
  • Agents and n8n/Make/Clay flows that enrich a list of Bluesky handles with structured profile fields.

What you get

One dataset row per profile: handle, did, displayName, description, followersCount, followsCount, postsCount, createdAt, indexedAt, labels (a list of label values; an empty list means none), verifiedStatus, trustedVerifierStatus, isLabeler, list, feed and starter-pack counts, pinnedPostUri, avatarUrl, bannerUrl, profileUrl and sourceUrl. Values Bluesky does not return are null, never 0 or an empty string. query and scrapedAt are on every row.

Handles can be pasted as bsky.app, @bsky.app, a bsky.app/profile/... link or a did:plc: id. An account that does not exist (or is deactivated or taken down) comes back as "found": false (NOT_FOUND) and is never charged.

How to use

  1. In the Apify Console. Open the actor page and click Start — the handles field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~bluesky-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"handles":["bsky.app","jay.bsky.team","did:plc:z72i7hdynmk6r22z27h6tvur"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"handles": [
"bsky.app",
"jay.bsky.team",
"did:plc:z72i7hdynmk6r22z27h6tvur"
]
}

One per line: a handle (bsky.app), @handle, a bsky.app/profile URL, or a did:plc: id. Accepted formats: bsky.app, @jay.bsky.team, https://bsky.app/profile/bsky.app, did:plc:z72i7hdynmk6r22z27h6tvur.

Output

One row per item, for example:

queryfoundstatushandlediddisplayNamedescriptionfollowersCountfollowsCountpostsCountcreatedAtindexedAtlabelsverifiedStatustrustedVerifierStatusisLabelerlistsCountfeedGensCountstarterPacksCountpinnedPostUriavatarUrlbannerUrlprofileUrlsourceUrlscrapedAt
bsky.apptrueOK<pinned post (at:// uri)>1970-01-01T00:00:00.000Z

Example runs

Three inputs that need no credentials of any kind and return rows as they stand. Paste one into the Input tab and press Start.

1. One account by handle

{
"handles": ["bsky.app"]
}

2. Mixed formats in one run (handle, link, DID)

{
"handles": ["@jay.bsky.team", "https://bsky.app/profile/bsky.app", "did:plc:z72i7hdynmk6r22z27h6tvur"]
}

3. Only found accounts, a few columns

{
"handles": ["bsky.app", "jay.bsky.team"],
"onlyFound": true,
"columns": ["handle", "followersCount", "postsCount", "createdAt"]
}

Pricing

Pay-per-event. A flat per-run fee covers session/proxy warmup; you're billed per item only when data is actually found and returned — see .actor/pay_per_event.json for exact prices. A miss is never charged.

Charged once per profile returned. An account that does not exist, a bad handle, or a rate-limited request is never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~bluesky-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"handles":["bsky.app","jay.bsky.team","did:plc:z72i7hdynmk6r22z27h6tvur"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~bluesky-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"handles":["bsky.app","jay.bsky.team","did:plc:z72i7hdynmk6r22z27h6tvur"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~bluesky-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"handles":["{{Bluesky profile}}"]}, mapping the row's Bluesky profile into the handles array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "bluesky profile lookup by handle" — the agent will find and run this actor.