Skip to main content

Sports Betting & Money-Printer Alerts

Sports-betting intelligence for bots and bettors: live odds, guaranteed-profit arbitrage, +EV detection, player props, injury reports, and the new money-printer alert lane — historical odds, public betting percentages, sharp consensus, and steam/CLV alerts. All endpoints read free public feeds (The Odds API free tier + ESPN scoreboards); no API key is required to start, and a PRY_ODDS_API_KEY upgrades the odds feed to 10+ bookmakers.

What it scrapes

SourceData
The Odds API (free tier) + ESPN scoreboardsLive odds across 12+ bookmakers (Pinnacle, DraftKings, FanDuel, BetMGM, …), 20+ sports, markets h2h / spreads / totals / outrights
Odds API history feed + ESPNHistorical closing/open odds for past events
Public betting-percentage feedsShare of bets and share of money on each side
Sharp books (Pinnacle, Circa, BetOnline)CLV-aware consensus lines
ESPNPlayer stats, scores, injury reports

Endpoints

Router: routers/sports_data.py · tag: Sports Data

MethodPathSummary
GET/v1/sports/oddsLive betting odds across bookmakers
GET/v1/sports/odds/{event_id}Multi-sportsbook odds comparison for one event
GET/v1/sports/stats/{player}Player stats (ESPN)
GET/v1/sports/scoresFinal / live scores for a day (ESPN)
GET/v1/sports/arbitrageGuaranteed-profit arbitrage across bookmakers
GET/v1/sports/plus-evPositive-EV betting opportunities vs a sharp book
GET/v1/sports/propsPlayer prop betting lines (points, yards, strikeouts, …)
GET/v1/sports/injuriesInjury report for a sport or team
GET/v1/sports/liveLive in-play odds
GET/v1/sports/historicalHistorical betting odds for past events
GET/v1/sports/betting-percentagesPublic betting percentages (bets & money share)
GET/v1/sports/sharp-consensusSharp consensus lines (CLV-aware)
GET/v1/sports/alertsMoney-printer alerts (line moves, steam, CLV)

GET /v1/sports/odds

Query params: event_query (substring filter, e.g. celtics), sport (nba, nfl, mlb, nhl, epl, … or all), limit (1–100, default 20).

curl -X GET "http://localhost:8005/v1/sports/odds?sport=nba&limit=2" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"sport": "nba",
"limit": 2,
"data": [
{
"event": "Boston Celtics @ New York Knicks",
"commence_time": "2026-08-17T00:30:00Z",
"bookmaker": "draftkings",
"market": "h2h",
"outcomes": [{"name": "Boston Celtics", "price": 1.48}, {"name": "New York Knicks", "price": 2.75}]
}
]
}

GET /v1/sports/arbitrage

Query params: sport (default all), min_yield_pct (default 0.5).

curl -X GET "http://localhost:8005/v1/sports/arbitrage?sport=nba&min_yield_pct=1.0" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"sport": "nba",
"min_yield_pct": 1.0,
"data": [
{
"event": "Boston Celtics @ New York Knicks",
"market": "h2h",
"book_a": {"bookmaker": "draftkings", "outcome": "Boston Celtics", "decimal": 2.10},
"book_b": {"bookmaker": "fanduel", "outcome": "New York Knicks", "decimal": 2.02},
"yield_pct": 2.4,
"implied_total_pct": 97.6
}
]
}

GET /v1/sports/alerts (money-printer lane)

Query params: alert_type (line_move | steam | clv | injury | empty for all), sport (default all), limit (1–100, default 20).

curl -X GET "http://localhost:8005/v1/sports/alerts?alert_type=steam&sport=nfl" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"alert_type": "steam",
"sport": "nfl",
"data": [
{
"event": "Chiefs @ Bills",
"market": "h2h",
"type": "steam",
"side": "Chiefs",
"from_price": 1.91,
"to_price": 1.80,
"bookmakers": ["pinnacle", "circa"],
"observed_at": "2026-08-16T19:40:00Z"
}
]
}

MCP tools

The Pry MCP server exposes the sports lane as eleven tools:

ToolBacking endpoint
pry_oddsGET /v1/sports/odds
pry_arbitrageGET /v1/sports/arbitrage
pry_plus_evGET /v1/sports/plus-ev
pry_propsGET /v1/sports/props
pry_injuriesGET /v1/sports/injuries
pry_live_oddsGET /v1/sports/live
pry_scoresGET /v1/sports/scores
pry_historical_oddsGET /v1/sports/historical
pry_betting_percentagesGET /v1/sports/betting-percentages
pry_sharp_consensusGET /v1/sports/sharp-consensus
pry_alertsGET /v1/sports/alerts
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "pry_arbitrage",
"arguments": {"sport": "nba", "min_yield_pct": 1.0}
}
}

Who uses this

  • Betting bots — sweep arbitrage for guaranteed profit, filter with plus_ev.
  • Sweat/steam trackers — subscribe to alerts (steam, clv, line_move) instead of polling.
  • Backtestershistorical closing lines vs market closes.
  • Content toolsprops, injuries, and scores for odds pages and daily recaps.

Next steps