Loading repository data…
Loading repository data…
odds-api / repository
Python arbitrage scanner for sports betting odds using odds-api.net, with mock mode, stake sizing, JSON output and Discord alerts.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A Python repo for scanning bookmaker prices to find risk-free arbitrage bets,
Free key and account (Plug and play) Get a free Odds API key | Coverage | Docs | Pricing
ODDS_API_KEY.This project is a working starter, not betting advice. Prices move, markets suspend, limits apply, and execution can fail.
python -m venv .venv
.\.venv\Scripts\activate
python -m pip install -e ".[dev]"
python -m odds_api_arbitrage_scanner --mock --stake 100
Expected mock output:
1. City FC vs Rovers
Market: h2h
Profit: 7.88%
Implied probability: 0.9270
Best prices:
- City FC: 2.58 at Bookmaker B
- Draw: 3.62 at Bookmaker A
- Rovers: 3.80 at Bookmaker A
Create a free key:
Then run:
$env:ODDS_API_KEY="your_api_key"
$env:ODDS_API_BASE_URL="https://api.odds-api.net/v1"
python -m odds_api_arbitrage_scanner --sport rugby-league --league NRL --market h2h --limit 20 --stake 100
For JSON output:
python -m odds_api_arbitrage_scanner --mock --format json
$env:DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."
python -m odds_api_arbitrage_scanner --mock --stake 100
The alert includes the event, projected margin, best bookmaker for each selection, and stake allocation.
--mock Use bundled mock odds.
--sport Sport filter, for example rugby-league.
--league League filter, for example NRL.
--market Market to scan. Default: h2h.
--limit Maximum events to load. Default: 25.
--stake Total stake for allocation. Default: 100.
--min-profit Minimum projected profit percent. Default: 0.
--format table|json Output format.
--discord-webhook Optional Discord webhook URL.
For each event and market, the scanner:
Example formula:
implied_probability = (1 / best_home_odds) + (1 / best_away_odds)
profit_percent = ((1 / implied_probability) - 1) * 100
.
├── src/odds_api_arbitrage_scanner/
│ ├── api.py
│ ├── cli.py
│ ├── config.py
│ ├── discord.py
│ ├── mock_data.py
│ └── scanner.py
├── tests/
├── docs/
├── examples/
├── .env.example
├── pyproject.toml
└── README.md
python -m pytest
This code is for odds analysis and developer education. It does not place bets. Arbitrage is not risk-free. Odds can change between fetch and execution, accounts can be limited, markets can suspend, results can void, and availability varies by jurisdiction.
MIT