Find +EV betting opportunities by comparing Pinnacle's sharp no-vig line against soft books (Hard Rock Bet, DraftKings, FanDuel, BetMGM).
Runs entirely on your local machine. No hosting, no cloud, no monthly infrastructure costs — just your API subscription.
git clone https://github.com/YOUR_USERNAME/EdgeManager.git
cd EdgeManager
pip install -r requirements.txtcp config.example.py config.pyEdit config.py and add your SportsGameOdds API key.
Get a key at: https://sportsgameodds.com (free 7-day trial on paid plans)
python run.py
# or explicitly:
python run.py scan- Fetches odds from SportsGameOdds for NBA, EPL, La Liga (configurable)
- Strips Pinnacle's vig to calculate the true no-vig probability for each side
- Calculates EV% for each soft book's line vs the true probability
- Displays edges sorted by EV, with Kelly Criterion bet sizing
- Saves everything to a local SQLite database for tracking
python run.py scanpython run.py log-bet \
--game "Heat @ Lakers" \
--sport basketball_nba \
--market Moneyline \
--side "Lakers" \
--book hardrockbet \
--odds -115 \
--stake 50python run.py pendingpython run.py settle 1 win # Bet ID 1, result = win
python run.py settle 2 loss # Bet ID 2, result = loss
python run.py settle 3 push # Bet ID 3, push/refundpython run.py roi| Setting | Default | Description |
|---|---|---|
SGO_API_KEY |
— | Your SportsGameOdds API key |
SPORTS |
NBA + EPL + La Liga | Sports to scan |
SHARP_BOOK |
pinnacle | Benchmark book for true line |
SOFT_BOOKS |
HRB, DK, FD, MGM | Books to find edges on |
MIN_EV_PERCENT |
2.0 | Minimum EV% to show |
MARKETS |
ML + Spread + Total | Markets to analyze |
SHOW_TOP_N |
20 | Max edges to display |
#01 🏀 Celtics @ Knicks
Mon Apr 07 07:30PM UTC
Moneyline → Celtics
Hard Rock: +105 | Pinnacle: +100
True prob: 50.0% | EV: +2.4% | ¼ Kelly: 1.2% of bankroll
- True prob — Pinnacle's no-vig probability for this outcome
- EV% — Expected long-run profit per $100 bet (e.g. +2.4% = $2.40 profit/per $100)
- ¼ Kelly — Recommended bet size as % of bankroll (already at conservative 1/4 Kelly)
Using ¼ Kelly is recommended. On a $1,000 bankroll:
| ¼ Kelly | Bet Size |
|---|---|
| 1% | $10 |
| 2% | $20 |
| 3% | $30 |
| 5% | $50 |
Never bet more than 5% of bankroll on a single bet regardless of Kelly.
All data is saved to data/edges.db — a local SQLite database.
You can open this with any SQLite viewer (e.g. DB Browser for SQLite)
or query it directly:
sqlite3 data/edges.db "SELECT * FROM edges ORDER BY ev_percent DESC LIMIT 10"Run a scan every day at 11am and 5pm:
crontab -e
# Add:
0 11,17 * * * cd /path/to/betting-edge-finder && python run.py scan >> logs/scan.log 2>&1In config.py, add to the SPORTS list:
SPORTS = [
"basketball_nba",
"americanfootball_nfl",
"soccer_epl",
"soccer_la_liga",
"soccer_bundesliga",
"soccer_serie_a",
"soccer_champions_league",
]- SportsGameOdds Rookie plan: ~$99/mo
- Hosting: $0
- Database: $0
- Total: ~$99/mo