OddsJam¶
Overview¶
OddsJam is a sports betting data platform built specifically for serious sports bettors and model builders. Unlike broad sports media APIs, OddsJam is focused on odds comparison, market efficiency analysis, and value bet identification. Its flagship feature is the most complete historical odds dataset available for backtesting — including opening lines, closing lines, and full line movement history for major US sports and soccer.
The platform offers real-time odds from 30+ sportsbooks, tools for identifying +EV bets, sharp book comparisons, and a backtesting engine. Pricing starts around $199/month for the professional plan.
Key Features¶
- Historical odds feed: Opening, closing, and full line movement history dating back years
- Line movement tracking: Tracks how odds shift from opening to close across all bookmakers
- Sharp book comparison: Automatically compares odds at sharp bookmakers (Pinnacle) against soft books
- +EV detection: Built-in tools that compare model probabilities to current odds and flag positive EV opportunities
- Backtesting engine: Web-based backtesting with P&L tracking, CLV analysis, and ROI metrics
Data Available¶
| Data | Available | Notes |
|---|---|---|
| Pre-game odds | ✅ | 30+ bookmakers, real-time |
| Historical odds | ✅ | Opening, closing, full movement history |
| Live odds | ✅ | In-play for major sports |
| Line movement | ✅ | Full history of odds changes |
| Match results | ❌ | Not provided |
| Statistics | ✅ | Basic team stats for context |
Python Integration¶
import requests
API_KEY = "your-oddsjam-api-key"
BASE_URL = "https://api.oddsjam.com/v2"
headers = {"Authorization": f"Bearer {API_KEY}"}
url = f"{BASE_URL}/odds"
params = {
"sport": "soccer_epl",
"bookmakers": "pinnacle,draftkings,fanduel",
"market": "h2h",
"game_date": "2024-09-08",
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
for game in data["games"]:
pinnacle = [b for b in game["books"] if b["name"] == "pinnacle"][0]
soft_avg = sum(b["title"] for b in game["books"] if b["name"] != "pinnacle")
clv = (pinnacle['closing_odds'] - soft_avg) / soft_avg
print(f"CLV vs market: {clv:.2%}")
Notes¶
- OddsJam is US-market focused; NFL, NBA, MLB, NHL, college sports are the core coverage
- Soccer coverage exists but is thinner than dedicated soccer APIs
- The backtesting engine is browser-based — for programmatic backtesting, use the API directly
- Historical odds data is the key differentiator for CLV validation
- $199/mo is significant — justify via backtesting results before committing