Bluesky Post Search (Posts Only, Official API) avatar

Bluesky Post Search (Posts Only, Official API)

Pricing

from $1.00 / 1,000 post retrieveds

Go to Apify Store
Bluesky Post Search (Posts Only, Official API)

Bluesky Post Search (Posts Only, Official API)

Search Bluesky posts by keyword or hashtag, or fetch posts by URL, via Bluesky's official public API. Posts only by design: no follower harvesting, no profile scraping. Deleted posts are never returned.

Pricing

from $1.00 / 1,000 post retrieveds

Rating

0.0

(0)

Developer

Inn Corp

Inn Corp

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

Search Bluesky posts by keyword or hashtag, or fetch specific posts by URL, through Bluesky's official public API. Posts only, by design: this Actor never harvests follower graphs, never enumerates profiles, and returns no author data beyond what each post itself carries. If you need a compliant source of Bluesky post data for monitoring, research, or AI pipelines, that constraint is the point.

What it does

  • Give it search queries (open source, #photography), each searched separately with Bluesky's own search.
  • Or give it direct post URLs (https://bsky.app/profile/handle/post/id, at:// URIs also accepted) to fetch specific posts.
  • Filter by date window (YYYY-MM-DD), language, and sort (latest or top).
  • Get back one clean record per unique post: text, author handle and display name, timestamps, like/repost/reply/quote/bookmark counts, language tags, embed type, and working web URLs.
  • A post matching several of your queries appears once, with queriedBy listing every query that matched it, and is charged once.

What it deliberately does not do

  • No follower or following lists. Ever. There is no input that produces them, and none will be added.
  • No profile scraping. No bios, no follower counts, no account enumeration. Author fields are limited to the handle and display name that Bluesky attaches to each post result.
  • No guessing. Every field comes from Bluesky's API response. Missing data is null, never invented.

Deletion and privacy

This Actor reads Bluesky's live public API at run time and returns only post-level data. Datasets reflect the moment of fetch: if an author deletes a post, rerunning the same input will no longer return it, and post URLs pointing at deleted posts come back empty rather than resurrected from a cache. If you persist datasets, honor deletion on your side too: refresh before you republish, and drop records the API no longer returns.

Posts on Bluesky are public by the platform's design, and Bluesky documents these AppView endpoints as intentionally public and usable without authentication. Use the results responsibly: respect people's context, comply with applicable data-protection law (posts can contain personal data), and do not use this Actor to build profiles of individuals. That last use case is exactly what it refuses to support by construction.

Output example

A real record from a test run (queries: ["apify"]):

{
"uri": "at://did:plc:svkeafnra23hxnsg7vaogq64/app.bsky.feed.post/3mtm364ds7v22",
"url": "https://bsky.app/profile/dubaipropertyleadf.bsky.social/post/3mtm364ds7v22",
"authorHandle": "dubaipropertyleadf.bsky.social",
"authorDisplayName": "Dubai Property Lead Finder",
"text": "## Dubai Property Lead Finder\n\nFind Dubai property leads faster with the Dubai Property Lead Finder**. It helps real estate professionals discover property listings, agent contacts, phone numbers, agencies, and useful property details\n**Explore Dubai Property Lead Finder:** apify.com/skyline_scra...",
"createdAt": "2026-08-21T15:28:00.803Z",
"likeCount": 3,
"repostCount": 0,
"replyCount": 0,
"quoteCount": 0,
"bookmarkCount": 0,
"langs": ["en"],
"embedType": "external",
"indexedAt": "2026-08-21T15:28:04.768Z",
"queriedBy": ["apify"],
"fetchedAt": "2026-08-24T20:26:18+00:00"
}

embedType is one of image, video, external, record (quote post), recordWithMedia, or null for plain text posts. langs is the language tag list the author's client attached, when present.

Typical uses

  • Monitor mentions of a brand, product, or topic on a schedule.
  • Collect hashtag activity for research or reporting.
  • Feed an AI agent real, current posts so its answers cite live sources.
  • Re-fetch a known list of posts to get current engagement counts.

Input

FieldMeaning
queriesKeywords or hashtags, one per line. Each is searched separately.
postUrlsSpecific posts as bsky.app URLs or at:// URIs. Optional.
sortlatest (default) or top.
sinceDate / untilDatePosted-date window, YYYY-MM-DD, inclusive.
langTwo-letter language code, for example en.
maxPostsPerQueryUpper bound per query, default 100, max 1000.
proxyConfigurationDefaults to Apify Proxy. Bluesky refuses anonymous search from datacenter IPs, so keep it on for cloud runs.

At least one query or one post URL is required. A malformed post URL is logged and skipped without killing the run.

Honest limits

  • Bluesky search matches whole words and is not a firehose; a query with no matches returns zero records and says so in the log.
  • The date window is enforced client-side: Bluesky's own since/until filter works on server timestamps while createdAt is author-supplied, so posts with heavily future-dated or back-dated createdAt values are excluded from your results when a window is set.
  • Bluesky restricts deep result pagination for anonymous clients in some environments. The Actor detects this and automatically falls back to date-window pagination for latest-sorted queries; top-sorted queries may then be capped at 100 posts, and the log tells you when that happens.
  • Engagement counts are a snapshot at fetch time; they change as people interact with the post.

Fair pricing

Pay per post record returned and per query processed, once pay-per-event pricing is enabled. Duplicates across queries are charged once. A search that ran successfully but matched nothing still counts as a processed query, because the search itself is the work; failed queries are not charged. No subscription.