Skip to content

Action Network Odds Scraper

Try for free

Scrape Action Network public betting splits (% of bets and % of money), odds from every major sportsbook, best price per side, line movement, expert picks, props, standings and injuries for NFL, NBA, MLB, NHL, college, soccer, tennis and UFC. No login.

📈 Action Network Odds Scraper

Get public betting splits (% of bets and % of money), odds from every major sportsbook, the best price per side, opening-to-current line movement and expert picks for every game on Action Network. NFL, NBA, MLB, NHL, college football and basketball, WNBA, soccer, tennis, UFC and boxing in one run, with no login and no account. One row per game, ready for a spreadsheet, a model or a betting dashboard.

✨ Why use Action Network Odds Scraper?

  • 📊 Bets vs money on every side: ticketPercent, moneyPercent and sharpGap (money minus tickets) for the moneyline, spread and total, plus flat columns like spreadHomeTicketPercent for quick sorting.
  • 🏦 Every major sportsbook in one row: DraftKings, FanDuel, BetMGM, bet365, BetRivers and Caesars by default, or any book you list by ID or name, with the consensus and the opening line always included.
  • 🎯 Best price and line movement already computed: the best odds per side with the book offering it, no-vig probabilities, hold, and opener-to-current moves for each market.
  • 🧠 Expert picks with records: each expert's picks on the game with their league win-loss record, units and ROI, at no extra charge.
  • 🏟️ Full game detail: rosters, lineups, box score, play-by-play, player and team stats, weather, venue, officials, injuries and betting trends.
  • ⚡ Fast and cheap: a 20-game slate finishes in under 10 seconds and a month of NBA, NHL and soccer (730 games) in under 3 minutes; you pay per game, not per price.

🎯 Use cases

  • 💸 Sharp-money tracking: schedule hourly runs on game day and alert when sharpGap or a line move crosses your threshold.
  • 🔁 Reverse line movement: compare the public side (ticketPercent) with lineMovement to spot lines moving against the public.
  • 🛒 Line shopping: use bestPrices and booksPricing to find the best number across books.
  • 🧪 Backtesting: pull finished games with closing lines, splits and the graded result (winner, against the spread, over/under).
  • 🧾 Player props research: switch on props to get the full prop board per game across books.
  • 📰 Content and dashboards: feed betting-splits tables, previews and newsletters.

🚀 How to use

  1. Pick one or more Leagues (or paste Game page links or IDs for specific games).
  2. Optionally set a Date or date range, or a Week and Season for NFL and NCAA Football. Leave them empty for today's slate.
  3. Set Maximum games (0 = no limit) and any filters (status, teams, minimum bets, trending).
  4. Turn on extras if you need them: full line movement history, player props, standings or injury reports.
  5. Click Start, then download the results as JSON, CSV, Excel or HTML, or read them through the API.

📥 Input

FieldWhat it does
leaguesnfl, ncaaf, nba, ncaab, wnba, mlb, nhl, soccer (all leagues), epl, laliga, bundesliga, seriea, ligue1, mls, ufc, boxing, atp, wta
gameUrlsGame page links or numeric game IDs; overrides the leagues
maxGamesStop after this many games (default 20, 0 = no limit)
date, endDateA day or a range of days (YYYY-MM-DD); empty = today
week, season, seasonTypeNFL and NCAA Football weeks (reg, post, pre)
gameStatus, teams, minBets, onlyTrendingFilters, applied before any per-game work, so filtered games cost nothing
books, periodsSportsbooks (IDs or names) and game segments (full game, halves, quarters, periods)
includeExpertPicks, includeGameDetailOn by default, free
includeLineMovement, includeProps, includeStandings, includeInjuriesOptional extras, priced separately
{
  "leagues": ["nfl", "nba"],
  "maxGames": 20,
  "gameStatus": ["scheduled"],
  "books": ["68", "69", "75"],
  "includeExpertPicks": true,
  "includeLineMovement": false
}

📤 Output

One row per game (or per tennis match or fight). League reports (standings, injuries) are separate rows with recordType.

FieldDescription
gameId, gameUrl, league, startTime, statusGame identity and state
title, awayName, homeName, awayScore, homeScoreMatchup and score
moneylineAway, moneylineHome, spreadHome, totalLineConsensus lines as flat columns
spreadHomeTicketPercent, spreadHomeMoneyPercent, overTicketPercent, ...Public betting splits as flat columns
consensus, teamTotalsConsensus moneyline, spread, total and team totals with splits, no-vig probability, hold
bestPricesBest price per side and the book offering it
lineMovementOpening vs current line and odds per side
booksPricingEvery outcome from every selected sportsbook and segment
resultWinner, against the spread and over/under for finished games
expertPicksExperts' picks on the game with record, units and ROI
awayTeam, homeTeam, competitorsTeams (or players) with records and logos
players, lineups, plays, playerStats, teamStats, venue, weather, officials, injuries, trendsGame detail
lineMovementHistory, propsOptional extras

Real example from a test run (trimmed; the expert is shown with a placeholder name):

[
  {
    "gameId": 295286,
    "eventType": "game",
    "gameUrl": "https://www.actionnetwork.com/nba-game/bucks-wizards-score-odds-october-21-2026/295286",
    "league": "nba",
    "season": 2026,
    "startTime": "2026-10-21T23:00:00.000Z",
    "title": "Bucks @ Wizards",
    "awayName": "Bucks",
    "homeName": "Wizards",
    "moneylineAway": 150,
    "moneylineHome": -175,
    "spreadHome": -4.5,
    "totalLine": 238.5,
    "moneylineHomeTicketPercent": 89,
    "moneylineHomeMoneyPercent": 93,
    "spreadHomeTicketPercent": 59,
    "spreadHomeMoneyPercent": 61,
    "overTicketPercent": 54,
    "overMoneyPercent": 53,
    "status": "scheduled",
    "totalBets": 18392,
    "awayTeam": {
      "teamId": 172,
      "name": "Milwaukee Bucks",
      "abbreviation": "MIL",
      "logo": "https://static.sprtactn.co/teamlogos/nba/100/mil.png",
      "record": {
        "wins": 0,
        "losses": 0,
        "ties": null,
        "draws": null,
        "overtimeLosses": null
      }
    },
    "homeTeam": {
      "teamId": 157,
      "name": "Washington Wizards",
      "abbreviation": "WAS",
      "logo": "https://static.sprtactn.co/teamlogos/nba/100/wsh.png",
      "record": {
        "wins": 0,
        "losses": 0,
        "ties": null,
        "draws": null,
        "overtimeLosses": null
      }
    },
    "consensus": {
      "spread": {
        "sides": [
          {
            "side": "away",
            "teamId": 172,
            "competitorId": null,
            "playerId": null,
            "odds": -111,
            "decimalOdds": 1.9009,
            "line": 4.5,
            "impliedProbability": 0.526066,
            "noVigProbability": 0.502164,
            "ticketPercent": 41,
            "moneyPercent": 39,
            "sharpGap": -2,
            "marketId": "24010999",
            "outcomeId": "2827927803"
          }
        ],
        "holdPercent": 4.5434,
        "overroundPercent": 4.7597
      }
    },
    "bestPrices": {
      "spread": [
        {
          "side": "away",
          "teamId": 172,
          "odds": -105,
          "decimalOdds": 1.9524,
          "line": 4.5,
          "bookId": 123,
          "bookName": "Caesars NJ",
          "competitorId": null,
          "playerId": null,
          "impliedProbability": 0.512195,
          "marketId": "24010999",
          "outcomeId": "2848561211",
          "bookParentId": 2,
          "deeplinkId": "ML2848561211"
        }
      ]
    },
    "lineMovement": {
      "spread": [
        {
          "side": "away",
          "teamId": 172,
          "competitorId": null,
          "playerId": null,
          "openingLine": 6.5,
          "currentLine": 4.5,
          "lineDelta": -2,
          "openingOdds": -110,
          "currentOdds": -111,
          "oddsDelta": -1
        }
      ]
    },
    "booksPricing": [
      {
        "bookId": 68,
        "bookName": "DK NJ",
        "market": "spread",
        "period": "event",
        "side": "away",
        "teamId": 172,
        "odds": -112,
        "decimalOdds": 1.8929,
        "line": 4.5,
        "impliedProbability": 0.528302,
        "marketId": "24010999",
        "outcomeId": "2827927741"
      }
    ],
    "expertPicks": [
      {
        "expertId": 100001,
        "name": "Sam Example",
        "username": "samexample",
        "profileUrl": "https://www.actionnetwork.com/u/samexample",
        "followers": 12500,
        "record": {
          "window": "last_month",
          "wins": 5,
          "losses": 3,
          "pushes": 0,
          "unitsNet": 0.9468,
          "roi": 24.66,
          "count": 8
        },
        "picks": [
          {
            "pickId": 500000001,
            "play": "WAS -4.5",
            "market": "spread_home",
            "line": -4.5,
            "odds": -105,
            "units": 0.55,
            "result": "pending",
            "bookId": 1537
          }
        ]
      }
    ],
    "venue": {
      "id": 267,
      "name": "Capital One Arena",
      "city": "Washington",
      "state": "DC",
      "surface": "artificial",
      "roofType": "dome",
      "directionDegrees": null,
      "imageUrl": null,
      "neutralSite": false
    },
    "scrapedAt": "2026-10-21T21:22:12.313Z"
  }
]

💰 Pricing

Pay per event, no start fee:

  • $3.00 per 1,000 games (each game or match row, with expert picks and game detail included)
  • $3.00 per 1,000 games with full line movement history (only when switched on and the game has history)
  • $4.00 per 1,000 games with player and game props (only when switched on and the game has props)
  • $6.00 per 1,000 league reports (one standings table or injury report per league)

Example: 1,000 games ≈ $3.00 in events plus about $0.06 of platform usage (compute, datacenter proxy traffic and dataset writes, billed at the platform's normal rates), so about $3.06 in total. A 20-game slate costs about $0.06.

❓ FAQ

Is it legal to scrape Action Network? The actor collects publicly visible information: odds, aggregate betting percentages, published injury reports and public expert profiles. It is not affiliated with Action Network. Check the rules that apply to you, including gambling regulations in your jurisdiction. The data is for information and analysis, not betting advice.

Do I need a login or a proxy? No login. The default datacenter proxy works well and is included in the platform usage.

How many games can I get? As many as the site lists: set maxGames to 0 and pick a date range or several leagues. Prices and splits are available from 2024; scores go back to 2015.

Why are some fields empty? Out-of-season leagues return nothing, splits appear only on games the consensus book tracks, and props or segment lines exist only where books priced them. Empty values are real answers, not errors.

What are book IDs 15 and 30? 15 is the consensus line that carries the betting splits and 30 is the opening line. Both are always included.

Can I schedule it or use the API? Yes. Schedule runs (hourly on game day works well for splits) and read results through the API, webhooks or integrations.

⚠️ Limits

  • Line movement history and props are available for team sports, not for tennis, UFC or boxing.
  • Game links and IDs work for team sports; tennis matches and fights are collected through their league.
  • Standings exist for the US leagues (NFL, NCAA Football, NBA, NCAA Basketball, WNBA, MLB, NHL); Action Network publishes no soccer tables. Injury reports cover soccer leagues too.
  • Tennis, UFC and boxing prices come with current and recent matches; in our tests, matches from months ago came back with results but without prices.
  • Props need one request per prop type (around 100 per game), so runs with props take longer.
  • Lines and splits reflect the moment of the run; schedule runs to build a time series.

Related actors

G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.