searchable index of bluesky posts
running on a free-tier render.com instance at https://indexer-hp2l.onrender.com/
parameters:
limit
: (default 100) number of results to returnsort
(defaultdesc
)asc
: chronologicaldesc
: reverse-chronologicalrelevance
: sort by score (useful with full-text searches)
q
: lucene query. the following fields can be searched:text_en
: searches the text of english posts. this is the default field.text_??
: searches the text of posts in any other language. check theseen
value of/langs
to show all language codes in the indexrkey
: the post iddid
: the owner id (consider using thedids
query parameter instead)createdAt
: utc creation date—as these are lexically ordered, you can filter date ranges using lucene range syntax, e.g.q=createdAt:[* TO 2025-06-23T07:22:58.510000Z]
to find posts made before 23 june.lang
: languages the post is tagged with (might not always match the 2-letter code that text was indexed under)known_lang
: cleaned version oflang
values that will always match thetext_??
values stored against the post (for example, posts tagged withjp
will have aknown_lang
value ofja
)embed_type
: lexicon types of any embeds attached to the post, e.gapp.bsky.embed.external
orapp.bsky.embed.images
tag
: tags added to the post. for hashtags, this will not include the hashlabel
: labels applied to the post. currently only self-labels are indexedhas
: convenience field for checking if the post has anembed
,tag
orlabel
. for example, you can exclude posts with embedded content from your search result by adding-has:embed
to the queryis
: convenience field for checking if the post is a reply to another post
dids
: list of accounts whose posts should be searched. can be passed as a comma-separated list, or if many accounts are to be searched consider posting the query parameters as a json object in the request body insteaddebug
: (defaultfalse
) shows how theq
parameter was parsed and scoring weights for each result