How Value Detection Works

After projections are computed, the pipeline fetches live odds from three books in parallel: Fanatics, DraftKings, and Kalshi (a regulated prediction-market exchange). For every market line, the best decimal across all books is compared against the model’s fair probability. The book that offers the best price wins each line and is shown in the per-row tag (FAN / DK / KAL). Kalshi prices are adjusted for their per-trade fee (ceil(7 × P × (1−P)) cents per contract on taker fills) so the displayed odds match what you’ll actually pay at execution rather than the raw exchange quote.

A “value play” is flagged when the model’s edge exceeds the sport-specific minimum threshold (shown on each model page). Value plays appear as green indicators on game cards and are detailed on game detail pages with full book/model/fair/edge/EV columns.

The odds integration is non-blocking, so projections still complete even if the odds API fails. Critically, book lines are never fed back into the projection engine. The model’s output always stands as an independent opinion.

Between full pipeline runs, a lightweight odds refresher runs continuously in the background (a long-running worker, not the daily cron). It re-checks Kalshi’s live markets roughly every 90 seconds and re-pulls the sportsbook lines about every 15 minutes, staggered to stay within the odds API’s free-tier limit. Each pass re-runs value detection against the existing projections and writes new bet observations for any newly-flagged value plays. Projections are not recomputed; that only happens on the full daily pipeline. The refresh window is strictly pre-game; once a game starts, its last pre-game snapshot is frozen as the closing-line of record.