Sports Odds Scraper — NFL, NBA, MLB, NHL + Prediction Markets avatar

Sports Odds Scraper — NFL, NBA, MLB, NHL + Prediction Markets

Pricing

from $10.00 / 1,000 result rows

Go to Apify Store
Sports Odds Scraper — NFL, NBA, MLB, NHL + Prediction Markets

Sports Odds Scraper — NFL, NBA, MLB, NHL + Prediction Markets

Scrape today's sportsbook lines (spread, total, moneyline, vig-free win probability) for NFL, NBA, MLB, NHL, college and soccer from ESPN's public scoreboard, side by side with Polymarket and Kalshi win probabilities for the same games. Public APIs, no login, JSON rows.

Pricing

from $10.00 / 1,000 result rows

Rating

0.0

(0)

Developer

Galter Time

Galter Time

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Sports Odds Scraper — NFL, NBA, MLB, NHL & soccer lines with prediction-market probabilities

Get today's sports odds as JSON in one run: for every game on the slate, the sportsbook spread, total and moneylines (from ESPN's public scoreboard feed), a vig-free win probability, live status and score — and, uniquely, the Polymarket and Kalshi win probabilities for the same game with the gap versus the book. No login, no API keys, no sportsbook scraping that breaks every week.

Sports odds board

What can you do with sports odds data?

  • Build an odds board or model input — one row per game, 14 leagues (NFL, NCAAF, NBA, WNBA, NCAAB, MLB, NHL, MLS, Premier League, Champions League, La Liga, Bundesliga, Serie A, Ligue 1).
  • Spot where prediction markets disagree with the bookpolymarket_vs_book_pts / kalshi_vs_book_pts in probability points; OUTPUT.largest_edges lists the biggest.
  • Track lines over time — schedule the Actor hourly on game days and diff spread / over_under.
  • Feed dashboards, sheets, alerts and AI agents — stable schema, MCP-ready.

How to scrape NFL odds (quick start)

Defaults return the current slate for NFL, NBA, MLB and NHL with prediction markets attached.

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("galterapp/sports-odds-scraper").call(run_input={"leagues": ["nfl"], "dates": ["20260913"]})
for g in client.dataset(run["defaultDatasetId"]).iterate_items():
print(g["short_name"], g["line"], g["over_under"], g["book_prob_home"], g["polymarket_prob_home"])
const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('galterapp/sports-odds-scraper').call({ leagues: ['nba', 'nhl'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
curl -X POST "https://api.apify.com/v2/acts/galterapp~sports-odds-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "content-type: application/json" -d '{"leagues":["mlb"]}'

Sample row

{"league":"nfl","game_id":"401772510","short_name":"KC @ BUF","start_time":"2026-09-13T20:25Z","status":"Scheduled",
"home_team":"Buffalo Bills","away_team":"Kansas City Chiefs","book":"ESPN BET","line":"BUF -2.5","spread":-2.5,
"over_under":47.5,"home_moneyline":-135,"away_moneyline":115,"book_prob_home":0.553,"book_vig_pct":4.0,
"polymarket_prob_home":0.57,"kalshi_prob_home":0.56,"polymarket_vs_book_pts":1.7,"kalshi_vs_book_pts":0.7,
"polymarket_url":"https://polymarket.com/event/nfl-kc-buf-2026-09-13","ts":1788400000}

Input

FieldDefaultMeaning
leaguesnfl, nba, mlb, nhlany of the 14 supported leagues
datescurrent slatelist of YYYYMMDD
includePredictionMarketstrueattach Polymarket/Kalshi home-win probabilities
maxResults200rows returned (and paid for)

How the numbers are computed

  • book_prob_home = home moneyline probability ÷ (home + away probabilities) — the vig is removed; book_vig_pct is the overround.
  • Prediction-market probabilities come from the most liquid game market whose text names both teams and closes within 3 days of kickoff; *_vs_book_pts = market − book, in points.
  • Off-season leagues return no games (not an error). Lines appear when ESPN publishes them, typically 1–6 days before kickoff.

Notes

  • Public JSON endpoints only (ESPN scoreboard, Polymarket Gamma, Kalshi trade API). Nothing stored, no accounts.
  • Not betting advice. Availability of the venues depends on your jurisdiction.
  • Pricing: pay per game row. A full four-league day is typically 15–40 rows.