# Changelog of Bluesky Scraper (`0xgollum/bluesky-scraper`) Actor

- **URL**: https://apify.com/0xgollum/bluesky-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/0xgollum/bluesky-scraper.md

## Changelog

### 0.1 (2026-09-11, not yet deployed)

Initial build. 6 modes (`profiles`, `posts`, `followers`, `following`, `search_accounts`,
`search_posts`) against the AT Protocol's public AppView (`public.api.bsky.app`) — no login,
no proxy needed for anything except `search_posts`, which requires a Bluesky App Password
(Bluesky's own requirement, confirmed live: 401 `AuthMissing` on the authenticated host without
a session token).

Verified live against the real API before shipping (not just mocks): `getProfile`,
`getAuthorFeed`, `getFollowers`, `searchActors` all confirmed working end-to-end against real
Bluesky data (`bsky.app`, `bitcoin.bsky.social`). `search_posts` auth flow (`createSession` +
Bearer token) also confirmed live on 2026-09-11 using a real Bluesky App Password (0xgollum
account): login succeeded, keyword search on "bitcoin" returned real posts. All 6 modes are now
verified against the real API, not just mocks.

18 unit tests (row flattening against real captured payload shapes, client against a mock
transport, orchestration mode dispatch / free-tier cap / skip-on-error-without-billing).

**Cold review (same day)** - 2 real issues found and fixed before shipping:

1. Quota for `posts`/`followers`/`following` across multiple handles was split evenly and fixed
   upfront; a handle with fewer results than its share (e.g. an inactive account) wasted the
   rest instead of it rolling over to the other handles. Fixed: the split is now recomputed
   after each handle from what's actually left.
2. No retry on a transient failure - a single network hiccup or 5xx skipped a whole handle/term
   outright. Added one retry with a short delay for network errors and 5xx only (a 4xx - bad
   handle, blocked, not found - is not transient and is still skipped immediately). Also fixed:
   a page with a cursor but zero items would have looped forever instead of stopping.

21 tests total after the fixes (3 new, covering both issues). Re-verified live against the
real API after the fix (paginate against `0xgollum.bsky.social` and `bsky.app`).

**Not done yet**: icon, cover, `apify push`, publish, pricing — pending review.
