- WebSocket / SSE subscriptions per supported book
- Schema-mapped to a unified line-event record
- Replay buffer for outage recovery and post-mortem
Sports Betting Arbitrage — cross-book detection in real time.
A live market scanner that pulls odds from a panel of sportsbooks, normalises lines across formats, surfaces arbitrage windows the moment they open, and sizes positions so the bettor knows exactly how much to put down on each side — before the books close the gap.
What problem this solves.
Sportsbook markets disagree, briefly. When two books offer mismatched lines on the same event, a bettor who places opposing stakes on both sides locks in a guaranteed return. The catch is the windows are small — sometimes seconds — and the math is fiddly: stake sizing must account for vig, rounding, and per-book deposit limits.
Group 03 built the scanner that handles all of it. The product surfaces only the arbs that survive the cost basis, computes the per-book stake split, and stops the user from chasing fake edges that disappear under the implied-probability conversion.
The system, end to end.
Three subsystems carry the load. A feed layer subscribes to odds streams from each book and normalises American / decimal / fractional formats into a single implied-probability model. A detection layer pairs lines across books for the same market and flags any combination whose summed implied probabilities are below 1.00 — the formal definition of an arbitrage opportunity. A sizing layer then computes the stake split that locks in the return, with a Kelly cap option for risk-aware bettors.
What makes the system honest is the cost-basis filter. Every flagged arb is run against a configurable fee model — vig, deposit fees, withdrawal taxes — and surfaced only if the realised return is positive after costs. The default model leans pessimistic; the team would rather miss a marginal arb than ship a false-positive one.
What it's built on.
| Feed layer | WebSocket / SSE subscriptions per supported book |
|---|---|
| Normalisation | American / decimal / fractional → implied probability |
| Detection & sizing | Sum-of-implied-probs < 1 detector across paired lines |
| Cost basis & alerts | Per-user fee model (vig, deposit, withdrawal) |
- American / decimal / fractional → implied probability
- Per-event market-key alignment across books
- Vig stripping with configurable models
- Sum-of-implied-probs < 1 detector across paired lines
- Per-book stake split solver with rounding tolerances
- Kelly-cap option for risk-aware sizing
- Per-user fee model (vig, deposit, withdrawal)
- Post-cost return as the surfacing threshold
- Push alerts via a single fan-out worker
What the team shipped.
What sets this capstone apart.
No arb survives the cost basis silently.
The scanner does not show theoretical arbs. It shows arbs that survive the fee model the user configured. The pessimistic default means the surface is sparser, but every entry is real money.
Normalise first, then compare.
American, decimal, fractional — every book speaks its own dialect. The system converts all of them to implied probability before the detection layer ever sees them. The detector compares apples to apples or it does not run.
Tell the bettor what to stake.
Detection is half the work. The other half is the per-book stake split that locks in the return. The scanner returns both — and a Kelly cap for the bettors who want one — because anything less ships the user a math problem instead of a product.
How this project landed.
Group 03 is a one-person team, and the proposal had every sign of trying to do too much — live data, account integration, social leaderboard, all in twelve weeks. The first review trimmed scope to the scanner-and-sizer core and held the line on it.
The result is a focused, honest tool. The arbitrage math is correct; the cost-basis discipline is the kind of decision a more excitable project would have skipped. The capstone shipped with the social-and-leaderboard ideas filed under "not in v1" — which is, itself, the lesson.