Bluesky Posts Scraper - Author Feed, Likes & Reposts avatar

Bluesky Posts Scraper - Author Feed, Likes & Reposts

Pricing

$1.00 / 1,000 posts scrapeds

Go to Apify Store
Bluesky Posts Scraper - Author Feed, Likes & Reposts

Bluesky Posts Scraper - Author Feed, Likes & Reposts

Scrape any public Bluesky account: post text, ISO dates, likes, reposts, replies, quotes and a combined engagement total, one row per post. Pages past the API's 100 ceiling, bulk accounts, no login. $0.001 per post.

Pricing

$1.00 / 1,000 posts scrapeds

Rating

0.0

(0)

Developer

Broke to Built

Broke to Built

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Bluesky Posts Scraper — Author Feed, Likes & Reposts

Scrape any public Bluesky account and get one row per post: text, ISO date, likes, reposts, replies, quotes, a combined engagement total, and a clickable bsky.app link.

No login, no app password, no API key. $0.001 per post — an account that returns nothing is recorded and not charged.

Input

{ "handle": "bsky.app", "maxPosts": 100 }

Bulk, including replies:

{
"handles": ["bsky.app", "@pfrazee.com", "https://bsky.app/profile/jay.bsky.team"],
"maxPosts": 250,
"filter": "posts_with_replies"
}
FieldTypeNotes
handlestringA handle, @handle, a DID, or a bsky.app/profile/... URL.
handlesstring[]Up to 10 accounts per run.
maxPostsinteger1–500 per account. You are charged per post returned.
filterenumposts_no_replies, posts_with_replies, posts_with_media.
includeRepostsbooleanSee below. Default false.

Output

{
"ok": true,
"authorHandle": "bsky.app",
"authorFollowers": 34855310,
"url": "https://bsky.app/profile/bsky.app/post/3mv3zcjaijk22",
"text": "Welcome to the ONLY event about Apple happening today…",
"createdAt": "2026-09-09T17:02:28.502Z",
"likeCount": 1712,
"repostCount": 163,
"replyCount": 360,
"quoteCount": 51,
"engagementTotal": 2286,
"languages": ["en"],
"isReply": false,
"isRepost": false,
"hasMedia": true
}

What it gets right

  • Reposts are excluded by default. Bluesky's author feed also returns posts the account reposted, written by other people — even under posts_no_replies. Someone buying "this account's posts" does not mean that, and billing per reposted row is worse than useless. Set includeReposts: true if you want them; every row carries an isRepost flag either way.
  • It pages past the API's 100-per-request ceiling, and asks for a full page each time — because filtering reposts shrinks each page's yield, so requesting only the shortfall converges too slowly and quietly returns fewer posts than you asked for.
  • There is a clickable link. The API returns only an at:// URI; the public bsky.app URL is built from its record key. Without that you have no link to open.
  • engagementTotal equals its own parts — likes + reposts + replies + quotes, so you can sort by reach without a spreadsheet formula.
  • Real error messages. The AT Protocol reports "Profile not found" in the body; you get that instead of HTTP 400.
  • It cannot spin. Paging stops when the cursor stops advancing, and is bounded by a page budget.

Pricing

$0.001 per post returned. No start fee. A missing account, or one with no posts under the chosen filter, produces an ok: false record and is not charged.

Limits

  • Public data only — what a logged-out visitor can see. No followers lists, no DMs, no blocked or private content.
  • Search is not offered. searchPosts returns 403 without authentication, so this reads author feeds. Point it at accounts, not keywords.
  • 10 accounts per run, up to 500 posts each.
  • Engagement counts are a snapshot at read time and keep moving.

FAQ

Do I need a Bluesky account or app password? No.

Can I search Bluesky by keyword? Not here — the public search endpoint requires auth.

Why do I see fewer posts than maxPosts? The account may not have that many under the chosen filter, or many of its recent entries were reposts, which are excluded by default.

Changelog

  • 0.1 (2026-09-10) — first release. One row per post, reposts excluded by default, cursor paging past 100, engagement totals, bulk accounts.