Sports Betting Odds – DraftKings, FanDuel, BetMGM & Kalshi avatar

Sports Betting Odds – DraftKings, FanDuel, BetMGM & Kalshi

Pricing

from $3.00 / 1,000 games

Go to Apify Store
Sports Betting Odds – DraftKings, FanDuel, BetMGM & Kalshi

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

Rowfeed

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

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) and fair_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_probability and kalshi_vs_books_edge (Kalshi vs. the no-vig book price, per side). Unmatched games simply get null Kalshi 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

FieldDefaultWhat 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.
includeKalshitrueJoin Kalshi exchange prices onto each row.
includeSplitstrueAttach public_betting (share of bets/money per side) when Action Network reports it.
maxGames100Cap 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_away always 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_source says which). public_betting splits come from that same book's line; Action Network has left them empty on every game we sampled so far, so expect null values 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 compare books[] before acting on it.
  • kalshi_vs_books_edge is 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) are null. Each book's own prices stay in books[], and the kalshi block 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, marking source: "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) stays null rather 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 STATS record 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.