Bluesky Scraper . Followers, Follows, Posts avatar

Bluesky Scraper . Followers, Follows, Posts

Pricing

from $0.00005 / actor start

Go to Apify Store
Bluesky Scraper . Followers, Follows, Posts

Bluesky Scraper . Followers, Follows, Posts

Scrape any public Bluesky profile — followers, follows, posts, or profile metadata. No login.

Pricing

from $0.00005 / actor start

Rating

0.0

(0)

Developer

Andrew

Andrew

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Bluesky Scraper — Followers, Follows, Posts

Scrape any public Bluesky profile — followers, follows, posts, or profile metadata. Powered by the open atproto public API, so there's no login, no API key, no setup.

What you get

Four modes in one actor — one record per row, ready to export.

Followers / Follows mode — one row per user:

  • did, handle, displayName, description
  • avatar URL, createdAt, profileUrl
  • relation flag (follower or follow)
  • scrapedFromHandle — the account you queried

Posts mode — one row per post from the user's author feed:

  • postUri, postUrl, cid
  • text, createdAt, indexedAt, langs
  • Engagement: likeCount, repostCount, replyCount, quoteCount
  • isReply / replyToUri, isRepost / repostedByHandle
  • embedType (image, video, external link, quoted post)
  • Author fields: authorDid, authorHandle, authorDisplayName, authorAvatar

Profile mode — single row with full profile metadata:

  • displayName, description, avatar, banner
  • followersCount, followsCount, postsCount
  • createdAt, indexedAt, profileUrl

Pagination

  • NEXT_PAGE_ID cursor saved to the Key-value store so large lists can be chained across runs

Use cases

  • Audience research — pull the full follower list of any creator, brand, or competitor
  • Lead generation — find people in a niche by following the followers of a topical account
  • Content analysis — track a Bluesky account's posts, engagement, and posting cadence
  • Competitor monitoring — keep tabs on what an account publishes and how it performs
  • Network mapping — combine follows and followers to reconstruct community graphs
  • LLM / RAG ingestion — feed clean post text and author metadata into your AI pipeline

How to use

  1. Enter the Handle or DID — accepts bsky.app, jay.bsky.team, a profile URL like https://bsky.app/profile/bsky.app, or a DID. A bare username like alice is auto-completed to alice.bsky.social.
  2. Choose a Mode — Followers / Follows / Posts / Profile only
  3. Set Max Items — default 500 per run, or 0 for unlimited (stops just before the actor timeout)
  4. Run the actor — results appear in the Dataset tab
  5. To fetch the next page, copy NEXT_PAGE_ID from the Key-value store tab and paste it into Page ID on the next run

Output format

Followers / Follows row:

{
"kind": "user",
"relation": "follower",
"scrapedFromHandle": "bsky.app",
"did": "did:plc:abc123",
"handle": "alice.bsky.social",
"displayName": "Alice",
"description": "art & code",
"avatar": "https://cdn.bsky.app/...",
"createdAt": "2024-05-01T12:34:56Z",
"profileUrl": "https://bsky.app/profile/alice.bsky.social"
}

Post row:

{
"kind": "post",
"scrapedFromHandle": "bsky.app",
"postUri": "at://did:plc:.../app.bsky.feed.post/3mlvllqtnmk2g",
"postUrl": "https://bsky.app/profile/bsky.app/post/3mlvllqtnmk2g",
"cid": "bafyreidkk...",
"text": "Welcome to Bluesky!",
"createdAt": "2026-05-15T14:54:22Z",
"indexedAt": "2026-05-15T14:54:23Z",
"langs": ["en"],
"isReply": false,
"replyToUri": null,
"isRepost": false,
"repostedByDid": null,
"repostedByHandle": null,
"embedType": "app.bsky.embed.record",
"replyCount": 12,
"repostCount": 5,
"likeCount": 220,
"quoteCount": 3,
"authorDid": "did:plc:...",
"authorHandle": "bsky.app",
"authorDisplayName": "Bluesky",
"authorAvatar": "https://cdn.bsky.app/..."
}

Pagination

For large accounts (millions of followers), use the pagination cursor to fetch more across multiple runs:

  1. Run the actor — when it finishes, NEXT_PAGE_ID is saved in the Key-value store tab
  2. Copy the NEXT_PAGE_ID value
  3. Start a new run with the same handle and mode and paste it into the Page ID field
  4. Repeat until NEXT_PAGE_ID is null (list fully exhausted)