Initial release.
- Polymarket + Kalshi in one normalized dataset (one row per market, identical shape).
- Keyword search: server-side relevance on Polymarket (
/public-search), word-match scan on Kalshi.
- Filters: category/tag (cross-platform), status (active / resolved / all), minimum volume, minimum liquidity (Polymarket only — Kalshi publishes none), close-date window.
- Prices: yes/no, per-outcome, bid/ask, spread, last trade, 24h change (Polymarket), implied probability.
- Activity: total and 24h volume, open interest (Kalshi), liquidity (Polymarket).
- Settlement: Kalshi official results; Polymarket winners derived from settled prices.
- Result cap split evenly across platforms; unlimited runs capped at 10,000 markets.
- State persists across migrations; per-platform pagination streams resume from the request queue.
Verified against live APIs on 2026-08-27. Notable upstream discrepancies documented in src/constants.ts: Kalshi returns *_dollars/*_fp decimal strings (not the integer cents in older docs), and liquidity_dollars is unpopulated (always zero) on all public endpoints.