Files
arbitrage-api/odds
2026-05-15 15:06:30 +02:00
..
2026-05-15 15:06:30 +02:00
2026-05-15 15:06:30 +02:00
2026-05-15 15:06:30 +02:00
2026-05-15 15:06:30 +02:00

Odds module

Handles ingestion and storage of sports odds from The Odds API. Arbitrage logic will consume normalized odds from this layer once implemented.

Contents

Path Description
data/samples/boxing_odds.json Snapshot of boxing h2h odds (~1 MB)
scripts/fetch_odds.py CLI to pull live odds and save JSON

Legacy path api-pull/Odds/boxing_odds.json may still exist locally; prefer data/samples/ for new work.

Fetching odds

# From repository root, with ODDS_API_KEY set
python odds/scripts/fetch_odds.py \
  --sport boxing_boxing \
  --regions uk,eu \
  --markets h2h \
  --out odds/data/samples/boxing_odds.json

Script functions

Function Purpose
get_api_key() Reads ODDS_API_KEY from the environment
fetch_odds(sport, regions, markets, api_key) HTTP GET to /v4/sports/{sport}/odds
save_odds(data, output_path) Writes pretty-printed JSON
main() Parses CLI args and runs fetch + save

Sample data

boxing_odds.json is an array of events. Each event has home_team, away_team, commence_time, and a bookmakers list. Each bookmaker exposes markets (e.g. h2h head-to-head) with outcomes and decimal price values.

See docs/DATA_SCHEMA.md for the full field reference.

Next steps (arbitrage)

Planned pipeline:

  1. Normalize — flatten bookmaker/outcome rows per event
  2. Implied probability1 / decimal_odds per outcome
  3. Cross-book compare — find outcomes where sum of best inverse odds < 1 (arb margin)
  4. Stake split — optional Kelly / equal-profit calculators

None of steps 24 exist in code yet; this folder is ingestion-only today.