Action Network Odds, Betting Splits & Line Movement Scraper avatar

Action Network Odds, Betting Splits & Line Movement Scraper

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Action Network Odds, Betting Splits & Line Movement Scraper

Action Network Odds, Betting Splits & Line Movement Scraper

Sports betting odds from every major US sportsbook, public money/ticket percentages, line movement, props, injuries, ATS standings, futures and weather from Action Network - NFL, NBA, MLB, NHL, college, 8 soccer leagues, UFC and tennis.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Artsiom Kunitsyn

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

3

Monthly active users

2 days ago

Last modified

Categories

Share

Action Network Scraper — betting odds, public betting splits & line movement

Scrape sports betting data from Action Network: odds from every major US sportsbook (DraftKings, FanDuel, BetMGM, Caesars, bet365 and more), public betting percentages (share of bets and share of money on each side), timestamped line movement, player and game props, injury reports, standings with against-the-spread (ATS) and over/under records, futures odds (champion, MVP, season win totals), game-day weather, and scores. Covers 18 leagues: the NFL, NCAA Football, NBA, NCAA Basketball, WNBA, MLB, NHL, soccer's Premier League, La Liga, Bundesliga, Serie A, Ligue 1, Champions League, Europa League and MLS, plus UFC and ATP / WTA tennis.

Get current slates or historical closing odds and betting splits for past seasons. Export to JSON, CSV or Excel, or feed it straight into your betting model in Python. No login or API key needed.

Contents

What data can you extract?

Six data types, chosen with entityType:

Data typeOne row perWhat's in it
games (default)game, UFC bout or tennis matchTeams (or fighters / players), start time, status, score, winner, attendance. Moneyline, spread and total from Consensus, the opening line and each sportsbook. Public betting splits (tickets_pct, money_pct) per side of each market. Number of bets. Alternate lines and team totals where listed. NFL and NCAA Football games this week also get a weather forecast for kickoff.
lineHistorygame × sportsbook × marketEvery odds and line change with its timestamp, per outcome: [{updated_at, odds, value, line_status}], plus the opening point and number of moves.
propsprop marketPlayer (name, team, position) or game-level prop, stat type and period, with every sportsbook's line and odds.
injuriesinjured playerTeam, player, position, status (out, questionable, ...), injury, the latest note, starter / key-player flags, when it was reported and updated.
standingsteamWins, losses, draws, win %, points for/against, streak, conference/division rank, games back, plus ATS record, over/under record and units won betting the team, and every split the site keeps in records (ats_home, ats_fav, over_under_road, units_last_10, last_10, ...).
futuresfutures outcomeMarket (e.g. "2026-27 NBA MVP", Super Bowl winner, division winners, season win totals), team or player, Over/Under or Yes/No option, line, best price and every sportsbook's odds.

Sportsbooks: Consensus, Open (opening line), DraftKings, FanDuel, BetMGM, BetRivers, Caesars, bet365 and Unibet across several states. Choose the ones you want with bookIds.

Game records also carry a change_type for incremental runs. The Output tab has readable Games, Line history, Props, Injuries, Standings & ATS and Futures table views with the full field list.

Which data exists for which league (what the site publishes, checked September 2026):

Games & splitsLine history, propsInjuriesStandings / ATSFutures
NFL, NCAAF, NBA, NCAAB, WNBA, MLB, NHL✓✓✓ (none reported for NCAAF)✓ in season✓
Soccer (8 leagues)✓✓✓MLS, Champions League, Europa League—
UFC, ATP, WTAodds & results, no splits————

Why this Action Network scraper

  • Odds and public betting splits in one row, so you can see at once where the public and the money disagree.
  • Historical backfill: closing odds and final splits for roughly the last two seasons, props for at least the past year.
  • Line movement capture from the opening line to the close.
  • 18 leagues in one actor: every major US league, the top European soccer leagues, UFC and tennis, for the current slate or any date range or season.
  • Beyond odds: injury reports, ATS / over-under standings, futures and weather from the same source, in the same format.
  • Fast and cheap: a full NFL season (272 games) in one run, no proxy needed.

Sample output

Real rows from a recent run (NHL, games):

GameStart (UTC)Moneyline away / homePuck line homeTotalBets
Rangers @ Bruins2026-09-30 00:00+105 / −123−1.55.5626
Canucks @ Oilers2026-09-30 02:00+220 / −275−1.56.5287
Panthers @ Hurricanes2026-09-29 21:00+110 / −130−1.56.5252
Canadiens @ Maple Leafs2026-09-29 23:00−107 / −113−1.56.5252
Blackhawks @ Golden Knights2026-09-30 02:30+210 / −257−1.55.5186

Game record (JSON, shortened):

{
"source": "actionnetwork",
"external_id": "256552",
"league": "nfl",
"season": 2025,
"week": 1,
"start_time": "2025-09-05T00:20:00.000Z",
"away_team": "Dallas Cowboys",
"home_team": "Philadelphia Eagles",
"status": "complete",
"away_score": 20,
"home_score": 24,
"winner": "home",
"moneyline_home": -425,
"spread_home": -8.5,
"total_line": 47.5,
"consensus": {
"spread": {
"home": {"odds": -110, "value": -8.5, "tickets_pct": 64, "money_pct": 72},
"away": {"odds": -110, "value": 8.5, "tickets_pct": 36, "money_pct": 28}
}
},
"books": [{"book_id": 68, "book": "DK NJ", "moneyline": {}, "spread": {}, "total": {}}],
"change_type": "new"
}

Who uses this Action Network scraper?

  • Sports bettors and betting-model builders: closing line value, reverse line movement, fading the public, and backtesting against historical closing odds and splits.
  • Tipster, picks and betting-media sites: live odds tables, public-betting widgets and line movement charts.
  • Fantasy and DFS players: player prop lines across books.
  • Sports-data analysts and researchers: market efficiency, bookmaker comparison, the gap between public tickets and money.

How much does it cost?

Pay per result: you're charged per row delivered. There's no monthly rental or separate API key fee. See the Pricing tab for current prices, including automatic discounts on higher Apify plans.

The default run returns 50 rows, so trying it costs a fraction of a cent. The monthly credit on Apify's free plan covers a full NFL season of games.

How to scrape betting odds and splits

  1. Click Try for free (or open the actor in Apify Console) and go to the Input tab.
  2. Choose entityType: games, lineHistory, props, injuries, standings or futures.
  3. Pick the leagues.
  4. Leave the dates empty for the current slate, set dateFrom/dateTo for the daily leagues, or a season (and weeks) for NFL and NCAA Football.
  5. Optionally pick sportsbooks in bookIds.
  6. maxItems defaults to 50, a quick preview. Clear it (null) for everything in scope.
  7. Click Start, then download the results as JSON, CSV, Excel or HTML, or use the API.
  8. For a daily odds feed or line-movement capture, add a Schedule (examples below).

Input

FieldTypeDefaultDescription
entityTypestringgamesgames, lineHistory, props, injuries, standings or futures. The last three are the current snapshot and ignore dates and season.
leaguesarrayall 18nfl, ncaaf, nba, ncaab, wnba, mlb, nhl, epl, laliga, bundesliga, seriea, ligue1, champions, europa, mls, ufc, atp, wta; soccer selects all 8 soccer leagues. Out-of-season leagues return nothing.
dateFrom / dateTostring—Game days (YYYY-MM-DD, US Eastern) for the daily leagues (everything except NFL and NCAA Football). Empty = the current slate. At most 400 days.
seasoninteger—NFL / NCAA Football season year. Setting it walks the weeks below.
weekFrom / weekTointeger1 / end of seasonWeek range when season is set.
seasonTypestringregreg or post (playoffs / bowl games).
bookIdsarraysite defaultRestrict to these sportsbooks. Consensus is always kept because it carries the splits. For futures, empty means every listed book that offers futures.
maxItemsinteger50Stop after this many rows. null = everything in scope.
modestringautoauto / full / incremental, games only.
concurrencyinteger10Parallel requests (max 20).
impersonatestringfirefoxBrowser fingerprint. Change only if requests are blocked.
proxyConfigurationobjectno proxyApify Proxy settings. Not needed.

Input examples

Default preview (current slate of every league, first 50 games):

{}

Today's MLB slate, DraftKings and FanDuel only:

{ "leagues": ["mlb"], "bookIds": ["68", "69"], "maxItems": null }

A full NFL regular season of closing odds and betting splits:

{ "leagues": ["nfl"], "season": 2025, "maxItems": null }

NHL closing odds for a whole season, by date range:

{ "leagues": ["nhl"], "dateFrom": "2025-10-07", "dateTo": "2026-04-18", "maxItems": null }

Daily feed of new and changed games (schedule this):

{ "leagues": ["nfl", "mlb", "nba", "nhl"], "maxItems": null }

Daily line-movement capture (schedule this):

{ "entityType": "lineHistory", "leagues": ["nfl", "mlb", "nba", "nhl"], "maxItems": null }

NBA player props for one night:

{ "entityType": "props", "leagues": ["nba"], "dateFrom": "2025-01-01", "maxItems": 2000 }

Premier League and Champions League for a weekend:

{ "leagues": ["epl", "champions"], "dateFrom": "2026-09-19", "dateTo": "2026-09-20", "maxItems": null }

Today's UFC card and tennis matches:

{ "leagues": ["ufc", "atp", "wta"], "maxItems": null }

Injury report for every league (schedule it before game days):

{ "entityType": "injuries", "maxItems": null }

NFL and MLB standings with ATS and over/under records:

{ "entityType": "standings", "leagues": ["nfl", "mlb"], "maxItems": null }

NBA futures (champion, MVP, awards) from DraftKings and FanDuel:

{ "entityType": "futures", "leagues": ["nba"], "bookIds": ["68", "69"], "maxItems": null }

Line history: capture it daily

Action Network keeps a game's full timestamped line history for only a few days after it's played. Games from about a week ago come back with every outcome present but an empty history. So lineHistory is a capture product, not a backfill one: schedule it daily (or more often) and each game's complete history, from the opening line to the close, is saved before the site drops it.

Closing odds, final public betting splits, scores and props are kept much longer (roughly the last two seasons for odds and splits; props for at least the past year), so games and props can be backfilled for a season with the season/week or date inputs.

UFC and tennis

UFC bouts and ATP / WTA matches come in the games format: the two fighters or players are in the away/home team fields (their ids are the site's player ids), with event_title (the card or tournament round) and venue. UFC rows add weight_class, result_method (KO/TKO, Submission, Decision...), result_round and result_clock; tennis rows add set_scores and put sets won in the score fields.

What the site does not have for these sports: public betting splits (so tickets_pct and money_pct are empty rather than a misleading 0%), line history, props, injuries, standings and futures. Their odds are removed within days of the event, so scrape upcoming cards and matches (or schedule a daily run) if you need the prices. Results and winners stay available for years.

Incremental runs

games only, and only when maxItems is cleared (null); a capped run is a preview and always returns games. In auto mode the first uncapped run returns every game in scope and remembers it. Later uncapped runs return only new games and games whose status, start time, score or closing consensus line changed (change_type is new or changed). The memory covers every league and date you've run and forgets games that started more than 60 days ago. A run stopped by maxItems, by your spending limit or by an error doesn't update it. lineHistory, props, injuries, standings and futures are always a fresh pull.

Use it from Python or the API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("artsiom_k/actionnetwork-scraper").call(
run_input={"leagues": ["nfl"], "season": 2025, "maxItems": None}
)
for game in client.dataset(run["defaultDatasetId"]).iterate_items():
spread = (game.get("consensus") or {}).get("spread", {}).get("home", {})
print(game["away_team"], "@", game["home_team"], game["spread_home"],
"tickets", spread.get("tickets_pct"), "money", spread.get("money_pct"))

The same works from JavaScript, plain HTTP, Make, Zapier, n8n and Google Sheets integrations. AI agents such as Claude or Cursor can call it through Apify's MCP server.

FAQ

Is there an Action Network API? Action Network doesn't offer a public self-serve data API. This actor returns the odds, splits, line movement and props shown on the site as structured data, so it works as an Action Network API alternative.

What are ticket % and money %? Ticket % is the share of bets placed on a side; money % is the share of the dollars wagered. A big gap between them usually means large bets ("sharp money") are on one side.

Can I get historical betting odds and public splits? Yes. Closing odds and final splits go back roughly two seasons; use season (NFL, NCAA Football) or dateFrom/dateTo (other leagues). Full line movement history is only available for a few days after each game, so capture it daily.

Which sportsbooks are covered? Consensus, Open (the opening line), DraftKings, FanDuel, BetMGM, BetRivers, Caesars, bet365 and Unibet across several states.

Why is a league empty? It's out of season, or has no games in the selected dates (European soccer also pauses for international breaks).

Why did my run finish with 0 rows? The input asks for something the site doesn't have, for example props or lineHistory for UFC or tennis only, or a date range that is reversed or longer than 400 days. The run then ends successfully with 0 rows (you're not charged for rows), and the run's status message and log say why.

Do you cover UFC, tennis or golf? UFC and ATP / WTA tennis, yes: odds and results (see UFC and tennis). Golf isn't covered. For full MMA fighter records and fight histories, see the Sherdog Scraper.

Can I get injury reports, ATS records and futures odds? Yes, with entityType injuries, standings (includes against-the-spread, over/under and units records) and futures. These are the current snapshot, so schedule a run to keep a history. Standings are empty for a league between seasons.

What's in the weather field? For NFL and NCAA Football games in the current week: the hourly forecast closest to kickoff (temperature in °F, wind speed in mph and direction, precipitation, humidity, cloud cover) and the stadium's roof type and surface. Domed stadiums usually have no forecast.

Can I export the odds to Excel or CSV? Yes: JSON, CSV, Excel, XML or HTML from the Output tab, or through the API. Nested fields (consensus, books) are flattened into columns in CSV and Excel.

Something doesn't work or a field is missing? Open an issue on the Issues tab; issues are answered promptly.

  • Sports Odds History Scraper — historical opening and closing odds per sportsbook (SportsBookReview) and closing lines with ATS / over-under results back to 2006 (Covers).
  • TennisExplorer Scraper — tennis results back to the 1990s, bookmaker odds per match, match statistics and point-by-point.
  • FantasyPros Scraper — expert consensus rankings, ADP and projections for NFL, NBA, MLB and NHL.
  • Sherdog Scraper — MMA fighter records, fight histories and event results (UFC, PFL, Bellator, ONE).
  • MotoGP Scraper — official MotoGP, Moto2 and Moto3 results and standings.
  • FIBA Scraper — international basketball game results and standings.
  • Smarkets Betting Exchange Scraper — betting exchange back and lay odds, matched volume, results and traded-price history.
  • PGA TOUR Scraper — golf results back to the 1950s, hole-by-hole scorecards, FanDuel odds history, tee times and player stats.
  • Kalshi & Polymarket Scraper — prediction market odds, settled results and price history for sports, politics, economics and crypto.
  • SofaScore Scraper — results, team statistics, lineups with player ratings, incidents and odds for football, basketball, hockey, tennis and 17 more sports.
  • Flashscore Scraper — results, statistics, lineups, incidents and opening/closing odds from ~20 bookmakers for 17 sports.