Action Network Scraper - Odds, Splits & Props avatar

Action Network Scraper - Odds, Splits & Props

Pricing

from $6.23 / 1,000 game rows

Go to Apify Store
Action Network Scraper - Odds, Splits & Props

Action Network Scraper - Odds, Splits & Props

Scrape Action Network sports odds with public betting splits, line movement, player props, weather, injuries and ATS standings. NFL, NBA, MLB, NHL, NCAAF, soccer, UFC and tennis. No login, no API key, no proxy.

Pricing

from $6.23 / 1,000 game rows

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

ParseForge

Action Network Scraper - Odds, Betting Splits & Player Props

Scrape Action Network odds for any game, in any league, with the public betting percentages attached. Every game comes back priced at up to 16 sportsbooks, with the opening line, the current consensus, the ticket-vs-money split on each side, no-vig win probabilities, and the best available price per side. No login, no API key, no cookies, and no proxy. Export to CSV, JSON, Excel, or XML.

Commercial odds feeds start in the hundreds per month and still do not publish betting splits. This reads the same public endpoints the actionnetwork.com website uses, filtered by league, date, week, team, or sharp-money divergence, and returns each match in one fixed schema. NFL odds, NBA odds, MLB odds, NHL odds and college football odds all come back with the same columns, so one run covers the whole board.

Who uses itWhat they scrape Action Network for
Sports bettors and handicappersWhere the money disagrees with the tickets, and which book has the best number
Model builders and quantsOpening-to-closing line movement as a training and CLV signal
Media and content teamsOdds, splits and injury notes for previews on a schedule
Affiliates and odds-comparison sitesA live board across DraftKings, FanDuel, BetMGM, Caesars and more
Researchers and data scientistsHistorical seasons with closing lines and final scores already graded

What it does

This Actor reads Action Network's public odds board and returns one flat row per game per period. Every row carries:

  • 🏟️ The game: teams with records, colours and logos, start time, venue, broadcast network, rotation numbers, and the bet count Action Network reports.
  • 💵 Every book's number: moneyline, spread and total from up to 16 sportsbooks, each with its own two-way hold percentage.
  • 📊 Public betting percentages: the share of tickets and the share of money on each side of the moneyline, spread and total — plus moneyMinusTickets per side and the biggest divergence on the game.
  • 📈 Line movement: the opening line, the current consensus, how far the spread and total have moved, and which way.
  • 🎯 Best odds: the best price available on each side and the book offering it.
  • 🧮 Computed market signals: implied probability, no-vig probability (three-way for soccer), decimal and fractional odds, and profit per 100 staked.
  • 🏁 Results, when the game is over: final score, linescore by period, half and first-five splits, and whether the closing spread covered and the total went over.

Results export to CSV, JSON, Excel, or XML, or stream from the API.

What you can do with Action Network data

🔍 Find where the sharp money is.

Set Minimum sharp gap to 15 and the Actor keeps only games where the money percentage runs at least 15 points ahead of the ticket percentage on some side — the classic sign that a few large bets disagree with the crowd.

📉 Track a line from open to close.

Every row already carries the opening number and the current one. Turn on Add full line movement history and you get each individual price change with its timestamp, per book.

🛒 Shop the best number.

bestOdds names the book with the top price on each side of every market, so you can see the half-point and the ten cents you are leaving on the table.

🧠 Build and backtest a model.

Set a past Season and the Actor returns that slate with its closing lines, final scores, and an already-graded ATS and over/under result on each row. Box scores go back to 2015; sportsbook prices fill in from 2023 and are complete from 2024.

🎲 Pull NFL player props in bulk.

Turn on Add player props and each game carries every passing, rushing, receiving, strikeout, points and rebounds market with each book's price and line.

Why choose this scraper

What you get
No login, everNo account, no cookies, no session token to paste or keep alive.
No proxy costIt runs on Action Network's public endpoints, so there is no proxy line on your bill.
Public betting splitsTickets and money percentages on both sides of all three core markets, on every row.
19 leagues, one schemaNFL, NCAAF, NBA, NCAAB, WNBA, MLB, NHL, the five big soccer leagues, MLS, UFC, boxing and tennis all return the same columns.
Three-way markets handledSoccer draws and combat-sport matchups price correctly instead of coming back empty.
Periods, not just full gameFirst half, second half, first quarter and MLB first five innings, each as its own row.
History that goes backAny season from 2015; closing lines from 2023.
Filters that cut noiseLeague, date, week, season, team, start time, bet count, status and sharp-money divergence. Only matching games are written and billed.
Opt-in extras, off by defaultLine movement, player props, game props, rosters, weather, injuries, standings and futures are each a checkbox. Leave them off and you are never billed for them.

How it compares

Three other Action Network scrapers exist on the Store. All three read the same scoreboard endpoint; none had a run in the last 30 days at the time of writing.

FeatureParseForgeautomation-labjungle_synthesizer
Odds from multiple sportsbooksYesYesYes
Public betting percentagesYes, all three marketsPartialBet count only
Opening line and movement summaryYes, on every rowNoNo
Full timestamped line-movement historyOptionalNoNo
Best price per side, with the book namedYesYesNo
No-vig probability, hold %, decimal and fractionalYesImplied prob. onlyNo
Player props and game propsOptionalNoNo
Futures marketsOptionalNoNo
Weather, injuries, ATS standingsOptionalNoNo
Soccer three-way, UFC, boxing, tennisYesNoNo
Past seasons with graded ATS and O/U resultYesNoNo
Half, quarter and first-five periodsYesFull game and halfFull game
Price per 1,000 rows$7.00Not published$0.90

The per-row price is the honest headline: this Actor costs meaningfully more per row than jungle_synthesizer's. The unit is not the same thing, though. There, a row is one odds line from one book. Here, a row is the whole game — every book's moneyline, spread and total, the splits, the movement, the best price and the computed probabilities in one record. If you want the cheapest possible per-line dump and will do the pivoting yourself, use theirs.

What a game looks like

Every game returns as one flat JSON row. Here is a real record, per-book lines trimmed to one:

{
"gameId": 294284,
"url": "https://www.actionnetwork.com/mlb/boston-red-sox-vs-miami-marlins-odds/294284",
"league": "mlb",
"leagueId": 8,
"season": 2026,
"seasonType": "reg",
"week": null,
"status": "scheduled",
"isFinal": false,
"isLive": false,
"startTime": "2026-08-25T22:40:00.000Z",
"startTimestamp": 1787697600,
"hoursUntilStart": 6.16,
"matchup": "Boston Red Sox @ Miami Marlins",
"homeTeam": {
"id": 214,
"name": "Miami Marlins",
"abbreviation": "MIA",
"logo": "https://static.sprtactn.co/teamlogos/mlb/100/mia_n.png",
"primaryColor": "#FF6600",
"conference": "NL",
"division": "EAST",
"wins": 67,
"losses": 65,
"record": "67-65",
"url": "https://www.actionnetwork.com/mlb/odds/miami-marlins"
},
"awayTeam": { "id": 190, "name": "Boston Red Sox", "abbreviation": "BOS", "record": "72-59" },
"homeRotationNumber": 926,
"awayRotationNumber": 925,
"broadcastNetwork": "NESN",
"betCount": 3927,
"isTrending": false,
"period": "event",
"periodLabel": "Full game",
"consensusSpreadHome": 1.5,
"consensusSpreadHomeOdds": -144,
"consensusSpreadAway": -1.5,
"consensusSpreadAwayOdds": 118,
"consensusMoneylineHome": 125,
"consensusMoneylineAway": -142,
"consensusMoneylineDraw": null,
"consensusTotal": 7.5,
"consensusOverOdds": -101,
"consensusUnderOdds": -122,
"homeWinProbability": 0.4444,
"awayWinProbability": 0.5868,
"homeWinProbabilityNoVig": 0.431,
"awayWinProbabilityNoVig": 0.569,
"moneylineHoldPercent": 3.12,
"spreadHoldPercent": 4.89,
"totalHoldPercent": 5.2,
"homeDecimalOdds": 2.25,
"homeFractionalOdds": "5/4",
"homeProfitPer100": 125,
"publicBetting": {
"moneylineHome": { "ticketsPercent": 14, "moneyPercent": 11, "moneyMinusTickets": -3 },
"moneylineAway": { "ticketsPercent": 86, "moneyPercent": 89, "moneyMinusTickets": 3 },
"spreadHome": { "ticketsPercent": 14, "moneyPercent": 7, "moneyMinusTickets": -7 },
"spreadAway": { "ticketsPercent": 86, "moneyPercent": 93, "moneyMinusTickets": 7 },
"over": { "ticketsPercent": 77, "moneyPercent": 78, "moneyMinusTickets": 1 },
"under": { "ticketsPercent": 23, "moneyPercent": 22, "moneyMinusTickets": -1 },
"maxMoneyTicketGap": 7,
"sharpSide": "spreadAway"
},
"bestOdds": {
"moneylineHome": { "odds": 130, "book": "DraftKings", "value": null },
"moneylineAway": { "odds": -135, "book": "Caesars", "value": null },
"spreadHome": { "odds": -140, "book": "bet365", "value": 1.5 },
"over": { "odds": 105, "book": "BetMGM", "value": 7.5 },
"bookCount": 5
},
"lineMovement": {
"openSpreadHome": 1.5,
"openTotal": 7.5,
"openMoneylineHome": 135,
"currentSpreadHome": 1.5,
"currentTotal": 7.5,
"currentMoneylineHome": 125,
"spreadMove": 0,
"totalMove": 0,
"moneylineHomeMove": -10,
"spreadDirection": "flat",
"totalDirection": "flat"
},
"books": [
{
"bookId": 68,
"book": "DraftKings",
"period": "event",
"marketId": "24437052",
"isLive": false,
"spreadHome": 1.5,
"spreadHomeOdds": -140,
"spreadAway": -1.5,
"spreadAwayOdds": 115,
"moneylineHome": 130,
"moneylineAway": -155,
"moneylineDraw": null,
"total": 7.5,
"overOdds": -105,
"underOdds": -115,
"moneylineHoldPercent": 4.32,
"spreadHoldPercent": 4.86,
"totalHoldPercent": 4.55
}
],
"bookCount": 7,
"boxscore": null,
"result": null,
"scrapedAt": "2026-08-25T16:41:07.108Z"
}

boxscore and result stay null until a game actually starts — a scheduled game ships an empty linescore, and grading that as 0-0 would put a fake result on every future game. consensusMoneylineDraw fills only on three-way soccer markets. venue fills when Add weather and venue is on.

Configure the run

Pick one or more leagues, then narrow the slate. Filters run as each game is read, so only matches reach your dataset and only matches are billed. The Input tab lists every parameter.

Today's NFL board at the five major books:

{ "leagues": ["nfl"], "books": ["draftkings", "fanduel", "betmgm", "caesars", "bet365"], "maxItems": 100 }

Only games where the money is at least 15 points ahead of the tickets, biggest divergence first:

{ "leagues": ["nfl", "ncaaf", "nba"], "minSharpGap": 15, "sortBy": "sharpGap", "maxItems": 50 }

A specific NFL week from a past season, already graded against the closing line:

{ "leagues": ["nfl"], "season": 2024, "week": 1, "seasonType": "reg", "gameStatus": "complete" }

An MLB slate for one date with player props, weather and both bullpens' injury lists:

{ "leagues": ["mlb"], "date": "2026-09-13", "includePlayerProps": true, "includeWeather": true, "includeInjuries": true }

First-half NBA lines with the full timestamped movement history:

{ "leagues": ["nba"], "periods": ["firsthalf"], "includeLineMovement": true, "maxItems": 20 }

Season-long futures for the NFL — championship, division, win totals, awards and player milestones:

{ "leagues": ["nfl"], "includeFutures": true, "maxItems": 1 }

Pricing

Pay-per-event. You are billed per game row written, plus a $0.054 run-start fee. Filtered-out games cost nothing.

EventPriceWhen it fires
Run start$0.054Once per run
Scoreboard request$0.01Once per league and period read — one request covers that whole slate
Game row$0.007Each game row written to the dataset
Line movement history$0.006Only with Add full line movement history on
Player props$0.008Only with Add player props on
Game props$0.004Only with Add game props on
Game detail$0.005Only with Add rosters, depth charts and trends on
Weather report$0.01Only with Add weather and venue on, once per league
Injury report$0.01Only with Add injury reports on, once per league
Standings table$0.01Only with Add standings and ATS records on, once per league
Futures market$0.01Only with Add futures markets on, per futures market row
Games collectedApproximate cost
100$0.76
1,000$7.16
10,000$71.15

The eight optional blocks are off by default. A run that leaves them off pays only the run-start fee, one scoreboard request per league and period, and $0.007 per game.

Two things worth knowing before you budget. A game requested across two periods is two rows and bills twice, because each period is a separate scoreboard read and a separate set of lines. And filters run on the full row before the optional blocks are bought, so you can filter on a column you did not pay to keep — screening by sharp gap costs nothing extra.

Free users

Free-plan runs return up to 10 games as a preview, and skip futures. Upgrade your Apify plan to collect up to 100,000 games per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Action Network Scraper.
  3. Pick your leagues, set a date or week, tick any optional blocks, and click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to sportsbook odds and public betting percentages through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/action-network-scraper"

Then prompt it in plain language:

  • "Pull today's NFL board and list the games where the money percentage is at least 15 points ahead of the tickets."
  • "Which book has the best price on every underdog moneyline in tonight's NBA slate?"
  • "Get NFL Week 1 of 2024 with closing lines and tell me how favourites did against the spread."

Copy this into ChatGPT, Claude, or Cursor to start:

Use the Apify Actor "parseforge/action-network-scraper" to collect sportsbook odds with public betting splits. Input: { "leagues": ["nfl"], "date": "<YYYY-MM-DD>", "week": <n>, "season": <year>, "books": ["draftkings","fanduel","betmgm"], "minSharpGap": <n>, "maxItems": <n> }. Each row is one game with every book's moneyline, spread and total, the ticket and money percentages on each side, the opening line and how far it moved, the best price per side, and no-vig probabilities. Optional blocks: includeLineMovement, includePlayerProps, includeGameProps, includeGameDetail, includeWeather, includeInjuries, includeStandings, includeFutures. Call it with the ApifyClient and my APIFY_TOKEN.

Troubleshooting

Why is date being ignored?

NFL and NCAAF slates are addressed by week, not date. Use Week with Season type for those two; use Date for MLB, NBA, NHL, WNBA, college basketball and soccer.

Why are the public betting percentages all zero?

Splits come from Action Network's consensus book and only fill once a game has taken real action. Preseason games, deep college slates and markets that just opened often sit at zero for hours.

Why does a period come back with no lines?

Not every league prices every period, and books post half and quarter numbers later than the full game. Preseason NFL, for example, rarely has a first-half market. Turn on Priced games only to drop those rows before they are billed.

Why does my past season have scores but no odds?

Box scores go back to 2015. Sportsbook prices start appearing around 2023 and are complete from 2024 onward — before that, only the consensus line is available, and often not even that.

Why fewer games than I asked for?

Your filters removed them, or the slate is that size. minSharpGap, minNumBets and gameStatus cut hard. Loosen them or add leagues.

Why is venue empty?

Venue travels with the weather feed. Turn on Add weather and venue and it fills, along with surface and roof type.

A field stopped filling.

Action Network changed its response shape. Email us with your run ID and the column that went empty.

FAQ

QuestionAnswer
Do I need an Action Network account or subscription?No. It reads the same public endpoints the logged-out site uses.
Do I need a proxy?No. There is no proxy cost on this Actor.
Which leagues does it cover?NFL odds, NBA odds, MLB odds, NHL odds, college football (NCAAF) and college basketball odds, WNBA, the five big European soccer leagues, MLS, UFC, boxing and ATP/WTA tennis — 19 in all.
Which sportsbooks does it cover?DraftKings, FanDuel, BetMGM, Caesars, BetRivers, bet365, Fanatics, Unibet, Hard Rock Bet, Bally Bet, theScore Bet, plus Kalshi and Polymarket, and state-specific skins by ID.
What are books 15 and 30?15 is Action Network's consensus line, which carries the betting splits. 30 is the opening line. Both are always included and are excluded from best-price shopping.
Can I get closing line value?Yes. Pull a past season and compare lineMovement.openSpreadHome with result.closingSpreadHome on each row.
Does it do live in-game odds?It returns whatever is posted when the run fires, including live prices, with isLive on the affected lines. Schedule it to poll.
How many games per run?Free plan: 10. Paid: up to 100,000, bounded by how many games the leagues you picked actually have.
Does it return player props for every sport?It returns whatever the game offers. NFL and MLB are the deepest; college and soccer are thinner.
Are futures counted against the game cap?No. Futures are separate rows with their own event.
Is this an official Action Network product?No. It is unofficial and reads only public Action Network data.

Browse the full ParseForge collection for more scrapers.

🆘 Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by The Action Network, Inc. It collects only publicly available data. You are responsible for using the data in compliance with Action Network's terms and applicable laws. Odds data is provided for informational purposes only and is not betting advice. Gambling involves risk; if you or someone you know has a gambling problem, call 1-800-GAMBLER.