Bluesky Scraper (profile posts)

Extract Bluesky profile posts as clean JSON via the network open AppView - post text, timestamps, engagement counts, images, links.

Extract Bluesky profile posts as clean JSON via the network open AppView - post text, timestamps, engagement counts, images, links. Multiple handles per run, no login, no bot-wall fights. Hourly monitoring, pay per result. Built for social listening and AI pipelines.

$3.00 / 1,000 · 100.0% success over 26 public runs in the last 30 days.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
authorHandles string One or more Bluesky handles whose posts to scrape, comma-separated, e.g. "bsky.app" or "nasa.gov, bbc.com". The @ is optional. bsky.app
includeReplies boolean Also include the profiles' replies, not only their own posts. False
postedAfter string Only include posts created on or after this date. Feeds are newest-first, so the run stops walking a profile once it reaches older posts. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. -
postedBefore string Only include posts created on or before this date. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. -
maxItems integer Stop after this many posts. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 500. 500
reportFailures boolean When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. True

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

A real result row from a recent run:

{
  "authorDisplayName": "Bluesky",
  "authorHandle": "bsky.app",
  "createdAt": "2026-10-14T21:06:12.577Z",
  "imageUrls": [],
  "indexedAt": "2026-10-14T21:06:12.858Z",
  "isReply": false,
  "langs": [
    "en"
  ],
  "likeCount": 2263,
  "linkTitle": null,
  "linkUrl": null,
  "postUri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mxuhaky3rc23",
  "quoteCount": 26,
  "replyCount": 49,
  "repostCount": 278,
  "text": "Happy 100th birthday, Winnie-the-Pooh! \n\nDid you know that Winnie was based on a real Canadian-British bear—and that his full name was WINNI...",
  "url": "https://bsky.app/profile/bsky.app/post/3mxuhaky3rc23"
}
FieldTypeMeaning
postUri string The post's AT-protocol URI - its stable identifier.
url string Direct link to the post on bsky.app.
text string Post text as published.
authorHandle string The author's public handle - the byline of the post.
authorDisplayName ['string', 'null'] The author's public display name.
createdAt ['string', 'null'] When the post was created (ISO timestamp).
indexedAt ['string', 'null'] When the network indexed the post (ISO timestamp).
langs array Languages the author declared for the post.
isReply boolean True when the post is a reply.
likeCount integer Likes at scrape time.
repostCount integer Reposts at scrape time.
replyCount integer Replies at scrape time.
quoteCount integer Quote posts at scrape time.
imageUrls array Full-size image URLs attached to the post (up to 4).
linkUrl ['string', 'null'] External link attached to the post, when present.
linkTitle ['string', 'null'] Title of the attached external link.

Health

100.0% success over 26 public runs in the last 30 days. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.