An HTTP 400 or 404 on page 2 or later of a listing (for example an expired cursor) now ends pagination for that search term or handle only, keeps the rows already delivered and is counted in the status message (Listings that ended early). Other statuses, such as 403 or 5xx, still fail the run.
README: the Pricing section no longer mentions a start fee or a USD amount, results are listed before input, and a Related Actors section was added.
Verified live with three inputs: typical (starter packs for "journalists", 20 rows), edge (feeds of bsky.app with at least 1000 likes, 7 rows), no results (unmatched search, one unbilled status row). The rejected-cursor case is covered by a fixture test, because the live API does not produce it on demand.
0.2
A removed or hidden member list (HTTP 400/404 from Bluesky) is now skipped and counted in the status message instead of ending the run after rows were already billed; the run fails only when no member list can be read at all.
A rejected batch of member profiles leaves those members without follower statistics and is counted; it no longer ends the run.
"None of the handles exist" is reported only when the listing request itself for that handle is rejected, not when a sub-request of one of its communities fails.
Listing fields that filters and counts depend on (joinedAllTimeCount, likeCount, listItemCount, publication date) are counted in the status message; if none of at least three listed records carries one, the run fails instead of reporting "narrow your filters".
Member records that arrive in an unexpected shape are counted separately from communities; if none of at least three has the expected shape, the run fails.
An empty page that still carries a cursor no longer ends pagination early; a repeated cursor does.
Corrected the price note below: $0.005 per result is above the post and profile scrapers ($0.001 to $0.003) because every row is a catalog record with its own sub-requests (member counts, feed health), and feeds and lists have no competing Actor.
0.1
Initial release: starter packs, feeds and lists as one catalog, with filters, feed health check, members with follower counts, and "only new since last run".
Verified against the live Bluesky API with three inputs:
Typical: starter packs for "journalists", 20 results in about 12 s, every row with join and member counts.
Edge: feeds for "news" with only online feeds and at least 1000 likes; lists of bsky.app with listPurpose: curate and minMembers: 10.
No results: an unmatched search returns one unbilled status row with found: false.
Measured cost about $0.017 per 1000 results at 0.5 GB; price $0.005 per result.