Action Network Scraper & API avatar

Action Network Scraper & API

Pricing

from $2.89 / 1,000 games

Go to Apify Store
Action Network Scraper & API

Action Network Scraper & API

Scrape Action Network odds for NFL, NBA, MLB, NHL, college, soccer, tennis and UFC: every sportsbook's moneyline, spread and total, public betting splits, expert picks, line movement, props and box scores.

Pricing

from $2.89 / 1,000 games

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Action Network Scraper & API

Action Network Scraper & API extracts betting odds, public betting splits, expert picks, line movement, player props and full box scores from Action Network for the NFL, NBA, MLB, NHL, college football and basketball, WNBA, soccer, tennis, UFC and boxing. You don't need an Action Network account or API key.

Get one structured row per game with every selected sportsbook's moneyline, spread and total, ticket and money percentages, no-vig probabilities, best price per side, opening-to-current movement, graded results, expert picks with verified records, and optional full price history, prop boards, standings and injury reports across 21 leagues.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor or any other LLM to start using this Actor.

Use the Apify Actor "parsebird/action-network-scraper" (Action Network Scraper & API) to get sports betting odds, public betting splits and expert picks from Action Network. Call it with the apify-client package: Python `ApifyClient("<APIFY_TOKEN>").actor("parsebird/action-network-scraper").call(run_input={...})`, or JavaScript `new ApifyClient({ token }).actor('parsebird/action-network-scraper').call({...})`, then read items from the run's default dataset. Every input is optional; empty input returns the current NFL week. Inputs: leagues (array; nfl, ncaaf, nba, ncaab, wnba, ncaaw, mlb, nhl, soccer, epl, laliga, bundesliga, seriea, ligue1, mls, champions, europa, atp, wta, ufc, boxing), date (string YYYY-MM-DD, US Eastern; not allowed with nfl/ncaaf), week (int, NFL/NCAAF), season (int 2015-2030), seasonType ("reg"|"post"|"pre"), gameIds (array of Action Network game IDs), gameUrls (array of game page URLs), gameStatus (array of "upcoming"|"live"|"finished"), teams (array of names or abbreviations), onlyTrending (bool, default false), minBets (int), books (array of sportsbook IDs, default 68,69,75,79,71,123; consensus 15 and open 30 always added), periods (array: event, firsthalf, secondhalf, firstquarter..fourthquarter, firstperiod..thirdperiod, firstinning, firstfiveinnings), maxGames (int), includeExpertPicks (bool, default true), includeLineMovement (bool, default false), includeProps (bool, default false), includeStandings (bool, default false), includeInjuries (bool, default false). Game rows (eventType "game") include gameId, gameUrl, league, season, week, startTime, status, awayTeam, homeTeam, score, consensus (moneyline/spread/total sides with odds, decimalOdds, line, impliedProbability, noVigProbability, ticketPercent, moneyPercent, sharpGap, plus holdPercent), teamTotals, bestPrices, lineMovement, booksPricing, result (winner, againstTheSpread, overUnder), players, playerStats, plays, venue, weather, teamStats, expertPicks, lineMovementHistory, props. Tennis/UFC/boxing rows (eventType "competition") carry competitors instead of teams. Standings and injury rows have recordType "standings" or "injuries". API docs: https://apify.com/parsebird/action-network-scraper/api. Get a token at https://console.apify.com/settings/integrations.

What is Action Network Scraper & API?

Action Network Scraper & API turns Action Network game pages and odds screens into clean JSON. Pick the leagues and a date or NFL week, and the Actor returns every sportsbook's odds, the public betting percentages (share of tickets and share of money on each side), expert picks with their records, and the game's score, box score and play-by-play in one row per game.

It works as an Action Network API alternative. Action Network has no public data API, and this Actor gives you its odds and betting data on a schedule, over the Apify API, or as a CSV or Excel download. To try it, open the Input tab and click Start: the default settings pull a few games from today's slate.

What can Action Network Scraper & API do?

  • ๐Ÿˆ 21 leagues in one run: NFL, NCAA Football, NBA, NCAA Basketball (men and women), WNBA, MLB, NHL, the Premier League, La Liga, Bundesliga, Serie A, Ligue 1, MLS, Champions League, Europa League, ATP, WTA, UFC and boxing. The "Soccer (all leagues)" option takes Action Network's combined soccer slate.
  • ๐Ÿ“Š Odds from every selected sportsbook: moneyline, spread, total and team totals per book, for the full game and, if you choose, halves, quarters, hockey periods, the first inning or the first five innings. DraftKings, FanDuel, BetMGM, bet365, BetRivers and Caesars are priced by default, and you can add up to 38 books.
  • ๐Ÿ‘ฅ Public betting splits: ticket % and money % on each side, plus sharpGap (money % minus ticket %), which shows where the bigger bets are going.
  • ๐Ÿงฎ Computed fields: no-vig probabilities, hold and overround for each consensus market, the best available price per side and line, and the move from the opening line to the current line.
  • โœ… Graded results: the final score by period, with the winner, against-the-spread result and over/under result graded against the consensus closing line.
  • ๐ŸŽฏ Expert picks: each Action Network expert's pick on the game, with their win/loss record, units won, ROI, current streak and follower count.
  • ๐Ÿ“ˆ Full line history (optional): every timestamped price change per sportsbook, back to the opening line.
  • ๐ŸŽฒ Prop boards (optional): every player and game prop Action Network lists for the game (for an NFL game, 100+ prop markets such as anytime TD scorer, receiving yards and passing yards), priced across your sportsbooks.
  • ๐ŸŸ๏ธ Game detail: rosters, player box score stats, play-by-play with live win probability, lineups, MLB pitching matchups and umpires, venue, game-time weather, injuries, depth charts and team stat sheets, wherever Action Network publishes them.
  • ๐Ÿ“‹ League reports (optional): one standings row and one injury-report row per league.
  • โš™๏ธ Built for automation: schedule runs before kickoff, call the Actor from the API, connect it to Make, Zapier, n8n or Google Sheets, and export as JSON, CSV, Excel or HTML.

What data can you extract from Action Network?

FieldDescription
gameId, gameUrl, league, season, week, seasonTypeGame identity and a link to the Action Network game page
startTime, status, statusDetail, isLive, isCompleteKickoff time (UTC) and game state
awayTeam, homeTeamTeam name, abbreviation, logo, colors, conference, division and current record
broadcast, attendance, totalBets, isTrending, rotation numbersGame metadata and Action Network's bet count
consensusConsensus moneyline, spread and total for each side: odds, decimal odds, line, implied and no-vig probability, ticket %, money %, sharpGap, plus hold % and overround %
teamTotalsConsensus over/under for each team, de-vigged per team
bestPricesBest price per side and line across your sportsbooks, with the book's name
lineMovementOpening line and odds compared with the current consensus
booksPricingOne entry per sportsbook, market, segment and side
score, resultScore by period, timeouts, live situation, latest odds by segment, and the graded result
players, playerStats, playerSeasonStats, lineupsRosters with names, box score stats, season stat lines and starting lineups
plays, lastPlayPlay-by-play with score, clock, situation and live win probability
venue, weather, officials, injuries, depthCharts, teamStatsStadium details, forecast, umpires and referees with their betting records, injury notes and team stats
expertPicksExpert name, record, units, ROI and their picks on this game
lineMovementHistory(optional) Every price change per book with timestamps
props(optional) Player and game prop markets with each book's price
competitorsTennis, UFC and boxing: both competitors with nationality, handedness and image

Not every game carries every block. Odds appear once books have priced a game, expert picks once handicappers have posted one, and box score details once the game has started.

How to scrape Action Network odds and betting data

  1. Open Action Network Scraper & API on Apify Store and click Try for free.
  2. Under Leagues, pick the leagues you want. Leave it empty to get the current NFL week.
  3. Choose the games: leave the date empty for today, set a date (YYYY-MM-DD) for other leagues, or set Week and Season for NFL and NCAA Football. To cover specific games, paste their IDs or URLs instead.
  4. If you want to narrow the slate, set Game status, Teams, Minimum bet count or Maximum games.
  5. Turn on any extras you need: Full line movement history, Player and game props, Standings or Injury report.
  6. Click Start. When the run finishes, download the dataset as JSON, CSV, Excel or HTML, or read it from the dataset API.

Input parameters

Every field is optional. The Input tab documents each one.

ParameterTypeDefaultDescription
leaguesarray["nfl"]Leagues to cover. Out-of-season leagues return nothing.
datestringtodayDay to cover, YYYY-MM-DD (US Eastern). Not allowed with NFL or NCAA Football, which are scheduled by week.
weekintegercurrentNFL and NCAA Football week.
seasonintegercurrentSeason year (2015โ€“2030). Used with week.
seasonTypestringcurrentreg, post or pre.
gameIdsarrayโ€”Action Network game IDs. Overrides the league and date selection.
gameUrlsarrayโ€”Action Network game page URLs. Overrides the league and date selection.
gameStatusarrayallupcoming, live, finished.
teamsarrayallTeam names or abbreviations (or competitor names for tennis, UFC and boxing).
onlyTrendingbooleanfalseKeep only games Action Network flags as trending.
minBetsintegerโ€”Skip games with fewer tracked bets.
booksarray68, 69, 75, 79, 71, 123Sportsbook IDs to price, up to 38. Consensus (15) and Open (30) are always added.
periodsarray["event"]Game segments to price. The full game is always included.
maxGamesintegerno limitCap on games per run, shared across leagues.
includeExpertPicksbooleantrueAttach expert picks. No extra charge.
includeLineMovementbooleanfalseAttach every timestamped price change.
includePropsbooleanfalseAttach the full prop board.
includeStandingsbooleanfalseAdd one standings row per league.
includeInjuriesbooleanfalseAdd one injury-report row per league.

Sportsbook IDs

The defaults are DraftKings NJ (68), FanDuel NJ (69), BetMGM NJ (75), bet365 NJ (79), BetRivers NJ (71) and Caesars NJ (123). Action Network lists many state-specific feeds. Here are some IDs that returned NFL prices in our tests: Caesars NY 1005, FanDuel NY 1006, BetRivers NY 972, DraftKings MD 1963, Hard Rock FL 2725, Fanatics CT 2821, Fanatics LA 3614, Kalshi 4727 and Polymarket 4795. The book's name comes back as bookName on every price.

Example input

{
"leagues": ["nfl"],
"week": 1,
"season": 2026,
"seasonType": "reg",
"gameStatus": ["finished"],
"includeExpertPicks": true,
"includeLineMovement": true,
"includeProps": true,
"maxGames": 12
}

Output example

Each game is one row. Below is a real row for Patriots at Seahawks (NFL Week 1, 2026). Arrays are trimmed to one item. The full row also contains players (94 entries), plays (181), playerStats, teamStats, leagueInfo, 42 booksPricing entries and 53 experts with 126 picks.

{
"gameId": 290843,
"eventType": "game",
"gameUrl": "https://www.actionnetwork.com/nfl-game/patriots-seahawks-score-odds-september-9-2026/290843",
"league": "nfl",
"season": 2026,
"week": 1,
"seasonType": "reg",
"startTime": "2026-09-10T00:20:00.000Z",
"status": "complete",
"statusDetail": "Final",
"awayTeam": { "teamId": 129, "name": "New England Patriots", "abbreviation": "NE", "conference": "AFC", "division": "EAST", "record": { "wins": 4, "losses": 2, "ties": 0 } },
"homeTeam": { "teamId": 156, "name": "Seattle Seahawks", "abbreviation": "SEA", "conference": "NFC", "division": "WEST", "record": { "wins": 3, "losses": 3, "ties": 0 } },
"winningTeamId": 156,
"broadcast": { "network": "NBC/Peacock", "networkShort": "NBC/Peacock" },
"attendance": 68744,
"totalBets": 292189,
"score": {
"awayScore": 10, "homeScore": 13, "totalPoints": 23,
"awayFirstHalfPoints": 7, "homeFirstHalfPoints": 0,
"byPeriod": [{ "period": "1st", "periodName": "1st Quarter", "awayPoints": 0, "homePoints": 0 }]
},
"consensus": {
"moneyline": {
"sides": [{
"side": "home", "teamId": 156, "odds": -175, "decimalOdds": 1.5714, "line": 0,
"impliedProbability": 0.636364, "noVigProbability": 0.615922,
"ticketPercent": 82, "moneyPercent": 53, "sharpGap": -29
}],
"holdPercent": 3.2123,
"overroundPercent": 3.3189
},
"spread": {
"sides": [{ "side": "home", "teamId": 156, "odds": -110, "line": -3.5, "noVigProbability": 0.5, "ticketPercent": 46, "moneyPercent": 35, "sharpGap": -11 }],
"holdPercent": 4.5455,
"overroundPercent": 4.7619
}
},
"bestPrices": {
"moneyline": [{ "side": "away", "teamId": 129, "odds": 165, "decimalOdds": 2.65, "bookId": 75, "bookName": "BetMGM NJ", "isLive": false }],
"total": [{ "side": "over", "odds": -108, "line": 44.5, "bookId": 68, "bookName": "DK NJ", "isLive": false }]
},
"lineMovement": {
"moneyline": [{ "side": "home", "teamId": 156, "openingOdds": -210, "currentOdds": -175, "oddsDelta": 35 }],
"spread": [{ "side": "home", "teamId": 156, "openingLine": -4.5, "currentLine": -3.5, "lineDelta": 1.0, "openingOdds": -107, "currentOdds": -110, "oddsDelta": -3 }]
},
"booksPricing": [{
"bookId": 69, "bookName": "FanDuel NJ", "market": "spread", "period": "event", "side": "away", "teamId": 129,
"odds": -122, "decimalOdds": 1.8197, "line": 3.5, "impliedProbability": 0.549550,
"ticketPercent": 54, "moneyPercent": 65, "sharpGap": 11, "deeplinkId": "ML2669500982"
}],
"result": { "winner": "home", "againstTheSpread": "away", "overUnder": "under", "spreadMargin": -0.5, "totalLine": 44.5, "totalPoints": 23 },
"venue": { "name": "Lumen Field", "city": "Seattle, WA", "surface": "grass", "roofType": "outdoor" },
"plays": [{ "type": "game_over", "period": 4, "clock": "0:00", "homePoints": 13, "awayPoints": 10, "text": "End Game", "homeWinPct": 1 }],
"expertPicks": [{
"expertId": 158, "name": "YBK Picks.com", "username": "ybk", "followers": 46365,
"record": { "window": "last_month", "wins": 38, "losses": 43, "pushes": 1, "unitsNet": -15.57, "roi": -9, "count": 82 },
"picks": [{ "pickId": 554871770, "play": "NE +3.5", "market": "spread_away", "line": 3.5, "odds": -105, "units": 2, "unitsNet": 1.9048, "result": "win", "isVerified": true }]
}],
"lineMovementHistory": null,
"props": null
}

With Full line movement history on, lineMovementHistory holds one entry per book, market and side, with a history array of { odds, line, recordedAt, lineStatus }. With Player and game props on, props holds playerProps, gameProps, propOrder and marketRules. Each prop market carries the player and one selections entry per book and side.

Tennis, UFC and boxing rows have eventType: "competition", a title such as "ATP Brussels, Belgium Singles - Round Of 16" and a competitors array in place of teams. Standings and injury rows have recordType: "standings" or "injuries", the league, an entryCount, and the standings or injuries array.

Use Action Network Scraper & API from Python or JavaScript

Install the Apify API client (Python or JavaScript) and use your API token.

Python

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/action-network-scraper").call(run_input={
"leagues": ["nba", "nhl"],
"gameStatus": ["upcoming"],
"books": [68, 69, 75],
})
for game in client.dataset(run["defaultDatasetId"]).iterate_items():
ml = (game.get("consensus") or {}).get("moneyline") or {}
for side in ml.get("sides", []):
print(game["league"], game["gameId"], side["side"], side["odds"],
side["ticketPercent"], side["moneyPercent"], side["sharpGap"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/action-network-scraper').call({
leagues: ['nfl'],
includeProps: true,
maxGames: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const game of items) {
console.log(game.awayTeam?.abbreviation, '@', game.homeTeam?.abbreviation,
game.props?.playerProps.length ?? 0, 'player props');
}

Use cases

  • Sharp money tracking: flag games where money % and ticket % split widely (sharpGap), and watch for reverse line movement against lineMovement.
  • Line shopping: compare bestPrices and booksPricing across DraftKings, FanDuel, BetMGM, Caesars and the rest before you place a bet.
  • Betting models and backtests: pull past weeks back to 2015 with graded result fields. Full prices and splits start with the 2024 season.
  • Prop research: download whole prop boards with each book's price and line in one run.
  • Handicapper tracking: collect expert picks with records, units and ROI to see who is winning.
  • Dashboards and alerts: schedule runs every few minutes before kickoff and send changes to Google Sheets, Slack or a database through integrations.

How it works

  1. The Actor reads the slate for each selected league and date or week from Action Network, including prices for the sportsbooks and segments you selected.
  2. It applies your filters (status, teams, trending, minimum bets, maximum games) before collecting game details, so filtered-out games are never fetched or charged.
  3. For each remaining game it collects the box score, play-by-play, rosters and stats. It then attaches expert picks, plus line history and props if you turned them on.
  4. It computes consensus summaries, no-vig probabilities, hold, best prices, opening-to-current movement and graded results, and saves one row per game.
  5. If you turned them on, it adds one standings row and one injury-report row per league at the end.

How much does it cost to scrape Action Network?

Action Network Scraper & API uses pay-per-event pricing. Platform usage (compute and data transfer) is included in the event prices, so you are not billed separately for it.

EventWhen it is chargedFreeBronzeSilverGold
GameEach game, match or fight saved. Includes every sportsbook's moneyline, spread and total, betting splits, best prices, opening-to-current movement, no-vig probabilities, score, graded result and expert picks$3.49 / 1,000$3.29 / 1,000$3.09 / 1,000$2.89 / 1,000
HistoryEach game whose full line movement history is attached$3.49 / 1,000$3.29 / 1,000$3.09 / 1,000$2.89 / 1,000
Prop boardEach game whose prop board is attached$4.49 / 1,000$3.99 / 1,000$3.69 / 1,000$3.29 / 1,000
Injury reportEach league injury report saved$6.99 / 1,000$5.99 / 1,000$5.49 / 1,000$4.99 / 1,000

History and Prop board are only charged when you turn them on and the game actually has that data. Expert picks and standings rows are included at no extra charge.

Examples (Free plan prices): a full NFL week of 16 games costs about $0.06. The same week with line history and props for every game costs about $0.18 (16 ร— ($0.00349 + $0.00349 + $0.00449)). A daily run across the NBA, NHL and MLB with 30 games costs about $0.10. To control spend, use maxGames and the filters. The run also stops when it reaches the maximum cost per run you set in Apify Console.

Action Network Scraper & API only collects data that Action Network shows publicly on its website, without logging in. It doesn't access subscriber-only (PRO) content or personal data beyond the public expert profiles that Action Network displays. You should still check that your use of the data complies with Action Network's terms of service and the laws that apply to you, and consult a lawyer if you're unsure. For more background, read Apify's article Is web scraping legal?

Other sports and betting scrapers from ParseBird

ActorWhat it does
Sports Betting Odds ScraperMoneyline, spread and total odds for 18 leagues, one row per book and outcome
Sports Injury Reports APINFL, NBA, WNBA, MLB and NHL injury reports with return dates
PrizePicks ScraperPrizePicks player projections and lines
Kalshi ScraperKalshi prediction market data
Polymarket Market ScraperPolymarket markets, prices and volume

FAQ

Do I need an Action Network account or API key? No. The Actor reads the same public data that the Action Network website shows to logged-out visitors.

How do I get odds for a past NFL week? Set week, season and seasonType (for example week 1, season 2025, reg) and leave date empty. For other leagues, set date. Results, box scores and play-by-play go back to 2015. Full sportsbook prices and betting splits are available from the 2024 season. 2023 games carry only the consensus and opening lines, and older games carry results without prices.

Why is lineMovementHistory or props empty for some games? Action Network removes prop boards once a game is finished, and in our tests line history was dropped about a week after a game ended. Turn these options on for upcoming, live and recently finished games. You are only charged for history or props when the game actually has them. Both options cover team sports. Tennis, UFC and boxing rows still include consensus, best prices and opening-to-current movement.

Why did my run return no games? The league may be out of season, or there may be no games on that date. Check the date (US Eastern) or week, or loosen gameStatus, teams, onlyTrending and minBets.

Why does the run stop when I set a date with the NFL? NFL and NCAA Football are scheduled by week. To avoid returning the wrong week, the Actor stops and asks you to use week and season instead. Run date-based leagues in a separate run.

What does sharpGap mean? It is money % minus ticket %. A positive value means a side is drawing a bigger share of the money than of the bets, which usually means larger bets are on that side.

How is the best price chosen? For each side, the Actor compares the selected sportsbooks' prices at each line and keeps the one with the lowest implied probability, which is the best payout. Pre-game and in-play prices are kept apart (isLive).

Is the team record the record at game time? No. awayTeam.record and homeTeam.record are the teams' current records as Action Network shows them now.

Can I run it on a schedule or connect it to other tools? Yes. Use Apify schedules, call it from the API, or connect it to Make, Zapier, n8n, Google Sheets, Slack or a webhook through integrations.

Something is missing or wrong. What should I do? Open an issue in the Issues tab. We read every report.