Sports Betting Odds – DraftKings, FanDuel, BetMGM & Kalshi
Pricing
from $3.00 / 1,000 games
Sports Betting Odds – DraftKings, FanDuel, BetMGM & Kalshi
Moneylines, spreads and totals from DraftKings, FanDuel, BetMGM and more for NFL, NCAAF, MLB, NHL and soccer, with no-vig fair probabilities for US sports and a Kalshi price join per game. Public betting splits when Action Network publishes them.
Pricing
from $3.00 / 1,000 games
Rating
0.0
(0)
Developer
Rowfeed
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Get one clean JSON row per game with moneylines, spreads and totals from the major US sportsbooks (DraftKings, FanDuel, BetMGM, BetRivers and more), no-vig fair probabilities, and a Kalshi exchange price for comparison. Built for odds bots, betting research and AI agents that need "what are the real odds for this game right now" across books in one call, without a login, an API key or a headless browser. Covers NFL, NCAAF, MLB, NHL, WNBA and soccer (MLS). Plain HTTPS calls with retries, a silent-failure check and an automatic BetRivers/Kambi fallback, so a scheduled run keeps working when one source hiccups.
What you get
- One row per game – moneyline, spread and total from every book Action Network tracks (DraftKings, FanDuel, BetMGM, BetRivers, Caesars, bet365 where posted, plus the Consensus and Open lines), each with its own
updated_at. - The math done for you –
best_moneyline_home/_away(the highest-payout book per side),implied_probability_*(raw, vig included) andfair_probability_*(no-vig, re-normalised to sum to 1) – see "How the odds are computed" below. - A Kalshi price on the same row – each game is matched to its Kalshi exchange event by team name and US Eastern date (plus start time where Kalshi's ticker carries one, as for MLB), adding
kalshi.home_probability/away_probabilityandkalshi_vs_books_edge(Kalshi vs. the no-vig book price, per side). Unmatched games simply getnullKalshi fields – never guessed.
Sample row
One NFL game, books trimmed to 3 of the 6 entries a real run returns.
{"league": "NFL","league_name": "nfl","game_id": 290877,"start_time": "2026-09-27T17:00:00.000Z","status": "scheduled","home_team": "Pittsburgh Steelers","away_team": "Cincinnati Bengals","books": [{ "book": "Consensus", "book_id": 15, "moneyline_home": 156, "moneyline_away": -190, "spread_home": 3.5, "spread_home_odds": -110, "spread_away": -3.5, "spread_away_odds": -109, "total": 42.5, "over_odds": -111, "under_odds": -108, "updated_at": "2026-09-24T18:01:26.158255+00:00" },{ "book": "DK NJ", "book_id": 68, "moneyline_home": 154, "moneyline_away": -185, "spread_home": 3.5, "spread_home_odds": -105, "spread_away": -3.5, "spread_away_odds": -115, "total": 42.5, "over_odds": -110, "under_odds": -110, "updated_at": "2026-09-24T17:41:39.17149+00:00" }],"best_moneyline_home": { "book": "FanDuel NJ", "odds": 160 },"best_moneyline_away": { "book": "Open", "odds": -125 },"implied_probability_home": 0.390625,"implied_probability_away": 0.6551724137931034,"fair_probability_home": 0.37351880473982485,"fair_probability_away": 0.6264811952601752,"probability_source": "consensus","public_betting": { "moneyline": { "home_bets_pct": null, "away_bets_pct": null, "home_money_pct": null, "away_money_pct": null }, "spread": { "...": "..." }, "total": { "...": "..." } },"kalshi": { "event_ticker": "KXNFLGAME-26SEP27CINPIT", "home_yes_ask": 0.38, "away_yes_ask": 0.63, "home_probability": 0.375, "away_probability": 0.625 },"kalshi_vs_books_edge": { "home": 0.0015, "away": -0.0015 },"source": "action_network","scraped_at": "2026-09-25T08:50:14+00:00","url": "https://www.actionnetwork.com/nfl/odds"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Input
| Field | Default | What it does |
|---|---|---|
leagues | ["nfl","ncaaf","mlb","nhl","soccer"] | Also: wnba, mls, nba, ncaab. NBA and NCAAB have no games until October and simply contribute zero rows until then – not an error. |
books | [] (all) | Action Network book ids to keep, e.g. ["68","69"] for DraftKings + FanDuel only. Common ids: 15 Consensus, 30 Open, 68 DraftKings NJ, 69 FanDuel NJ, 71 BetRivers NJ, 75 BetMGM NJ. |
includeKalshi | true | Join Kalshi exchange prices onto each row. |
includeSplits | true | Attach public_betting (share of bets/money per side) when Action Network reports it. |
maxGames | 100 | Cap on rows across all requested leagues, soonest-starting first (1–1000). |
How the odds are computed
- Implied probability is the standard American-odds conversion:
100 / (odds + 100)for a positive price,|odds| / (|odds| + 100)for a negative one. This still includes the book's built-in edge (the "vig"). - Fair (no-vig) probability divides each side's implied probability by the sum of both sides' implied probabilities, so the vig cancels out and
fair_probability_home + fair_probability_awayalways sums to 1. - Both are computed from the Consensus book's moneyline when it has both sides; when Consensus is missing, they fall back to the best available price per side across books instead (
probability_sourcesays which).public_bettingsplits come from that same book's line; Action Network has left them empty on every game we sampled so far, so expectnullvalues until it publishes them again. - Consensus is Action Network's own number, passed through as-is. Now and then it mirrors a single outlier book: in September 2026 one NFL game's Consensus matched FanDuel's line while four other books and Kalshi agreed the other way, giving a 37-point
kalshi_vs_books_edge. An edge that large is almost always a data issue on one side, so comparebooks[]before acting on it. kalshi_vs_books_edgeis Kalshi's own implied probability (its YES price, which is a probability on a real-money exchange) minus this row's fair probability, per side. A near-zero edge means the two markets agree; a large one flags a real discrepancy worth a second look, not a guaranteed profit.- Soccer rows are raw lines only. Most books post soccer as a 2-way line without a draw (draw-no-bet style), a few post a 3-way line with
moneyline_draw, and Kalshi's soccer markets are 3-way. Comparing those would mislead, so for soccer the derived fields (best_moneyline_*,implied_probability_*,fair_probability_*,probability_source,kalshi_vs_books_edge) arenull. Each book's own prices stay inbooks[], and thekalshiblock carries Kalshi's own home/draw/away prices. - Odds are always American format (e.g.
-110,+150), for information only – not betting advice, and nothing here places a bet for you.
Kalshi matching
Each game is matched to a Kalshi event by comparing team names (Kalshi's own parsed name must appear inside the sportsbook's full team name, e.g. Kalshi's "Los Angeles C" inside "Los Angeles Chargers") and requiring the same US Eastern date, the date Kalshi puts in its tickers. When the ticker also carries a start time (MLB does, e.g. KXMLBGAME-26SEP251840PITDET = 6:40 PM ET), the game must start within 2 hours of it, so back-to-back series games and doubleheaders land on the right event. A pair with no candidate, or more than one, is left unmatched – Kalshi fields are null, never a guess.
Sources and reliability
- Odds: Action Network's public scoreboard JSON (
api.actionnetwork.com), no login, no API key. If Action Network fails after retries, the Actor falls back to BetRivers' public odds from Kambi for NFL, NCAAF, MLB, NHL and WNBA, markingsource: "kambi"on those rows. Kambi's public feed carries one market per game: the spread for NFL, NCAAF and WNBA, the moneyline for MLB and NHL. Whatever it lacks (including totals) staysnullrather than being estimated. - A game with no sportsbook price at all yet is skipped and never charged.
- Exchange prices: Kalshi's public trade API (
api.elections.kalshi.com), the CFTC-regulated US exchange for event contracts. - 429 and 5xx responses retry with exponential backoff (5 tries); a 200 without the expected data counts as a failure. A run fails only when it produced zero rows and a request failed; an off-season league with nothing scheduled is a successful run with zero rows.
- The
STATSrecord in the run's key-value store holds games pushed, Kalshi matches, which leagues used Action Network vs. the Kambi fallback, requests and errors by category. - Not affiliated with Action Network, Kalshi, DraftKings, FanDuel, BetMGM, BetRivers, Caesars, bet365 or any other sportsbook.
Pricing
Pay per event, no subscription: $0.003 per game row and $0.001 per run start. Set a maximum charge on the run and the Actor stops cleanly when it is reached, charging only for rows actually saved.