Action Network API | Betting Splits, Odds & Line Movement avatar

Action Network API | Betting Splits, Odds & Line Movement

Pricing

from $2.79 / 1,000 games

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

Action Network API | Betting Splits, Odds & Line Movement

Public betting splits from Action Network: share of tickets and share of money on every side, across 18 leagues. Plus sportsbook odds, best price per side, opening-to-current line movement, player props and expert picks with verified ROI. Export JSON, CSV or Excel. No login, no proxy.

Pricing

from $2.79 / 1,000 games

Rating

0.0

(0)

Developer

Zen Studio

Zen Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

Action Network API | Betting Splits, Odds, Line Movement & Expert Picks (2026)

Action Network betting splits scraper: percentage of bets, percentage of money and the difference on an NFL spread

From Zen Studio, creators of PrizePicks Player Props, Underdog Player Props and DraftKings Odds, with 50,000+ combined lifetime runs across those three sports-betting Actors.

Why choose this Actor?

  • Bets, money and the gap between them. Every game the consensus book prices carries ticketPercent, moneyPercent and a signed sharpGap. Money running ahead of tickets means fewer bettors are carrying more of the stake, and sharpGap is that difference as one sortable number.
  • Eighteen leagues, team sports and individual sports. A single run collected 120 games across 10 in-season leagues in 8 seconds, NFL and college football through MLB, NHL, WNBA and the European soccer leagues. Tennis matches and UFC fights come back as their own rows in the same run. No per-sport rewrites and no per-book scrapers.
  • Expert picks, verified records and ROI, at no extra charge. One NFL game carried 52 handicappers, each with a win/loss record, units staked, ROI and a profile link. They arrive inside the game row rather than as a separate billable event.

Run the NFL slate: open the Action Network Odds Actor input page

Try the example slate

Open the Actor's input page, switch to JSON and paste this to pull the current NFL slate with splits and expert picks. Then start the run.

{
"leagues": [
"nfl"
],
"includeExpertPicks": true,
"maxGames": 10
}

Leave date, week and season out and you get the current slate. NFL and college football are scheduled by week, so those two leagues use week plus season instead of date. Splits appear on the games the consensus book prices, which is most in-season games but not every fixture months out.

ActorUse it for
DraftKings OddsOne book's full board, 280+ leagues, props and futures.
FanDuel OddsCompare a second book's prices against the consensus.
Player Props Line ShoppingFind the best prop line across the pick'em apps.
Flashscore TennisMatch data and odds for ATP and WTA.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start building with this Actor.

Action Network Odds scraper on Apify. Actor: zen-studio/action-network-odds (batch, pay per event). Run it with the apify-client SDK or POST https://api.apify.com/v2/acts/zen-studio~action-network-odds/runs?token=APIFY_TOKEN (token: https://console.apify.com/account/integrations). One dataset row per game (48 top-level fields, up to 51 with expert picks, props and line movement) or per tennis match, UFC fight or boxing bout (25 fields, up to 28; competitors instead of teams, eventType competition): game identity, both teams with records and logos, consensus moneyline/spread/total with ticketPercent + moneyPercent + sharpGap (public betting splits), per-book pricing, best price per side with the book, opening-to-current line movement, team totals, expert picks with verified records and ROI, final score by period, a graded against-the-spread / over-under result, closing odds by period, box score detail with live situation, live win probability, poll ranks, a roster that names every player id, final lineups, play-by-play, officials, venue and weather, full team and player stat sheets and the league calendar. Opt-in blocks add full timestamped line movement history and the complete player and game prop board. Leagues: nfl ncaaf nba ncaab wnba mlb nhl soccer epl laliga bundesliga seriea ligue1 mls ufc boxing atp wta. Inputs: leagues (array), date (YYYY-MM-DD; NFL and NCAAF use week + season + seasonType instead), gameIds / gameUrls, gameStatus, teams, onlyTrending, minBets, books, periods, includeExpertPicks, includeLineMovement, includeProps, includeStandings, includeInjuries, maxGames. Pricing: $3.99 per 1,000 games, +$3.99 per 1,000 for movement history, +$4.99 per 1,000 for props, $7.99 per 1,000 league reports, $4.99 per 1,000 runs to start the Actor; expert picks free. Full input schema and output fields: GET https://api.apify.com/v2/acts/zen-studio~action-network-odds/builds/default (Bearer TOKEN).

Also available as an MCP server: add zen-studio/action-network-odds for natural language access.

What Are Betting Splits and Sharp Money?

ticketPercent is the share of bets on a side. moneyPercent is the share of money. sharpGap is the signed difference between them, so you can sort on it directly.

When money runs well ahead of tickets, fewer bettors are carrying more of the stake. That is the classic sharp-money signal, and it is the reason public betting percentages are worth collecting at all.

In the example below, 82% of moneyline tickets are on Seattle but only 53% of the money. That is a sharpGap of -29, with the money leaning the other way.

Every game the books have priced also carries reverse line movement in raw form: lineMovement holds the opening number next to the current one, so a line that moved against the public side is a one-line comparison rather than a research project.

What Data Can You Extract from Action Network?

BlockIncludedWhat it is
Game, teams, recordsAlwaysIdentity, start time, status, broadcast networks, attendance, rotation numbers, bet count
Matches and fightsAlwaysTennis, UFC and boxing as one row per event, with both competitors, nationality, playing hand or reach, and the venue
Consensus linesAlwaysMoneyline, spread, total, with no-vig probabilities, hold and overround
Public betting percentagesAlwaysShare of tickets and of money on each side, plus the signed gap between them
Every sportsbook's priceAlwaysPer-book pricing for each market and game segment. Six major books by default, up to 38 of 457 selectable
Best price per sideAlwaysHighest available price and which book offers it, compared on implied probability
Opening vs currentAlwaysLine and odds movement from the opening number
Team totalsAlwaysPer-team over/under, de-vigged per team
Score and resultAlwaysFinal score by period, plus graded against-the-spread and over/under
Expert picksAlwaysSelections with verified win/loss record, units staked and ROI
Closing odds by periodAlwaysLast recorded moneyline, spread and total for the full game, each half and each quarter
Box score detailAlwaysHalf and first-five-inning totals, timeouts, team stats, live down-and-distance or ball-strike count, pitching matchup
Live win probabilityAlwaysHome, over and spread win probability from the latest play while a game is live
Poll rankingsAlwaysAP Top 25 rank for college teams
League calendarAlwaysSeason dates, current week, conferences and divisions
Rosters with namesAlwaysEvery player on both teams with name, jersey, position, bats and throws, and headshot. Every player id elsewhere in the row carries its name
Starting lineupsAlwaysFinal lineups with substitutes, batting order and position
Play-by-playAlwaysEvery play with score, clock, down and distance or outs and runners, and live win probability. Baseball plays name the batter and the pitcher
Player and season statsAlwaysBox score stats for every player in the game, and full season stat lines
OfficialsAlwaysUmpires and referees where the source lists them, each with their own moneyline and over/under record
Venue and weatherAlwaysStadium, surface, roof and orientation, and the forecast for upcoming games
Team stat sheetAlwaysEach team's full stats: passing, rushing, shots, corners, cards and the rest
Full movement historyOpt-inEvery timestamped price change per book, back to the opener
Player and game propsOpt-inThe complete prop board per game
Standings, injuriesOpt-inLeague table with against-the-spread, over/under and units records, college poll rank, games back and soccer points, plus the current injury report. One row per league

Always means no opt-in is needed, not that every game carries it. Odds blocks land where the books have priced the game, and expert picks where handicappers have posted one.

Download the result as JSON, CSV, Excel or HTML, or pull it straight from the dataset API.

Example game row

One row per game. This completed NFL game has props and full line movement switched on, so every block is populated. A game row carries 48 top-level fields, and 51 with expert picks, props and line movement.

Every key is shown. Repeated items are trimmed for readability, and each trimmed block lists its real size:

  • consensus.moneyline.sides: 1 of 2
  • consensus.total.sides: 1 of 2
  • consensus.spread.sides: 1 of 2
  • teamTotals: 1 of 2
  • teamTotals[].sides: 1 of 2
  • bestPrices.total: 1 of 2
  • bestPrices.moneyline: 1 of 2
  • bestPrices.spread: 1 of 2
  • lineMovement.moneyline: 1 of 2
  • lineMovement.spread: 1 of 2
  • lineMovement.total: 1 of 2
  • booksPricing: 2 of 66
  • players: 1 of 94
  • playerStats.{side}: 2 of 47
  • plays: 1 of 181
  • leagueInfo.league.blacklistDates: 1 of 158
  • leagueInfo.league.calendarInfo.pre: 1 of 4
  • leagueInfo.league.calendarInfo.reg: 1 of 18
  • leagueInfo.league.calendarInfo.post: 1 of 4
  • leagueInfo.league.conferences: 1 of 2
  • leagueInfo.league.divisions: 1 of 8
  • expertPicks: 4 of 52
  • expertPicks[].picks: 2 of 4
  • expertPicks[].picks[].customPickRules.options: 1 of 2 entries
  • lineMovementHistory: 1 of 66
  • lineMovementHistory[].history: 2 of 186
  • props.playerProps: 1 of 930
  • props.playerProps[].selections: 1 of 9
  • props.gameProps: 1 of 5
  • props.gameProps[].selections: 1 of 72
  • props.propOrder: 1 of 123
  • props.marketRules: 6 of 123 prop types
  • props.marketRules.{rule}.rules.options: 1 of 2 entries
{
"gameId": 290843,
"eventType": "game",
"gameUrl": "https://www.actionnetwork.com/nfl-game/patriots-seahawks-score-odds/290843",
"league": "nfl",
"leagueId": 1,
"leagueName": "nfl",
"coreId": 35546920,
"season": 2026,
"week": 1,
"seasonType": "reg",
"startTime": "2026-09-10T00:20:00.000Z",
"status": "complete",
"statusDetail": "Final",
"realStatus": "closed",
"coverage": "full",
"isFree": false,
"isLive": false,
"isComplete": true,
"awayTeam": {
"teamId": 129,
"name": "New England Patriots",
"displayName": "Patriots",
"shortName": "Patriots",
"location": "New England",
"abbreviation": "NE",
"logo": "https://static.sprtactn.co/teamlogos/nfl/100/ne.png",
"primaryColor": "002244",
"secondaryColor": "C60C30",
"conference": "AFC",
"division": "EAST",
"urlSlug": "new-england-patriots",
"coreId": 1993,
"teamRankingsId": null,
"record": {
"wins": 0,
"losses": 1,
"ties": 0,
"draws": null,
"overtimeLosses": null
}
},
"homeTeam": {
"teamId": 156,
"name": "Seattle Seahawks",
"displayName": "Seahawks",
"shortName": "Seahawks",
"location": "Seattle",
"abbreviation": "SEA",
"logo": "https://static.sprtactn.co/teamlogos/nfl/100/sea.png",
"primaryColor": "002244",
"secondaryColor": "69BE28",
"conference": "NFC",
"division": "WEST",
"urlSlug": "seattle-seahawks",
"coreId": 2166,
"teamRankingsId": null,
"record": {
"wins": 1,
"losses": 0,
"ties": 0,
"draws": null,
"overtimeLosses": null
}
},
"winningTeamId": 156,
"broadcast": {
"network": "NBC/Peacock",
"networkShort": "NBC/Peacock"
},
"attendance": 68744,
"totalBets": 292189,
"isTrending": false,
"awayRotationNumber": 451,
"homeRotationNumber": 452,
"score": {
"awayScore": 10,
"homeScore": 13,
"totalPoints": 23,
"awayFirstHalfPoints": 7,
"homeFirstHalfPoints": 0,
"awaySecondHalfPoints": 3,
"homeSecondHalfPoints": 13,
"awayFirstFivePoints": 0,
"homeFirstFivePoints": null,
"awayTimeouts": 1,
"homeTimeouts": 0,
"clock": "00:00",
"period": 4,
"byPeriod": [
{
"period": "1st",
"periodName": "1st Quarter",
"periodNumber": 1,
"abbreviation": "1",
"awayPoints": 0,
"homePoints": 0
},
{
"period": "2nd",
"periodName": "2nd Quarter",
"periodNumber": 2,
"abbreviation": "2",
"awayPoints": 7,
"homePoints": 0
},
{
"period": "3rd",
"periodName": "3rd Quarter",
"periodNumber": 3,
"abbreviation": "3",
"awayPoints": 3,
"homePoints": 3
},
{
"period": "4th",
"periodName": "4th Quarter",
"periodNumber": 4,
"abbreviation": "4",
"awayPoints": 0,
"homePoints": 10
}
],
"awayTeamId": 129,
"homeTeamId": 156,
"situation": {
"down": 2,
"distance": 11,
"yardline": 19,
"isRedzone": false,
"yardlineText": "SEA 19",
"startYardline": 20,
"yardsToEndzone": 81,
"display": "2nd & 11 @ SEA 19",
"displayShort": "2nd & 11",
"possessionTeamId": 156
},
"teamStats": null,
"pitching": null,
"latestOdds": {
"game": {
"over": -109,
"total": 44.5,
"under": -111,
"mlAway": 146,
"mlHome": -179,
"spreadAway": 3.5,
"spreadHome": -3.5,
"spreadAwayLine": -110,
"spreadHomeLine": -110
},
"firsthalf": {
"over": -118,
"total": 20.5,
"under": -101,
"mlAway": 127,
"mlHome": -154,
"spreadAway": 2.5,
"spreadHome": -2.5,
"spreadAwayLine": -112,
"spreadHomeLine": -107
},
"firstquarter": {
"over": 105,
"total": 7.5,
"under": -130,
"mlAway": 116,
"mlHome": -140,
"spreadAway": 0.5,
"spreadHome": -0.5,
"spreadAwayLine": -135,
"spreadHomeLine": 105
},
"thirdquarter": {
"over": -120,
"total": 9.5,
"under": -110,
"mlAway": 114,
"mlHome": -140,
"spreadAway": 1,
"spreadHome": -1,
"spreadAwayLine": -145,
"spreadHomeLine": 117
},
"fourthquarter": {
"over": -105,
"total": 13.5,
"under": -124,
"mlAway": 110,
"mlHome": -134,
"spreadAway": 0.5,
"spreadHome": -0.5,
"spreadAwayLine": -135,
"spreadHomeLine": 105
},
"secondquarter": {
"over": 105,
"total": 13.5,
"under": -135,
"mlAway": 124,
"mlHome": -154,
"spreadAway": 1,
"spreadHome": -1,
"spreadAwayLine": -118,
"spreadHomeLine": -107
}
}
},
"consensus": {
"moneyline": {
"sides": [
{
"side": "home",
"teamId": 156,
"competitorId": null,
"playerId": null,
"odds": -175,
"decimalOdds": 1.5714,
"line": 0,
"impliedProbability": 0.636364,
"noVigProbability": 0.615922,
"ticketPercent": 82,
"moneyPercent": 53,
"sharpGap": -29,
"marketId": "21790020",
"outcomeId": "2669500864"
}
],
"holdPercent": 3.2123,
"overroundPercent": 3.3189
},
"total": {
"sides": [
{
"side": "under",
"teamId": null,
"competitorId": null,
"playerId": null,
"odds": -112,
"decimalOdds": 1.8929,
"line": 44.5,
"impliedProbability": 0.528302,
"noVigProbability": 0.50433,
"ticketPercent": 71,
"moneyPercent": 59,
"sharpGap": -12,
"marketId": "21790022",
"outcomeId": "2669500871"
}
],
"holdPercent": 4.5376,
"overroundPercent": 4.7533
},
"spread": {
"sides": [
{
"side": "home",
"teamId": 156,
"competitorId": null,
"playerId": null,
"odds": -110,
"decimalOdds": 1.9091,
"line": -3.5,
"impliedProbability": 0.52381,
"noVigProbability": 0.5,
"ticketPercent": 46,
"moneyPercent": 35,
"sharpGap": -11,
"marketId": "21790021",
"outcomeId": "2669500866"
}
],
"holdPercent": 4.5455,
"overroundPercent": 4.7619
}
},
"teamTotals": [
{
"teamId": 129,
"sides": [
{
"side": "under",
"teamId": 129,
"competitorId": null,
"playerId": null,
"odds": -112,
"decimalOdds": 1.8929,
"line": 20.5,
"impliedProbability": 0.528302,
"noVigProbability": 0.502135,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "21790040",
"outcomeId": "2849916707"
}
],
"holdPercent": 4.953,
"overroundPercent": 5.2111
}
],
"bestPrices": {
"total": [
{
"side": "over",
"teamId": null,
"odds": -108,
"decimalOdds": 1.9259,
"line": 44.5,
"bookId": 68,
"bookName": "DK NJ",
"competitorId": null,
"playerId": null,
"impliedProbability": 0.519231,
"marketId": "21790022",
"outcomeId": "2670489214",
"bookParentId": null,
"deeplinkId": "ML2670489214"
}
],
"moneyline": [
{
"side": "home",
"teamId": 156,
"odds": -170,
"decimalOdds": 1.5882,
"line": 0,
"bookId": 68,
"bookName": "DK NJ",
"competitorId": null,
"playerId": null,
"impliedProbability": 0.62963,
"marketId": "21790020",
"outcomeId": "2670489207",
"bookParentId": null,
"deeplinkId": "ML2670489207"
}
],
"spread": [
{
"side": "home",
"teamId": 156,
"odds": -100,
"decimalOdds": 2.0,
"line": -3.5,
"bookId": 69,
"bookName": "FanDuel NJ",
"competitorId": null,
"playerId": null,
"impliedProbability": 0.5,
"marketId": "21790021",
"outcomeId": "2669500983",
"bookParentId": null,
"deeplinkId": "ML2669500983"
}
]
},
"lineMovement": {
"moneyline": [
{
"side": "home",
"teamId": 156,
"competitorId": null,
"playerId": null,
"openingLine": 0,
"currentLine": 0,
"lineDelta": 0,
"openingOdds": -210,
"currentOdds": -175,
"oddsDelta": 35
}
],
"spread": [
{
"side": "home",
"teamId": 156,
"competitorId": null,
"playerId": null,
"openingLine": -4.5,
"currentLine": -3.5,
"lineDelta": 1.0,
"openingOdds": -107,
"currentOdds": -110,
"oddsDelta": -3
}
],
"total": [
{
"side": "under",
"teamId": null,
"competitorId": null,
"playerId": null,
"openingLine": 45.5,
"currentLine": 44.5,
"lineDelta": -1.0,
"openingOdds": -115,
"currentOdds": -112,
"oddsDelta": 3
}
]
},
"booksPricing": [
{
"bookId": 15,
"bookName": "Consensus",
"market": "core_bet_type_6_team_score",
"period": "event",
"side": "under",
"teamId": 129,
"competitorId": null,
"playerId": null,
"opposingCompetitorIds": null,
"odds": -112,
"decimalOdds": 1.8929,
"line": 20.5,
"impliedProbability": 0.528302,
"isLive": false,
"lineStatus": "normal",
"isAlternate": null,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "21790040",
"outcomeId": "2849916707",
"deeplinkId": null,
"bookParentId": null,
"optionTypeId": 2,
"propTypeId": 166,
"oddsCoefficientScore": null,
"eventId": 290843,
"eventType": "game"
},
{
"bookId": 15,
"bookName": "Consensus",
"market": "core_bet_type_6_team_score",
"period": "event",
"side": "under",
"teamId": 156,
"competitorId": null,
"playerId": null,
"opposingCompetitorIds": null,
"odds": 105,
"decimalOdds": 2.05,
"line": 23.5,
"impliedProbability": 0.487805,
"isLive": false,
"lineStatus": "normal",
"isAlternate": null,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "21790042",
"outcomeId": "2849916711",
"deeplinkId": null,
"bookParentId": null,
"optionTypeId": 2,
"propTypeId": 166,
"oddsCoefficientScore": null,
"eventId": 290843,
"eventType": "game"
}
],
"result": {
"winner": "home",
"againstTheSpread": "away",
"overUnder": "under",
"spreadMargin": -0.5,
"totalLine": 44.5,
"totalPoints": 23
},
"ranks": null,
"lastPlay": {
"text": "End Game",
"type": "game_over",
"clock": "0:00",
"isRedzone": false,
"possession": 156,
"homeWinPct": null,
"overWinPct": null,
"homeSpreadWinPct": null
},
"players": [
{
"playerId": 7047,
"name": "Greg Van Roten",
"lastName": "Van Roten",
"abbreviation": "G.Van Roten",
"jersey": "70",
"position": "OL",
"primaryPosition": "OL",
"teamId": 129,
"image": "https://assets.actionnetwork.com/200x200/a1c3e0a9f8fc484696450eec6043f60d.png",
"handedness": null
}
],
"playerStats": {
"away": [
{
"punts": {
"srId": "sr:player:1221966",
"yards": 177,
"blocked": 0,
"longest": 46,
"attempts": 4,
"avgYards": 44.25,
"hangTime": 0,
"inside20": 3,
"netYards": 168,
"touchbacks": 0,
"returnYards": 9,
"avgHangTime": 0,
"avgNetYards": 42
},
"playerId": 111934,
"playerName": "Mitch Wishnowsky"
},
{
"defense": {
"sacks": 0,
"srId": "sr:player:1235506",
"tloss": 0,
"assists": 1,
"blitzes": 0,
"hurries": 0,
"qbHits": 0,
"tackles": 3,
"combined": 4,
"safeties": 0,
"defComps": 0,
"spBlocks": 0,
"knockdowns": 0,
"sackYards": 0,
"spAssists": 0,
"spTackles": 0,
"defTargets": 0,
"tlossYards": 0,
"miscAssists": 0,
"miscTackles": 0,
"battedPasses": 0,
"interceptions": 0,
"forcedFumbles": 0,
"missedTackles": 0,
"passesDefended": 0,
"fumbleRecoveries": 0,
"spForcedFumbles": 0,
"miscForcedFumbles": 0,
"spFumbleRecoveries": 0,
"miscFumbleRecoveries": 0,
"spOppFumbleRecoveries": 0,
"spOwnFumbleRecoveries": 0
},
"playerId": 195122,
"puntReturns": {
"srId": "sr:player:1235506",
"yards": 0,
"number": 0,
"avgYards": 0,
"touchdowns": 0,
"faircatches": 3
},
"playerName": "Marcus Jones"
},
{
"defense": {
"sacks": 0,
"srId": "sr:player:1859410",
"tloss": 0,
"assists": 0,
"blitzes": 0,
"hurries": 0,
"qbHits": 0,
"tackles": 0,
"combined": 0,
"safeties": 0,
"defComps": 0,
"spBlocks": 0,
"knockdowns": 0,
"sackYards": 0,
"spAssists": 0,
"spTackles": 0,
"defTargets": 0,
"tlossYards": 0,
"miscAssists": 0,
"miscTackles": 1,
"battedPasses": 0,
"interceptions": 0,
"forcedFumbles": 0,
"missedTackles": 0,
"passesDefended": 0,
"fumbleRecoveries": 0,
"spForcedFumbles": 0,
"miscForcedFumbles": 0,
"spFumbleRecoveries": 0,
"miscFumbleRecoveries": 0,
"spOppFumbleRecoveries": 0,
"spOwnFumbleRecoveries": 0
},
"playerId": 242048,
"receiving": {
"srId": "sr:player:1859410",
"yards": 20,
"longest": 8,
"targets": 7,
"airYards": -1,
"avgYards": 4,
"receptions": 5,
"touchdowns": 0,
"firstDowns": 2,
"brokenTackles": 0,
"droppedPasses": 0,
"redzoneTargets": 0,
"catchablePasses": 0,
"yardsAfterCatch": 21,
"yardsAfterContact": 0
},
"playerName": "DeMario Douglas"
},
{
"passing": {
"sacks": 3,
"srId": "sr:player:2166974",
"yards": 178,
"rating": 54.9,
"spikes": 0,
"blitzes": 0,
"cmpPct": 69.697,
"hurries": 0,
"longest": 19,
"attempts": 33,
"airYards": 67,
"avgYards": 5.394,
"knockdowns": 0,
"sackYards": 10,
"touchdowns": 1,
"completions": 23,
"firstDowns": 9,
"pocketTime": 0,
"poorThrows": 0,
"throwAways": 0,
"battedPasses": 0,
"interceptions": 3,
"droppedPasses": 0,
"intTouchdowns": 0,
"avgPocketTime": 0,
"defendedPasses": 0,
"onTargetThrows": 0,
"redzoneAttempts": 2,
"longestTouchdown": 2
},
"rushing": {
"srId": "sr:player:2166974",
"tlost": 0,
"yards": 47,
"longest": 16,
"attempts": 7,
"avgYards": 6.714,
"scrambles": 6,
"touchdowns": 0,
"firstDowns": 5,
"kneelDowns": 0,
"tlostYards": 0,
"brokenTackles": 0,
"redzoneAttempts": 0,
"yardsAfterContact": 0
},
"playerId": 277040,
"playerName": "Drake Maye"
},
{
"playerId": 305047,
"kickReturns": {
"srId": "sr:player:2077821",
"yards": 58,
"number": 2,
"longest": 29,
"avgYards": 29,
"touchdowns": 0,
"faircatches": 0
},
"playerName": "Kyle Williams"
},
{
"kickoffs": {
"srId": "sr:player:2158118",
"yards": 192,
"number": 3,
"endzone": 1,
"inside20": 0,
"touchbacks": 0,
"squibKicks": 0,
"returnYards": 80,
"outOfBounds": 0,
"totalEndzone": 1,
"onsideAttempts": 0,
"onsideSuccesses": 0
},
"playerId": 305181,
"fieldGoals": {
"pct": 100,
"made": 1,
"srId": "sr:player:2158118",
"yards": 50,
"missed": 0,
"blocked": 0,
"longest": 50,
"made19": 0,
"made29": 0,
"made39": 0,
"made49": 0,
"made50": 1,
"attempts": 1,
"avgYards": 50,
"attempts19": 0,
"attempts29": 0,
"attempts39": 0,
"attempts49": 0,
"attempts50": 1
},
"extraPoints": {
"kicks": {
"pct": 100,
"made": 1,
"srId": "sr:player:2158118",
"missed": 0,
"blocked": 0,
"attempts": 1
}
},
"playerName": "Andy Borregales"
},
{
"playerId": 334028,
"receiving": {
"srId": "sr:player:2300709",
"yards": 2,
"longest": 2,
"targets": 1,
"airYards": 2,
"avgYards": 2,
"receptions": 1,
"touchdowns": 1,
"firstDowns": 1,
"brokenTackles": 0,
"droppedPasses": 0,
"redzoneTargets": 1,
"catchablePasses": 0,
"longestTouchdown": 2,
"yardsAfterCatch": 0,
"yardsAfterContact": 0
},
"playerName": "Eli Raridon"
}
],
"home": [
{
"defense": {
"sacks": 0,
"srId": "sr:player:1195944",
"tloss": 2,
"assists": 2,
"blitzes": 0,
"hurries": 0,
"qbHits": 0,
"tackles": 4,
"combined": 6,
"safeties": 0,
"defComps": 0,
"spBlocks": 0,
"knockdowns": 0,
"sackYards": 0,
"spAssists": 0,
"spTackles": 0,
"defTargets": 0,
"tlossYards": 3,
"miscAssists": 0,
"miscTackles": 0,
"battedPasses": 0,
"interceptions": 1,
"forcedFumbles": 0,
"missedTackles": 0,
"passesDefended": 1,
"fumbleRecoveries": 0,
"spForcedFumbles": 0,
"miscForcedFumbles": 0,
"spFumbleRecoveries": 0,
"miscFumbleRecoveries": 0,
"spOppFumbleRecoveries": 0,
"spOwnFumbleRecoveries": 0
},
"playerId": 111889,
"intReturns": {
"srId": "sr:player:1195944",
"yards": 0,
"number": 1,
"longest": 0,
"avgYards": 0,
"touchdowns": 0
},
"playerName": "Julian Love"
},
{
"playerId": 195610,
"receiving": {
"srId": "sr:player:1239774",
"yards": 4,
"longest": 4,
"targets": 3,
"airYards": 2,
"avgYards": 4,
"receptions": 1,
"touchdowns": 0,
"firstDowns": 0,
"brokenTackles": 0,
"droppedPasses": 0,
"redzoneTargets": 0,
"catchablePasses": 0,
"yardsAfterCatch": 2,
"yardsAfterContact": 0
},
"kickReturns": {
"srId": "sr:player:1239774",
"yards": 80,
"number": 3,
"longest": 30,
"avgYards": 26.667,
"touchdowns": 0,
"faircatches": 0
},
"puntReturns": {
"srId": "sr:player:1239774",
"yards": 9,
"number": 1,
"longest": 9,
"avgYards": 9,
"touchdowns": 0,
"faircatches": 3
},
"playerName": "Rashid Shaheed"
}
]
},
"playerSeasonStats": null,
"lineups": null,
"plays": [
{
"id": "31978900-acc7-11f1-9e5e-e95b96a5fc90",
"type": "game_over",
"period": 4,
"clock": "0:00",
"possession": 156,
"down": 1,
"distance": 10,
"resultDown": 2,
"resultDistance": 11,
"yardline": 20,
"yardlineText": "SEA 20",
"yardsToEndzone": 80,
"resultYardline": 19,
"resultYardlineText": "SEA 19",
"resultYardsToEndzone": 81,
"redzone": false,
"scoring": false,
"homePoints": 13,
"awayPoints": 10,
"text": "End Game",
"description": "",
"homeWinPct": 1,
"overWinPct": 0,
"homeSpreadWinPct": 0,
"situationDisplay": "1st & 10 @ SEA 20"
}
],
"officials": null,
"venue": {
"id": 342,
"name": "Lumen Field",
"city": "Seattle, WA",
"state": "WA",
"surface": "grass",
"roofType": "outdoor",
"directionDegrees": 180,
"imageUrl": "https://images.actionnetwork.com/blog/2019/08/SEA.jpg",
"neutralSite": false
},
"weather": null,
"teamStats": {
"away": {
"summary": {
"fumbles": 0,
"avgGain": 4.1,
"penalties": 7,
"turnovers": 3,
"playCount": 67,
"rushPlays": 31,
"totalYards": 277,
"lostFumbles": 0,
"penaltyYards": 50,
"possessionTime": "34:17"
},
"punts": {
"attempts": 4,
"avgYards": 44.25
},
"passing": {
"yards": 178,
"cmpPct": 69.697,
"attempts": 33,
"avgYards": 4.667,
"netYards": 168,
"touchdowns": 1,
"completions": 23,
"interceptions": 3,
"sacks": 3,
"sackYards": 10
},
"fieldGoals": {
"made": 1,
"attempts": 1
},
"rushing": {
"yards": 109,
"attempts": 31,
"avgYards": 3.516,
"touchdowns": 0
},
"efficiency": {
"redzone": {
"pct": 50,
"attempts": 2,
"successes": 1
},
"thirddown": {
"pct": 31.25,
"attempts": 16,
"successes": 5
},
"fourthdown": {
"pct": 100,
"attempts": 2,
"successes": 2
}
},
"firstDowns": {
"pass": 9,
"rush": 7,
"total": 19,
"penalty": 3
}
},
"home": {
"summary": {
"fumbles": 0,
"avgGain": 5.9,
"penalties": 10,
"turnovers": 0,
"playCount": 48,
"rushPlays": 22,
"totalYards": 285,
"lostFumbles": 0,
"penaltyYards": 98,
"possessionTime": "25:43"
},
"punts": {
"attempts": 5,
"avgYards": 45.4
},
"passing": {
"yards": 200,
"cmpPct": 70.833,
"attempts": 24,
"avgYards": 7.231,
"netYards": 188,
"touchdowns": 1,
"completions": 17,
"interceptions": 0,
"sacks": 2,
"sackYards": 12
},
"fieldGoals": {
"made": 2,
"attempts": 2
},
"rushing": {
"yards": 97,
"attempts": 22,
"avgYards": 4.409,
"touchdowns": 0
},
"efficiency": {
"redzone": {
"pct": 0,
"attempts": 2,
"successes": 0
},
"thirddown": {
"pct": 18.182,
"attempts": 11,
"successes": 2
},
"fourthdown": {
"pct": 100,
"attempts": 1,
"successes": 1
}
},
"firstDowns": {
"pass": 9,
"rush": 4,
"total": 13,
"penalty": 0
}
}
},
"gameMetadataTitle": null,
"meta": null,
"leagueInfo": {
"league": {
"id": 1,
"sport": "football",
"name": "nfl",
"description": "National Football League",
"logo": "https://static.sprtactn.co/leagues/500/nfl.png",
"currentSeason": "2026",
"currentSeasonType": "reg",
"preSeasonStart": "2026-07-30T07:00:00.000Z",
"preSeasonEnd": "2026-09-02T06:59:59.000Z",
"regSeasonStart": "2026-08-30T07:00:00.000Z",
"regSeasonEnd": "2027-01-18T07:59:59.000Z",
"postSeasonStart": "2027-01-12T08:00:00.000Z",
"postSeasonEnd": "2027-03-11T07:59:59.000Z",
"blacklistDates": [
"2025-05-27T07:00:00.000Z"
],
"calendarInfo": {
"pre": [
{
"abbr": "HoF",
"week": 0,
"label": "Hall of Fame Weekend",
"endDate": "2026-08-07T21:59Z",
"startDate": "2026-07-27T01:00Z"
}
],
"reg": [
{
"abbr": "Week 1",
"week": 1,
"label": "Week 1",
"endDate": "2026-09-15T04:59Z",
"startDate": "2026-08-29T02:00Z"
}
],
"post": [
{
"abbr": "Wild Card",
"week": 1,
"label": "Wild Card",
"endDate": "2027-01-19T04:59Z",
"startDate": "2027-01-11T05:00Z"
}
]
},
"currentWeek": 1,
"updatedAt": "2026-08-30T16:25:20.339Z",
"isActive": true,
"conferences": [
{
"id": "AFC",
"display": "AFC"
}
],
"divisions": [
{
"id": "EAST",
"display": "East",
"conferenceId": "AFC"
}
]
},
"contentLiveCount": 0
},
"expertPicks": [
{
"expertId": 192808,
"name": "Doug Ziefel",
"username": "Dziefel7",
"profileUrl": "https://www.actionnetwork.com/u/Dziefel7",
"isVerified": false,
"followers": 2926,
"pictureUrl": "https://s3.amazonaws.com/tan-user-assets/profile_images/192808/1770134362060-2ee0fa7424f04b648e6a8f80923649ee.jpg",
"bio": "Editor at Action Network and CFB,CBB,MLB, and College ⚾️ Contributor",
"isExpert": true,
"isInternalExpert": true,
"activePicks": 16,
"winStreak": {
"type": "cold",
"value": 2,
"startDate": "2026-09-12T07:00:00+00:00"
},
"record": {
"window": "last_month",
"wins": 43,
"losses": 61,
"pushes": 0,
"unitsNet": 0.0693999999999999,
"roi": 0.15,
"count": 104
},
"picks": [
{
"pickId": 552643074,
"play": "NE +3.5",
"market": "spread_away",
"period": "game",
"line": 3.5,
"odds": -105,
"units": 0.53,
"unitsNet": 0.5048,
"teamId": 129,
"playerId": null,
"bookId": 4620,
"bookName": "theScore Bet NJ",
"result": "win",
"isVerified": true,
"createdAt": "2026-08-17T13:19:18.165Z",
"settledAt": "2026-09-10T03:25:55.916Z",
"updatedAt": "2026-09-10T12:10:01.708Z",
"status": "settled",
"startsAt": "2026-09-10T00:20:00.000Z",
"endsAt": "2026-09-10T06:59:59.999Z",
"recordDate": "2026-09-09T07:00:00.000Z",
"isLive": false,
"money": 53,
"moneyNet": 50.4762,
"unitsType": "unit",
"actualValue": null,
"currentProjection": null,
"customPickName": null,
"customPickType": null,
"customPickRules": null,
"tag": null,
"image": null,
"playerImage": null,
"marketId": "21790021",
"outcomeId": "2670793363",
"gameId": 290843,
"competitionId": null,
"competitorId": null,
"leagueId": 1,
"leagueName": "nfl",
"groupPickId": null,
"playerPropProjectionId": null,
"userId": 192808,
"gameTitle": null,
"meta": {
"leagueName": "nfl",
"marketLineId": 2670793363,
"isAltMarket": false
},
"playerName": null
},
{
"pickId": 554897813,
"play": "R.Stevenson First Touchdown Scorer Yes",
"market": "custom",
"period": "game",
"line": 0,
"odds": 900,
"units": 0.1,
"unitsNet": -0.1,
"teamId": null,
"playerId": 166374,
"bookId": 69,
"bookName": "FanDuel NJ",
"result": "loss",
"isVerified": true,
"createdAt": "2026-09-10T00:02:50.851Z",
"settledAt": "2026-09-10T03:25:55.916Z",
"updatedAt": "2026-09-10T12:10:01.708Z",
"status": "settled",
"startsAt": "2026-09-10T00:20:00.000Z",
"endsAt": "2026-09-10T06:59:59.999Z",
"recordDate": "2026-09-09T07:00:00.000Z",
"isLive": false,
"money": 1,
"moneyNet": -1,
"unitsType": "unit",
"actualValue": "E.Raridon -",
"currentProjection": null,
"customPickName": "First Touchdown Scorer",
"customPickType": "core_bet_type_56_first_touchdown_scorer",
"customPickRules": {
"options": {
"1": {
"sortOrder": 1,
"optionType": "Yes",
"abbreviation": null
}
},
"betType": "moneyline",
"fullName": "First Touchdown Scorer",
"sortOrder": {
"nfl": 7,
"ncaaf": 5
},
"gradingRule": "firstTDScorer",
"displayTemplate": "{player_full_name} 1st TD {money}"
},
"tag": null,
"image": null,
"playerImage": null,
"marketId": "23014117",
"outcomeId": "2752070702",
"gameId": 290843,
"competitionId": null,
"competitorId": null,
"leagueId": 1,
"leagueName": "nfl",
"groupPickId": null,
"playerPropProjectionId": null,
"userId": 192808,
"gameTitle": null,
"meta": {
"note": "Boost used",
"leagueName": "nfl",
"isAltMarket": false,
"optionTypeId": 1
},
"playerName": "Rhamondre Stevenson"
},
{
"pickId": 554413535,
"play": "J.Price u1.5 Recs",
"market": "custom",
"period": "game",
"line": 1.5,
"odds": -115,
"units": 0.57,
"unitsNet": -0.57,
"teamId": null,
"playerId": 333961,
"bookId": 2724,
"bookName": "HardRock NJ",
"result": "loss",
"isVerified": true,
"createdAt": "2026-09-05T20:55:59.517Z",
"settledAt": "2026-09-10T03:25:55.916Z",
"updatedAt": "2026-09-10T12:10:01.708Z",
"status": "settled",
"startsAt": "2026-09-10T00:20:00.000Z",
"endsAt": "2026-09-10T06:59:59.999Z",
"recordDate": "2026-09-09T07:00:00.000Z",
"isLive": false,
"money": 5.7,
"moneyNet": -5.7,
"unitsType": "unit",
"actualValue": "2",
"currentProjection": "2",
"customPickName": "Recs",
"customPickType": "core_bet_type_15_receptions",
"customPickRules": {
"options": {
"18": {
"sortOrder": 1,
"optionType": "Over",
"abbreviation": "o"
}
},
"betType": "total",
"statKey": [
"receiving.receptions"
],
"fullName": "Receptions",
"sortOrder": {
"nfl": 5,
"ncaaf": 3
},
"propellerConfig": {
"range": 15,
"enabled": true
}
},
"tag": null,
"image": null,
"playerImage": null,
"marketId": "24937560",
"outcomeId": "2919355268",
"gameId": 290843,
"competitionId": null,
"competitorId": null,
"leagueId": 1,
"leagueName": "nfl",
"groupPickId": null,
"playerPropProjectionId": 138252561,
"userId": 192808,
"gameTitle": null,
"meta": {
"leagueName": "nfl",
"isAltMarket": false,
"optionTypeId": 19,
"originalPickId": 554410634
},
"playerName": "Jadarian Price"
}
]
},
{
"expertId": 2108497,
"name": "Dale Tanhardt",
"username": "daletanhardt",
"profileUrl": "https://www.actionnetwork.com/u/daletanhardt",
"isVerified": false,
"followers": 10052,
"pictureUrl": "https://s3.amazonaws.com/tan-user-assets/profile_images/2108497/1644070326041-99330090868d11ecb14f8ddaad65961a.jpg",
"bio": "Greatest NASCAR Bettor in the History of the Universe. Host of DALESCENTER on YouTube. Degenerate NASCAR Guy. Check me out on DubClub to see all of my NASCAR Betting Cards.",
"isExpert": true,
"isInternalExpert": false,
"activePicks": 0,
"winStreak": {
"type": "cold",
"value": 6,
"startDate": "2026-06-14T07:00:00+00:00"
},
"record": {
"window": "last_month",
"wins": 0,
"losses": 10,
"pushes": 0,
"unitsNet": -6.8,
"roi": -100,
"count": 10
},
"picks": [
{
"pickId": 554887407,
"play": "H.Henry 2+ TDs Yes",
"market": "custom",
"period": "game",
"line": 0,
"odds": 2700,
"units": 0.2,
"unitsNet": -0.2,
"teamId": null,
"playerId": 5794,
"bookId": 15,
"bookName": "Consensus",
"result": "loss",
"isVerified": true,
"createdAt": "2026-09-09T23:24:36.116Z",
"settledAt": "2026-09-10T03:25:56.128Z",
"updatedAt": "2026-09-10T03:26:32.217Z",
"status": "settled",
"startsAt": "2026-09-10T00:20:00.000Z",
"endsAt": "2026-09-10T06:59:59.999Z",
"recordDate": "2026-09-09T07:00:00.000Z",
"isLive": false,
"money": 10,
"moneyNet": -10,
"unitsType": "unit",
"actualValue": 0,
"currentProjection": null,
"customPickName": "TDs",
"customPickType": "core_bet_type_67_to_score_2_or_more_touchdowns",
"customPickRules": {
"options": {
"1": {
"sortOrder": 1,
"optionType": "Yes",
"abbreviation": null
}
},
"betType": "moneyline",
"fullName": "To Score 2 or More Touchdowns",
"sortOrder": {
"nfl": 20,
"ncaaf": 20
},
"gradingRule": "twoOrMoreTouchdowns",
"playerPropProjectionConfig": {
"type": "actual_value",
"enabled": true,
"displayStatKey": "TD"
}
},
"tag": null,
"image": null,
"playerImage": null,
"marketId": "23014118",
"outcomeId": "2752070727",
"gameId": 290843,
"competitionId": null,
"competitorId": null,
"leagueId": 1,
"leagueName": "nfl",
"groupPickId": null,
"playerPropProjectionId": null,
"userId": 2108497,
"gameTitle": null,
"meta": {
"leagueName": "nfl",
"isAltMarket": false,
"optionTypeId": 1
},
"playerName": "Hunter Henry"
}
]
},
{
"expertId": 3565328,
"name": "julian saavedra",
"username": "theparlayplug",
"profileUrl": "https://www.actionnetwork.com/u/theparlayplug",
"isVerified": false,
"followers": 3906,
"pictureUrl": "https://s3.amazonaws.com/tan-user-assets/profile_images/3565328/1722565447266-4b5f1420507611efb2e60bd2be1518ec.jpg",
"bio": "🔌 | Winners | Partnership➡@SleeperPicksHq @UnderdogFantasy @ChalkboardHq use code: PLUG",
"isExpert": true,
"isInternalExpert": false,
"activePicks": 0,
"winStreak": {
"type": "cold",
"value": 2,
"startDate": "2026-09-09T07:00:00+00:00"
},
"record": {
"window": "last_month",
"wins": 0,
"losses": 1,
"pushes": 0,
"unitsNet": -1,
"roi": -100,
"count": 1
},
"picks": [
{
"pickId": 554922201,
"play": "NE -110",
"market": "ml_away",
"period": "game",
"line": -110,
"odds": -110,
"units": 1,
"unitsNet": -1,
"teamId": 129,
"playerId": null,
"bookId": 79,
"bookName": "bet365 NJ",
"result": "loss",
"isVerified": true,
"createdAt": "2026-09-10T03:25:48.076Z",
"settledAt": "2026-09-10T03:25:43.761Z",
"updatedAt": "2026-09-10T03:25:48.456Z",
"status": "settled",
"startsAt": "2026-09-10T00:20:00.000Z",
"endsAt": "2026-09-10T06:59:59.999Z",
"recordDate": "2026-09-09T07:00:00.000Z",
"isLive": false,
"money": 1000,
"moneyNet": -1000,
"unitsType": "unit",
"actualValue": null,
"currentProjection": null,
"customPickName": null,
"customPickType": null,
"customPickRules": null,
"tag": null,
"image": null,
"playerImage": null,
"marketId": null,
"outcomeId": null,
"gameId": 290843,
"competitionId": null,
"competitorId": null,
"leagueId": 1,
"leagueName": "nfl",
"groupPickId": null,
"playerPropProjectionId": null,
"userId": 3565328,
"gameTitle": null,
"meta": {
"tease": 0,
"bookId": 79,
"chances": 0,
"isSynced": true,
"datePlaced": "2026-09-10T00:43:18.128",
"isSupported": true,
"referenceId": "79:3565328:900743015218835280_1"
},
"playerName": null
}
]
},
{
"expertId": 4377546,
"name": "Charlie DiSturco",
"username": "charliedisturco",
"profileUrl": "https://www.actionnetwork.com/u/charliedisturco",
"isVerified": false,
"followers": 1098,
"pictureUrl": "https://s3.amazonaws.com/tan-user-assets/profile_images/4377546/1780604139713-9e34c5fa7246460db4f347132cdc7462.jpg",
"bio": "Just a Jersey Italian that loves to gamble.",
"isExpert": true,
"isInternalExpert": false,
"activePicks": 1,
"winStreak": {
"type": "hot",
"value": 4,
"startDate": "2026-09-10T07:00:00+00:00"
},
"record": {
"window": "last_month",
"wins": 7,
"losses": 19,
"pushes": 0,
"unitsNet": 0.5225000000000002,
"roi": 4.22,
"count": 26
},
"picks": [
{
"pickId": 554835150,
"play": "K.Williams Anytime TD Scorer Yes",
"market": "custom",
"period": "game",
"line": 0,
"odds": 1300,
"units": 0.25,
"unitsNet": 0,
"teamId": null,
"playerId": 305047,
"bookId": 1006,
"bookName": "FanDuel NY",
"result": "loss",
"isVerified": true,
"createdAt": "2026-09-09T18:25:10.925Z",
"settledAt": "2026-09-10T03:25:55.668Z",
"updatedAt": "2026-09-10T14:41:36.904Z",
"status": "settled",
"startsAt": "2026-09-10T00:20:00.000Z",
"endsAt": "2026-09-10T06:59:59.999Z",
"recordDate": "2026-09-09T07:00:00.000Z",
"isLive": false,
"money": 0.25,
"moneyNet": 0,
"unitsType": "unit",
"actualValue": 0,
"currentProjection": null,
"customPickName": "TDs",
"customPickType": "core_bet_type_62_anytime_touchdown_scorer",
"customPickRules": {
"options": {
"1": {
"sortOrder": 1,
"optionType": "Yes",
"abbreviation": null
}
},
"betType": "moneyline",
"fullName": "Anytime Touchdown Scorer",
"sortOrder": {
"nfl": 1,
"ncaaf": 4
},
"gradingRule": "anytimeTDScorer",
"displayTemplate": "{player_full_name} Anytime TD {money}"
},
"tag": null,
"image": null,
"playerImage": null,
"marketId": "21804695",
"outcomeId": "2670531830",
"gameId": 290843,
"competitionId": null,
"competitorId": null,
"leagueId": 1,
"leagueName": "nfl",
"groupPickId": null,
"playerPropProjectionId": null,
"userId": 4377546,
"gameTitle": null,
"meta": {
"note": "Using this as my free bet. FanDuel offering bonus for 1+ pt. Rolling the dice with it here on Kyle w/ SEA safeties banged up",
"isFree": true,
"leagueName": "nfl",
"isAltMarket": false,
"optionTypeId": 1
},
"playerName": "Kyle Williams"
},
{
"pickId": 554777038,
"play": "H.Henry o33.5 Rec Yds",
"market": "custom",
"period": "game",
"line": 33.5,
"odds": -113,
"units": 1.13,
"unitsNet": -1.13,
"teamId": null,
"playerId": 5794,
"bookId": 1006,
"bookName": "FanDuel NY",
"result": "loss",
"isVerified": true,
"createdAt": "2026-09-09T05:01:42.927Z",
"settledAt": "2026-09-10T03:25:55.668Z",
"updatedAt": "2026-09-10T14:41:36.904Z",
"status": "settled",
"startsAt": "2026-09-10T00:20:00.000Z",
"endsAt": "2026-09-10T06:59:59.999Z",
"recordDate": "2026-09-09T07:00:00.000Z",
"isLive": false,
"money": 1.13,
"moneyNet": -1.13,
"unitsType": "unit",
"actualValue": "26",
"currentProjection": "26",
"customPickName": "Rec Yds",
"customPickType": "core_bet_type_16_receiving_yards",
"customPickRules": {
"options": {
"20": {
"sortOrder": 1,
"optionType": "Over",
"abbreviation": "o"
}
},
"betType": "total",
"statKey": [
"receiving.yards"
],
"fullName": "Receiving Yards",
"sortOrder": {
"nfl": 3,
"ncaaf": 1
},
"propellerConfig": {
"range": 45,
"enabled": true
}
},
"tag": "#Tailing",
"image": null,
"playerImage": null,
"marketId": "22223928",
"outcomeId": "2751994592",
"gameId": 290843,
"competitionId": null,
"competitorId": null,
"leagueId": 1,
"leagueName": "nfl",
"groupPickId": null,
"playerPropProjectionId": 138252574,
"userId": 4377546,
"gameTitle": null,
"meta": {
"note": "#Tailing @Stuckey2",
"leagueName": "nfl",
"isAltMarket": false,
"userMentions": [
{
"id": 49763,
"username": "Stuckey2"
}
],
"optionTypeId": 20
},
"playerName": "Hunter Henry"
}
]
}
],
"lineMovementHistory": [
{
"bookId": 15,
"bookName": "Consensus",
"market": "core_bet_type_6_team_score",
"period": "event",
"side": "under",
"teamId": 129,
"competitorId": null,
"playerId": null,
"currentOdds": -112,
"currentDecimalOdds": 1.8929,
"currentLine": 20.5,
"currentImpliedProbability": 0.528302,
"currentLineStatus": "normal",
"isLive": false,
"ticketPercent": 0,
"moneyPercent": 0,
"sharpGap": 0,
"marketId": "21790040",
"outcomeId": "2849916707",
"deeplinkId": null,
"optionTypeId": 2,
"propTypeId": 166,
"oddsCoefficientScore": null,
"eventId": 290843,
"eventType": "game",
"history": [
{
"odds": -115,
"line": 20.5,
"recordedAt": "2026-08-20T00:26:25.114633Z",
"lineStatus": "opener"
},
{
"odds": -115,
"line": 20.5,
"recordedAt": "2026-08-20T00:28:25.114451Z",
"lineStatus": "normal"
}
]
}
],
"props": {
"gameId": 290843,
"playerProps": [
{
"marketId": "25116884",
"propType": "core_bet_type_530_1104_player_receiving_yards_milestones_20_or_more",
"propName": "20+ Receiving Yards",
"lineType": null,
"period": "firsthalf",
"customPickTypeName": "20+ Receiving Yards",
"customPickTypeDisplayName": "H.Henry {optionTypeAbbr}{value} 20+ Receiving Yards",
"eventType": "game",
"teamId": 129,
"playerId": 5794,
"playerAbbreviation": "H.Henry",
"playerLastName": "Henry",
"selections": [
{
"bookId": 15,
"bookName": "Consensus",
"playerId": 5794,
"player": {
"playerId": 5794,
"name": "Hunter Henry",
"abbreviation": "H.Henry",
"teamId": 129,
"position": "NE - TE",
"image": "https://assets.actionnetwork.com/200x200/97f6b7c2b951446b909af12b0f231dac.png",
"lastName": "Henry",
"actualValues": null
},
"side": "noside",
"teamId": null,
"competitorId": null,
"opposingCompetitorIds": null,
"odds": -310,
"decimalOdds": 1.3226,
"line": 20,
"impliedProbability": 0.756098,
"isLive": false,
"lineStatus": "normal",
"isAlternate": null,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "23012590",
"outcomeId": "2751994640",
"deeplinkId": null,
"bookParentId": null,
"optionTypeId": 1,
"propTypeId": 298,
"oddsCoefficientScore": null,
"eventId": 290843,
"eventType": "game",
"period": "event"
}
]
}
],
"gameProps": [
{
"marketId": "21790043",
"propType": "core_bet_type_6_team_score",
"propName": "Team Total",
"lineType": "total",
"period": "firsthalf",
"customPickTypeName": "Team Total",
"customPickTypeDisplayName": "{optionTypeAbbr}{value} Team Total",
"eventType": "game",
"teamId": null,
"playerId": null,
"playerAbbreviation": null,
"playerLastName": null,
"selections": [
{
"bookId": 15,
"bookName": "Consensus",
"playerId": null,
"player": null,
"side": "under",
"teamId": 129,
"competitorId": null,
"opposingCompetitorIds": null,
"odds": -109,
"decimalOdds": 1.9174,
"line": 9,
"impliedProbability": 0.521531,
"isLive": false,
"lineStatus": "normal",
"isAlternate": null,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "21790043",
"outcomeId": "2849916720",
"deeplinkId": null,
"bookParentId": null,
"optionTypeId": 2,
"propTypeId": 166,
"oddsCoefficientScore": null,
"eventId": 290843,
"eventType": "game",
"period": "firsthalf"
}
]
}
],
"propOrder": [
{
"propOrderId": 2002,
"propType": "core_bet_type_62_anytime_touchdown_scorer",
"name": "Anytime TD Scorer",
"sortOrder": 1
}
],
"marketRules": {
"coreBetType5241036PlayerPassingTouchdownsMilestones3OrMore": {
"type": "core_bet_type_524_1036_player_passing_touchdowns_milestones_3_or_more",
"rules": {
"options": {
"1": {
"sortOrder": 1,
"optionType": "Yes",
"abbreviation": null
}
},
"fullName": "Player Passing Touchdowns Milestones",
"milestone": {
"statKey": "passing.touchdowns",
"threshold": 3
},
"sortOrder": {
"nfl": 20,
"ncaaf": 20
},
"gradingRule": "playerStatMilestone"
},
"customPickName": "3+ Passing Touchdowns"
},
"coreBetType61CoinTossOutcome": {
"type": "core_bet_type_61_coin_toss_outcome",
"rules": {
"options": {
"339": {
"sortOrder": 1,
"optionType": "Heads",
"abbreviation": null,
"gradingRule": "heads"
}
},
"fullName": "Coin Toss Outcome",
"sortOrder": {
"nfl": 2
},
"gradingRule": "coinTossOutcome",
"scoreboardConfig": {
"dataType": "contest",
"displayType": "grid_2",
"displayTemplate": "grid_2"
}
},
"customPickName": "Coin Toss Outcome"
},
"coreBetType65Interceptions": {
"type": "core_bet_type_65_interceptions",
"rules": {
"options": {
"400": {
"sortOrder": 1,
"optionType": "Over",
"abbreviation": "o"
}
},
"betType": "total",
"statKey": [
"passing.interceptions"
],
"fullName": "Interceptions",
"sortOrder": {
"nfl": 13
},
"propellerConfig": {
"range": 5,
"enabled": true
}
},
"customPickName": "Int"
},
"coreBetType67ToScore2OrMoreTouchdowns": {
"type": "core_bet_type_67_to_score_2_or_more_touchdowns",
"rules": {
"options": {
"1": {
"sortOrder": 1,
"optionType": "Yes",
"abbreviation": null
}
},
"betType": "moneyline",
"fullName": "To Score 2 or More Touchdowns",
"sortOrder": {
"nfl": 20,
"ncaaf": 20
},
"gradingRule": "twoOrMoreTouchdowns",
"playerPropProjectionConfig": {
"type": "actual_value",
"enabled": true,
"displayStatKey": "TD"
}
},
"customPickName": "2+ TDs"
},
"coreBetType6TeamScore": {
"type": "core_bet_type_6_team_score",
"rules": {
"options": {
"1": {
"side": "over",
"sortOrder": 1,
"optionType": "Over",
"abbreviation": "o"
}
},
"betType": "total",
"sortOrder": {
"aaf": 10,
"epl": 10,
"mlb": 10,
"mls": 10,
"nba": 10,
"nfl": 10,
"nhl": 10,
"xfl": 10,
"euro": 10,
"wnba": 10,
"ncaab": 10,
"ncaaf": 10,
"europa": 10,
"laliga": 10,
"ligue1": 10,
"seriea": 10,
"worldcup": 10,
"champions": 10,
"bundesliga": 10,
"clubWorldcup": 10,
"womensWorldcup": 10,
"mensOlympicHockey": 10,
"womensOlympicHockey": 10
},
"gradingRule": "teamTotal",
"scoreboardConfig": {
"dataType": "team",
"multiplePeriods": true
}
},
"customPickName": "Team Total"
},
"coreBetType965PlayerToHaveMostPassingYards": {
"type": "core_bet_type_965_player_to_have_most_passing_yards",
"rules": {
"options": {
"1": {
"sortOrder": 1,
"optionType": "Yes",
"abbreviation": null
}
},
"betType": "moneyline",
"fullName": "Player To Have Most Passing Yards",
"sortOrder": {
"nfl": 20,
"ncaaf": 20
},
"displayTemplate": "{player_full_name} Most Passing Yards {money}",
"eventLeaderStatKeys": [
"passing.yards"
]
},
"customPickName": "Player To Have Most Passing Yards"
}
}
}
}

Baseball rows: named lineups, pitching, umpires and play-by-play

Baseball fills blocks that football leaves thin, and every player id in them carries its name:

  • final lineups, with substitutes
  • the probable, starting, winning, losing and saving pitchers, inside score.pitching
  • the umpiring crew, each with their own betting record
  • season stat lines for every player
  • plays that name the batter and the pitcher

From San Diego Padres at Colorado Rockies, a game that started at 8:40pm Eastern. Trimmed as follows:

  • lineups.{side}: 1 of 16
  • officials: 1 of 4
  • officials[].results: 1 of 3
  • officials[].results[].records: 1 of 2
  • playerSeasonStats.{side}: 1 of 18
  • plays: 1 of 97
  • plays[].pitches: 1 of 2
  • players: 1 of 31
{
"gameId": 294990,
"league": "mlb",
"lineups": {
"away": [
{
"order": 0,
"inning": 0,
"position": "P",
"suborder": 0,
"playerId": 87829,
"inningHalf": null,
"playerName": "Casey Mize"
}
],
"home": [
{
"order": 0,
"inning": 0,
"position": "P",
"suborder": 0,
"playerId": 299395,
"inningHalf": null,
"playerName": "Tomoyuki Sugano"
}
],
"awayConfirmed": true,
"homeConfirmed": true
},
"officials": [
{
"id": 61,
"position": "1B",
"fullName": "Andy Fletcher",
"lastName": "Fletcher",
"firstName": "Andy",
"results": [
{
"type": "Moneyline",
"records": [
{
"type": "Away",
"wins": 5
}
],
"units": 8.11
}
]
}
],
"playerSeasonStats": {
"away": [
{
"playerId": 2904,
"hitting": {
"ab": 538,
"ap": 621,
"abk": 4.076,
"avg": 0.221,
"bbk": 0.553,
"bip": 387,
"iso": 0.192,
"lob": 230,
"obp": 0.311,
"ops": 0.724,
"rbi": 82,
"slg": 0.413,
"xbh": 49,
"abhr": 19.926,
"bbpa": 0.118,
"gofo": 1.03,
"outs": {
"fo": 85,
"go": 141,
"lo": 41,
"po": 29,
"fidp": 2,
"gidp": 19,
"lidp": 0,
"klook": 26,
"kswing": 106,
"ktotal": 132,
"sacfly": 8,
"sachit": 1
},
"runs": {
"total": 77
},
"seca": 0.329,
"babip": 0.238,
"games": {
"play": 145,
"start": 145,
"finish": 0,
"complete": 137
},
"popup": 30,
"steal": {
"pct": 0.556,
"caught": 4,
"stolen": 5,
"pickoff": 0
},
"onbase": {
"d": 22,
"h": 119,
"s": 70,
"t": 0,
"bb": 70,
"ci": 0,
"fc": 12,
"hr": 27,
"tb": 222,
"hbp": 1,
"ibb": 3,
"roe": 6,
"rov": 0,
"cycle": 0
},
"abRisp": 124,
"flyball": 116,
"outcome": {
"ball": 877,
"foul": 456,
"iball": 0,
"klook": 376,
"kswing": 298,
"ktotal": 674,
"dirtball": 38
},
"hitRisp": 29,
"rbi2out": 29,
"teamLob": 94,
"linedrive": 104,
"groundball": 165,
"pitchCount": 2461,
"lobRisp2out": 38
},
"pitching": {},
"playerName": "Manny Machado"
},
{
"playerId": 58592,
"hitting": {},
"pitching": {
"bf": 328,
"bk": 0,
"k9": 11.157,
"wp": 2,
"era": "2.789",
"kbb": 4.17,
"lob": 153,
"oba": 0.205,
"gofo": 1.816,
"ip1": 242,
"ip2": 80.2,
"outs": {
"fo": 26,
"go": 89,
"lo": 16,
"po": 7,
"fidp": 0,
"gidp": 6,
"lidp": 1,
"klook": 17,
"kswing": 83,
"ktotal": 100,
"sacfly": 2,
"sachit": 0
},
"runs": {
"total": 30,
"earned": 25,
"unearned": 5
},
"whip": 1.0537,
"games": {
"svo": 8,
"win": 9,
"hold": 25,
"loss": 3,
"play": 70,
"save": 3,
"start": 0,
"finish": 9,
"qstart": 0,
"shutout": 0,
"complete": 0,
"teamWin": 0,
"teamLoss": 0,
"blownSave": 5
},
"steal": {
"caught": 4,
"stolen": 12,
"pickoff": 1
},
"onbase": {
"d": 8,
"h": 61,
"s": 49,
"t": 0,
"bb": 17,
"ci": 0,
"fc": 18,
"hr": 4,
"tb": 81,
"hbp": 5,
"ibb": 7,
"roe": 3,
"rov": 0
},
"outcome": {
"ball": 364,
"foul": 232,
"iball": 0,
"klook": 196,
"kswing": 224,
"ktotal": 420,
"dirtball": 26
},
"pitchCount": 1246
},
"playerName": "Adrian Morejon"
}
],
"home": [
{
"playerId": 4460,
"hitting": {
"ab": 373,
"ap": 403,
"abk": 3.36,
"avg": 0.244,
"bbk": 0.18,
"bip": 247,
"iso": 0.244,
"lob": 146,
"obp": 0.283,
"ops": 0.771,
"rbi": 64,
"slg": 0.488,
"xbh": 43,
"abhr": 16.955,
"bbpa": 0.05,
"gofo": 0.64,
"outs": {
"fo": 72,
"go": 67,
"lo": 15,
"po": 24,
"fidp": 0,
"gidp": 4,
"lidp": 1,
"klook": 15,
"kswing": 96,
"ktotal": 111,
"sacfly": 7,
"sachit": 0
},
"runs": {
"total": 47
},
"seca": 0.298,
"babip": 0.279,
"games": {
"play": 107,
"start": 92,
"finish": 13,
"complete": 79
},
"popup": 25,
"steal": {
"pct": 0.5,
"caught": 1,
"stolen": 1,
"pickoff": 2
},
"onbase": {
"d": 17,
"h": 91,
"s": 48,
"t": 4,
"bb": 20,
"ci": 0,
"fc": 3,
"hr": 22,
"tb": 182,
"hbp": 3,
"ibb": 0,
"roe": 1,
"rov": 0,
"cycle": 0
},
"abRisp": 73,
"flyball": 100,
"outcome": {
"ball": 400,
"foul": 310,
"iball": 0,
"klook": 152,
"kswing": 249,
"ktotal": 401,
"dirtball": 29
},
"hitRisp": 20,
"rbi2out": 27,
"teamLob": 62,
"linedrive": 52,
"groundball": 92,
"pitchCount": 1412,
"lobRisp2out": 31
},
"pitching": {},
"playerName": "Mickey Moniak"
}
]
},
"plays": [
{
"id": "b3e21cad-9462-4770-b2dc-04a0038b2687_294990",
"period": 9,
"scoring": false,
"homePoints": 7,
"awayPoints": 8,
"half": "bottom",
"text": "Adael Amador grounds out to shallow infield, Manny Machado to Ty France.",
"atBat": 123550,
"pitcher": 189973,
"runners": [
147482
],
"pitches": [
"c3745f0f-ff5c-4e28-a057-6f0646728516"
],
"outs": 3,
"homeWinPct": 0.1747563,
"overWinPct": 1,
"homeSpreadWinPct": 0.6521311,
"atBatName": "Adael Amador",
"pitcherName": "Mason Miller"
}
],
"players": [
{
"playerId": 2904,
"name": "Manny Machado",
"lastName": "Machado",
"abbreviation": "M.Machado",
"jersey": "13",
"position": "3B",
"primaryPosition": "3B",
"teamId": 211,
"image": "https://assets.actionnetwork.com/200x200/ba42554a63f4409d8c625eff89d65e1b.png",
"handedness": {
"bat": "R",
"throw": "R"
}
}
],
"score": {
"pitching": {
"away": {
"probableId": 87829,
"startingId": 87829,
"probableName": "Casey Mize",
"startingName": "Casey Mize"
},
"home": {
"probableId": 299395,
"startingId": 299395,
"probableName": "Tomoyuki Sugano",
"startingName": "Tomoyuki Sugano"
},
"winId": 87829,
"lossId": 299395,
"saveId": 189973,
"winName": "Casey Mize",
"lossName": "Tomoyuki Sugano",
"saveName": "Mason Miller"
},
"teamStats": {
"away": {
"hits": 13,
"runs": 8,
"errors": 0
},
"home": {
"hits": 14,
"runs": 7,
"errors": 0
}
},
"awayFirstFivePoints": 6,
"homeFirstFivePoints": 2
}
}

Upcoming games also carry a game-time forecast in weather. Both examples above are finished games, so theirs is empty; this is a real forecast from a scheduled game:

{
"gameId": 289020,
"league": "ncaaf",
"weather": {
"temperature": 76.71,
"humidity": 0.83,
"windSpeed": 4.83,
"windDegrees": 297,
"adjustedWindDegrees": 117,
"clouds": 0.78,
"precipitation": 0.28,
"description": "Drizzle",
"precipitationType": null,
"windDirectionText": null,
"date": "2026-09-17T23:00:00+00:00",
"updatedAt": "2026-09-14T23:59:12.751414+00:00",
"type": "light-rain",
"icon": "https://assets.actionnetwork.com/739473_light-rain.png",
"windDirection": "WNW"
}
}

Example match or fight row

Tennis, UFC and boxing return one row per match or fight, with competitors in place of teams and eventType: "competition". This WTA match carries all 28 fields. gameUrl is left empty for these events.

  • booksPricing: 2 of 28
  • leagueInfo.league.blacklistDates: 2 of 120
{
"gameId": 114016,
"eventType": "competition",
"gameUrl": null,
"league": "wta",
"leagueId": 23,
"leagueName": "wta",
"coreId": 236906340,
"season": 2026,
"title": "WTA Guadalajara, Mexico - Round Of 32",
"startTime": "2026-09-14T18:00:00.000Z",
"status": "scheduled",
"statusDetail": null,
"isLive": false,
"isComplete": false,
"competitors": [
{
"competitorId": 270507,
"playerId": 125771,
"side": "away",
"type": "player",
"player": {
"name": "Kayla Day",
"abbreviation": "DAY",
"image": "https://assets.actionnetwork.com/655755_kday.jfif",
"nationality": "USA",
"coreId": 81295,
"attributes": {
"hand": "L"
}
}
},
{
"competitorId": 270508,
"playerId": 172880,
"side": "home",
"type": "player",
"player": {
"name": "Elvina Kalieva",
"abbreviation": "KAL",
"image": "https://assets.actionnetwork.com/308320_kalieva.jpeg",
"nationality": "USA",
"coreId": 87222,
"attributes": {
"hand": "R"
}
}
}
],
"winningCompetitorId": null,
"venue": null,
"score": null,
"consensus": {
"moneyline": {
"sides": [
{
"side": "noside",
"teamId": null,
"competitorId": 270507,
"playerId": 125771,
"odds": -173,
"decimalOdds": 1.578,
"line": 0,
"impliedProbability": 0.6337,
"noVigProbability": 0.594131,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25550201",
"outcomeId": "2954831561"
},
{
"side": "noside",
"teamId": null,
"competitorId": 270508,
"playerId": 172880,
"odds": 131,
"decimalOdds": 2.31,
"line": 0,
"impliedProbability": 0.4329,
"noVigProbability": 0.405869,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25550201",
"outcomeId": "2954831563"
}
],
"holdPercent": 6.2441,
"overroundPercent": 6.66
},
"spread": {
"sides": [
{
"side": "noside",
"teamId": null,
"competitorId": 270508,
"playerId": 172880,
"odds": -145,
"decimalOdds": 1.6897,
"line": 3.5,
"impliedProbability": 0.591837,
"noVigProbability": 0.542056,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25571713",
"outcomeId": "2954831908"
},
{
"side": "noside",
"teamId": null,
"competitorId": 270507,
"playerId": 125771,
"odds": 100,
"decimalOdds": 2.0,
"line": -3.5,
"impliedProbability": 0.5,
"noVigProbability": 0.457944,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25571713",
"outcomeId": "2954831905"
}
],
"holdPercent": 8.4112,
"overroundPercent": 9.1837
},
"total": {
"sides": [
{
"side": "over",
"teamId": null,
"competitorId": null,
"playerId": null,
"odds": -120,
"decimalOdds": 1.8333,
"line": 21.5,
"impliedProbability": 0.545455,
"noVigProbability": 0.5,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25562056",
"outcomeId": "2954831694"
},
{
"side": "under",
"teamId": null,
"competitorId": null,
"playerId": null,
"odds": -120,
"decimalOdds": 1.8333,
"line": 21.5,
"impliedProbability": 0.545455,
"noVigProbability": 0.5,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25562056",
"outcomeId": "2954831696"
}
],
"holdPercent": 8.3333,
"overroundPercent": 9.0909
}
},
"bestPrices": {
"moneyline": [
{
"side": "noside",
"teamId": null,
"odds": -177,
"decimalOdds": 1.565,
"line": 0,
"bookId": 71,
"bookName": "BetRivers NJ",
"competitorId": 270507,
"playerId": 125771,
"impliedProbability": 0.638989,
"marketId": "25550201",
"outcomeId": "2959943799",
"bookParentId": 5,
"deeplinkId": "ML2959943799"
},
{
"side": "noside",
"teamId": null,
"odds": 140,
"decimalOdds": 2.4,
"line": 0,
"bookId": 71,
"bookName": "BetRivers NJ",
"competitorId": 270508,
"playerId": 172880,
"impliedProbability": 0.416667,
"marketId": "25550201",
"outcomeId": "2959943798",
"bookParentId": 5,
"deeplinkId": "ML2959943798"
}
],
"spread": [
{
"side": "noside",
"teamId": null,
"odds": 114,
"decimalOdds": 2.14,
"line": 1.5,
"bookId": 71,
"bookName": "BetRivers NJ",
"competitorId": 270508,
"playerId": 172880,
"impliedProbability": 0.46729,
"marketId": "25571713",
"outcomeId": "2959977691",
"bookParentId": 5,
"deeplinkId": "ML2959977691"
},
{
"side": "noside",
"teamId": null,
"odds": 100,
"decimalOdds": 2.0,
"line": -3.5,
"bookId": 75,
"bookName": "BetMGM NJ",
"competitorId": 270507,
"playerId": 125771,
"impliedProbability": 0.5,
"marketId": "25571713",
"outcomeId": "2957987842",
"bookParentId": 1,
"deeplinkId": "ML2957987842"
}
],
"total": [
{
"side": "under",
"teamId": null,
"odds": -108,
"decimalOdds": 1.9259,
"line": 21.5,
"bookId": 71,
"bookName": "BetRivers NJ",
"competitorId": null,
"playerId": null,
"impliedProbability": 0.519231,
"marketId": "25562056",
"outcomeId": "2959943804",
"bookParentId": 5,
"deeplinkId": "ML2959943804"
},
{
"side": "over",
"teamId": null,
"odds": -120,
"decimalOdds": 1.8333,
"line": 21.5,
"bookId": 75,
"bookName": "BetMGM NJ",
"competitorId": null,
"playerId": null,
"impliedProbability": 0.545455,
"marketId": "25562056",
"outcomeId": "2957987843",
"bookParentId": 1,
"deeplinkId": "ML2957987843"
}
]
},
"lineMovement": {
"moneyline": [
{
"side": "noside",
"teamId": null,
"competitorId": 270507,
"playerId": 125771,
"openingLine": 0,
"currentLine": 0,
"lineDelta": 0,
"openingOdds": -200,
"currentOdds": -173,
"oddsDelta": 27
},
{
"side": "noside",
"teamId": null,
"competitorId": 270508,
"playerId": 172880,
"openingLine": 0,
"currentLine": 0,
"lineDelta": 0,
"openingOdds": 160,
"currentOdds": 131,
"oddsDelta": -29
}
],
"spread": [
{
"side": "noside",
"teamId": null,
"competitorId": 270508,
"playerId": 172880,
"openingLine": 3.5,
"currentLine": 3.5,
"lineDelta": 0.0,
"openingOdds": -125,
"currentOdds": -145,
"oddsDelta": -20
},
{
"side": "noside",
"teamId": null,
"competitorId": 270507,
"playerId": 125771,
"openingLine": -3.5,
"currentLine": -3.5,
"lineDelta": 0.0,
"openingOdds": -111,
"currentOdds": 100,
"oddsDelta": 211
}
],
"total": [
{
"side": "over",
"teamId": null,
"competitorId": null,
"playerId": null,
"openingLine": 21.5,
"currentLine": 21.5,
"lineDelta": 0.0,
"openingOdds": -125,
"currentOdds": -120,
"oddsDelta": 5
},
{
"side": "under",
"teamId": null,
"competitorId": null,
"playerId": null,
"openingLine": 21.5,
"currentLine": 21.5,
"lineDelta": 0.0,
"openingOdds": -116,
"currentOdds": -120,
"oddsDelta": -4
}
]
},
"booksPricing": [
{
"bookId": 15,
"bookName": "Consensus",
"market": "moneyline",
"period": "event",
"side": "noside",
"teamId": null,
"competitorId": 270507,
"playerId": 125771,
"opposingCompetitorIds": null,
"odds": -173,
"decimalOdds": 1.578,
"line": 0,
"impliedProbability": 0.6337,
"isLive": false,
"lineStatus": "normal",
"isAlternate": false,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25550201",
"outcomeId": "2954831561",
"deeplinkId": null,
"bookParentId": 18,
"optionTypeId": null,
"propTypeId": null,
"oddsCoefficientScore": null,
"eventId": 114016,
"eventType": "competition"
},
{
"bookId": 15,
"bookName": "Consensus",
"market": "moneyline",
"period": "event",
"side": "noside",
"teamId": null,
"competitorId": 270508,
"playerId": 172880,
"opposingCompetitorIds": null,
"odds": 131,
"decimalOdds": 2.31,
"line": 0,
"impliedProbability": 0.4329,
"isLive": false,
"lineStatus": "normal",
"isAlternate": false,
"ticketPercent": null,
"moneyPercent": null,
"sharpGap": null,
"marketId": "25550201",
"outcomeId": "2954831563",
"deeplinkId": null,
"bookParentId": 18,
"optionTypeId": null,
"propTypeId": null,
"oddsCoefficientScore": null,
"eventId": 114016,
"eventType": "competition"
}
],
"result": null,
"meta": {
"title": "WTA Guadalajara, Mexico - Round Of 32"
},
"leagueInfo": {
"league": {
"id": 23,
"sport": "tennis",
"name": "wta",
"description": "WTA Tour",
"logo": "https://via.placeholder.com/200",
"currentSeason": "2026",
"currentSeasonType": "reg",
"preSeasonStart": null,
"preSeasonEnd": null,
"regSeasonStart": "2026-01-01T08:00:00.000Z",
"regSeasonEnd": "2027-01-03T07:59:59.000Z",
"postSeasonStart": null,
"postSeasonEnd": null,
"blacklistDates": [
"2026-01-28T08:00:00.000Z",
"2026-03-14T07:00:00.000Z"
],
"calendarInfo": {},
"currentWeek": -1,
"updatedAt": "2025-12-30T21:55:01.566Z",
"isActive": true,
"conferences": [],
"divisions": []
},
"contentLiveCount": 0
},
"expertPicks": [
{
"expertId": 3801142,
"name": "Wags Wins",
"username": "wagsischasing",
"profileUrl": "https://www.actionnetwork.com/u/wagsischasing",
"isVerified": false,
"followers": 9326,
"pictureUrl": "https://s3.amazonaws.com/tan-user-assets/profile_images/3801142/1729035051364-83e992408b4d11ef839f7b790295a264.jpg",
"bio": "Unit size reflects % of bankroll. (1U = 1%) \n\nStrongest sports are Tennis, NHL, and MLB, but there is ALWAYS value on the table.",
"isExpert": true,
"isInternalExpert": false,
"activePicks": 9,
"winStreak": {
"type": "cold",
"value": 3,
"startDate": "2026-09-11T07:00:00+00:00"
},
"record": {
"window": "last_month",
"wins": 40,
"losses": 36,
"pushes": 0,
"unitsNet": 1.4955999999999987,
"roi": 1.45,
"count": 76
},
"picks": [
{
"pickId": 555852633,
"play": "Elvina Kalieva +150 vs Kayla Day",
"market": "ml_home",
"period": "competition",
"line": 150,
"odds": 150,
"units": 1,
"unitsNet": 0,
"teamId": null,
"playerId": null,
"bookId": 3323,
"bookName": "Bally Bet OH",
"result": "pending",
"isVerified": true,
"createdAt": "2026-09-14T15:42:42.424Z",
"settledAt": null,
"updatedAt": "2026-09-14T15:42:42.423Z",
"status": "published",
"startsAt": "2026-09-14T18:00:00.000Z",
"endsAt": "2026-09-15T06:59:59.999Z",
"recordDate": null,
"isLive": false,
"money": 100,
"moneyNet": 0,
"unitsType": "unit",
"actualValue": null,
"currentProjection": null,
"customPickName": null,
"customPickType": null,
"customPickRules": null,
"tag": null,
"image": "https://assets.actionnetwork.com/308320_kalieva.jpeg",
"playerImage": "https://assets.actionnetwork.com/308320_kalieva.jpeg",
"marketId": "25550201",
"outcomeId": "2954831563",
"gameId": null,
"competitionId": 114016,
"competitorId": 270508,
"leagueId": 23,
"leagueName": "wta",
"groupPickId": null,
"playerPropProjectionId": null,
"userId": 3801142,
"gameTitle": null,
"meta": {
"leagueName": "wta",
"isAltMarket": false
}
}
]
}
],
"lineMovementHistory": null,
"props": null
}

Example league report row

includeStandings and includeInjuries add one row per league, not one row per team. All 6 top-level fields are shown, trimmed as follows:

  • standings: 1 of 32
  • standings[].records: 3 of 44
  • leagueInfo.league.blacklistDates: 1 of 158
  • leagueInfo.league.calendarInfo.pre: 1 of 4
  • leagueInfo.league.calendarInfo.reg: 1 of 18
  • leagueInfo.league.calendarInfo.post: 1 of 4
  • leagueInfo.league.conferences: 1 of 2
  • leagueInfo.league.divisions: 1 of 8

The records array is the betting half of the league table: straight-up, against-the-spread, over/under and units, each sliced again by home, road, favourite, underdog, division and conference.

{
"recordType": "standings",
"league": "nfl",
"season": 2026,
"entryCount": 32,
"standings": [
{
"league": "nfl",
"teamId": 125,
"team": {
"teamId": 125,
"name": "Buffalo Bills",
"displayName": "Bills",
"shortName": null,
"location": null,
"abbreviation": "BUF",
"logo": "https://static.sprtactn.co/teamlogos/nfl/100/buf.png",
"primaryColor": "00338D",
"secondaryColor": "C60C30",
"conference": "AFC",
"division": "EAST",
"urlSlug": "buffalo-bills",
"coreId": null,
"record": null
},
"wins": 1,
"losses": 0,
"ties": null,
"draws": 0,
"overtimeLosses": null,
"winPercent": 1,
"pointsFor": 36,
"pointsAgainst": 31,
"pointsRank": null,
"touchdownDifferential": 0,
"conference": "AFC",
"division": "EAST",
"conferenceRank": 5,
"divisionRank": 2,
"streak": 1,
"season": 2026,
"seasonType": "reg",
"poll": null,
"pollRank": null,
"homeWins": null,
"homeLosses": null,
"awayWins": null,
"awayLosses": null,
"lastTenWins": null,
"lastTenLosses": null,
"gamesBack": null,
"wildCardGamesBack": null,
"eliminationNumber": null,
"conferenceGamesBehind": null,
"divisionGamesBehind": null,
"leagueGamesBehind": null,
"pointDifferential": null,
"points": null,
"gamesPlayed": null,
"goalsFor": null,
"goalsAgainst": null,
"goalDifferential": null,
"records": [
{
"category": "conference",
"recordType": "conference",
"wins": 1,
"losses": 0,
"overs": null,
"unders": null,
"ties": 0,
"draws": null,
"winPercent": 1,
"pointsFor": 36,
"pointsAgainst": 31
},
{
"category": "road",
"recordType": "road",
"wins": 1,
"losses": 0,
"overs": null,
"unders": null,
"ties": 0,
"draws": null,
"winPercent": 1,
"pointsFor": 36,
"pointsAgainst": 31
},
{
"category": "afc",
"recordType": "afc",
"wins": 1,
"losses": 0,
"overs": null,
"unders": null,
"ties": 0,
"draws": null,
"winPercent": 1,
"pointsFor": 36,
"pointsAgainst": 31
}
]
}
],
"leagueInfo": {
"league": {
"id": 1,
"sport": "football",
"name": "nfl",
"description": "National Football League",
"logo": "https://static.sprtactn.co/leagues/500/nfl.png",
"currentSeason": "2026",
"currentSeasonType": "reg",
"preSeasonStart": "2026-07-30T07:00:00.000Z",
"preSeasonEnd": "2026-09-02T06:59:59.000Z",
"regSeasonStart": "2026-08-30T07:00:00.000Z",
"regSeasonEnd": "2027-01-18T07:59:59.000Z",
"postSeasonStart": "2027-01-12T08:00:00.000Z",
"postSeasonEnd": "2027-03-11T07:59:59.000Z",
"blacklistDates": [
"2025-05-27T07:00:00.000Z"
],
"calendarInfo": {
"pre": [
{
"abbr": "HoF",
"week": 0,
"label": "Hall of Fame Weekend",
"endDate": "2026-08-07T21:59Z",
"startDate": "2026-07-27T01:00Z"
}
],
"reg": [
{
"abbr": "Week 1",
"week": 1,
"label": "Week 1",
"endDate": "2026-09-15T04:59Z",
"startDate": "2026-08-29T02:00Z"
}
],
"post": [
{
"abbr": "Wild Card",
"week": 1,
"label": "Wild Card",
"endDate": "2027-01-19T04:59Z",
"startDate": "2027-01-11T05:00Z"
}
]
},
"currentWeek": 1,
"updatedAt": "2026-08-30T16:25:20.339Z",
"isActive": true,
"conferences": [
{
"id": "AFC",
"display": "AFC"
}
],
"divisions": [
{
"id": "EAST",
"display": "East",
"conferenceId": "AFC"
}
]
}
}
}

An injury report row has the same envelope with recordType: "injuries" and an injuries array, trimmed here to 1 of 13 entries:

{
"recordType": "injuries",
"league": "nfl",
"season": null,
"entryCount": 13,
"injuries": [
{
"league": "nfl",
"playerName": "Gary Jennings",
"firstName": "Gary",
"lastName": "Jennings",
"position": "WR",
"team": {
"name": "Los Angeles Chargers",
"displayName": "Chargers",
"logo": "https://static.sprtactn.co/teamlogos/nfl/100/sd.png"
},
"status": "out",
"designation": "IR",
"comment": "Gary Jennings (Concussion) is out this week.",
"isStarter": true,
"isKeyPlayer": true,
"startedAt": "2022-08-18T17:53:48.651Z",
"updatedAt": "2022-08-18T17:54:07.497Z"
}
],
"leagueInfo": null
}

How to Scrape Action Network Odds and Betting Splits

  1. Open Action Network Odds on Apify and click Try for free.
  2. Pick your leagues. NFL is prefilled, and you can add up to all 18.
  3. Set a date for date-scheduled leagues, or a week and season for NFL and NCAA Football. Those two cannot be combined with a date in the same run, so cover them in a separate run.
  4. Turn on Player and game props or Full line movement history only if you need them. Both are off by default and both are billed per game.
  5. Click Start and watch the run. A typical single-league slate finishes in well under a minute.
  6. Download the dataset as JSON, CSV, Excel or HTML, or wire it into your own code with the Apify API.

Full option example

Everything is optional. With no input at all you get the current NFL slate.

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

Choosing games

FieldNotes
leaguesWhich leagues to cover. Out-of-season leagues simply return nothing. Soccer (all leagues) already covers the Premier League, La Liga, Bundesliga, Serie A, Ligue 1 and MLS, so a fixture reached both ways is still collected and charged once.
dateYYYY-MM-DD. Leave it empty for NFL and NCAA Football, which are scheduled by week. Setting a date alongside either of them stops the run rather than quietly giving you the wrong week.
week, season, seasonTypeNFL and NCAA Football. season also selects the year for standings.
gameIds, gameUrlsCover specific games. Overrides the league and date selection.

Narrowing the slate

gameStatus (upcoming, live, finished), teams (names or abbreviations), onlyTrending, minBets, periods (full game, halves, quarters), books, maxGames.

Filters are applied before any per-game work is done, so anything filtered out is never charged for. Every field is documented in the Input tab, which is the fastest place to read the options.

Integrations, Scheduling and Monitoring

Betting splits are a time series. One run tells you where the public is now; a schedule tells you where it moved.

  • Apify Scheduler. For a pregame slate, hourly on game day is the useful cadence, with one extra run about 30 minutes before kickoff to capture the closing line. Daily is enough if you only want closing numbers and results.
  • Google Sheets for a shareable splits board that updates itself.
  • Make and Zapier for alerts, for example a message whenever sharpGap crosses a threshold you care about.
  • Webhooks to post each finished run straight into your own service.
  • Dataset API for direct pulls into a notebook or a database.

New to running and scheduling Actors? These are the official Apify walkthroughs:

How Much Does It Cost to Scrape Action Network?

Charged per game, not per price. One game quoted by every sportsbook you asked for across three markets is still one charge.

EventPrice
Game$3.99 per 1,000 games
Full line movement history$3.99 per 1,000 games
Player and game props$4.99 per 1,000 games
Standings or injury report$7.99 per 1,000 league reports
Actor start$4.99 per 1,000 runs

Expert picks are included in the game price. Lower rates apply automatically on higher Apify plans, down to $2.79 per 1,000 games.

Opt-in blocks are off by default, so you only pay for what you turn on, and games removed by a filter cost nothing.

A single league's daily slate is under a dime for most leagues, and about thirty cents for a full college football Saturday. Apify's free plan credit covers over a thousand games before you pay anything.

FAQ

Does Action Network have an API? Not a public one. There is a paid PRO subscription for the site itself, but no documented endpoint, no keys and no published field list. This Actor gives you a stable JSON schema, scheduling, retries and exports instead.

What does "sharp money" mean in betting? It describes stake concentrated in relatively few bets. In the output that shows up as moneyPercent sitting well above ticketPercent on the same side, which is exactly what sharpGap measures.

What does line movement mean in betting? The price on a side changing between the opening number and now. lineMovement carries both numbers plus the delta for every market, and the opt-in lineMovementHistory carries every timestamped step between them.

Is reverse line movement good or bad? Neither on its own. It is a signal: the line moving against the side holding most of the tickets. You can detect it with two fields, sharpGap and lineMovement.

Is it profitable to bet against the public? That is a modelling question, not a data question. What this Actor does is give you the public percentages and the closing numbers you need to test it yourself, with history back to around 2024 for odds and splits.

Is there a free API for sports betting odds? Free odds feeds exist but are usually thin: a handful of books, no betting splits and tight rate limits. Public betting percentages in particular are rarely free anywhere.

How far back does the history go? Scores and box scores reach 2015. Odds and betting splits begin around 2024, so a 2019 game returns the result but no closing line.

Why are some leagues empty? They are out of season. An empty league is a normal answer, not an error, and it costs nothing.

Can I get first-half or quarter lines? Yes, through periods. Not every game prices every segment, so an empty result there is also a real answer.

What are book IDs 15 and 30? Not sportsbooks. 15 is the consensus line that carries the betting splits, and 30 is the opening line. Both are always included, so splits and movement never go missing even if you filter to a single book.

Can I export this to Google Sheets or my own database? Yes. Every run writes a dataset you can download as JSON, CSV, Excel or HTML, push through an integration, or read from the Apify API.

Something looks wrong. What do I do? Open the Issues tab on this Actor with the run ID and the input you used. If you need a different shape of this data, a different source or a custom pipeline, say so there and it can be built.

This is an unofficial tool that collects publicly accessible information. It is not affiliated with, endorsed by, or connected to The Action Network, Inc.

Scraping public data is generally lawful in the US and the EU. How you use it is your responsibility.

The output is odds, teams, aggregate betting percentages, published injury reports, player names on prop markets, and public expert profiles. All of it is already published by the source and none of it is private. If you combine it with anything that is, GDPR and similar rules apply to you as the controller.

Odds and betting data are provided for informational and analytical purposes only and are not betting advice. You are responsible for complying with the laws and terms that apply to you, including the gambling regulations in your jurisdiction.

More Zen Studio scrapers for sports betting

🏟️ Sportsbook odds

🎯 Daily fantasy & player props

🎾 Live scores & match data


Action Network scraper and API for betting splits, public betting percentages, sportsbook odds, line movement and expert picks across 18 leagues, as structured JSON.