
Google Search Scraper
scrape.ly/store/querystone/google-search-scraperSEO toolsAI
2 monthly users

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.
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.
ticketPercent, moneyPercent and sharpGap (money minus tickets) for the moneyline, spread and total, plus flat columns like spreadHomeTicketPercent for quick sorting.sharpGap or a line move crosses your threshold.ticketPercent) with lineMovement to spot lines moving against the public.bestPrices and booksPricing to find the best number across books.result (winner, against the spread, over/under).| Field | What it does |
|---|---|
leagues | nfl, ncaaf, nba, ncaab, wnba, mlb, nhl, soccer (all leagues), epl, laliga, bundesliga, seriea, ligue1, mls, ufc, boxing, atp, wta |
gameUrls | Game page links or numeric game IDs; overrides the leagues |
maxGames | Stop after this many games (default 20, 0 = no limit) |
date, endDate | A day or a range of days (YYYY-MM-DD); empty = today |
week, season, seasonType | NFL and NCAA Football weeks (reg, post, pre) |
gameStatus, teams, minBets, onlyTrending | Filters, applied before any per-game work, so filtered games cost nothing |
books, periods | Sportsbooks (IDs or names) and game segments (full game, halves, quarters, periods) |
includeExpertPicks, includeGameDetail | On by default, free |
includeLineMovement, includeProps, includeStandings, includeInjuries | Optional extras, priced separately |
{
"leagues": ["nfl", "nba"],
"maxGames": 20,
"gameStatus": ["scheduled"],
"books": ["68", "69", "75"],
"includeExpertPicks": true,
"includeLineMovement": false
}
One row per game (or per tennis match or fight). League reports (standings, injuries) are separate rows with recordType.
| Field | Description |
|---|---|
gameId, gameUrl, league, startTime, status | Game identity and state |
title, awayName, homeName, awayScore, homeScore | Matchup and score |
moneylineAway, moneylineHome, spreadHome, totalLine | Consensus lines as flat columns |
spreadHomeTicketPercent, spreadHomeMoneyPercent, overTicketPercent, ... | Public betting splits as flat columns |
consensus, teamTotals | Consensus moneyline, spread, total and team totals with splits, no-vig probability, hold |
bestPrices | Best price per side and the book offering it |
lineMovement | Opening vs current line and odds per side |
booksPricing | Every outcome from every selected sportsbook and segment |
result | Winner, against the spread and over/under for finished games |
expertPicks | Experts' picks on the game with record, units and ROI |
awayTeam, homeTeam, competitors | Teams (or players) with records and logos |
players, lineups, plays, playerStats, teamStats, venue, weather, officials, injuries, trends | Game detail |
lineMovementHistory, props | Optional 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"
}
]
Pay per event, no start fee:
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.
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.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
leaguesarrayOptionalLeagues
Leagues to cover. You get the current slate (today's games, or this week's for NFL and NCAA Football) unless you set a date or week below. Out-of-season leagues return nothing. Tennis, UFC and boxing return one row per match or fight with the two competitors. Soccer (all leagues) covers every soccer competition the site lists, including the Champions League; a game reached through two leagues is saved and charged once.
gameUrlsarrayOptionalGame page links or IDs
Collect specific games instead of whole leagues: paste game page links (https://www.actionnetwork.com/nfl-game/.../290930) or numeric game IDs. When set, the league selection is not used. Works for team sports (not tennis, UFC or boxing).
maxGamesintegerOptionaldefault 20Maximum games
Stop after this many games or matches. 0 means no limit: every game in the selected leagues and dates is collected.
Pick a day, a date range or (for NFL and NCAA Football) a week. Prices and betting splits are available from 2024; scores go back to 2015.
datestringOptionalDate
Day to cover (YYYY-MM-DD). Leave empty for today's slate. For NFL and NCAA Football use the week below instead, or a date to get that day's games.
endDatestringOptionalEnd date
Optional last day of a date range (YYYY-MM-DD). Every day from Date to End date is collected, one scoreboard per league and day.
weekintegerOptionalWeek (NFL and NCAA Football)
Week number for NFL and NCAA Football (regular season 1 to 18, postseason 1 to 4, preseason 1 to 3). Set it together with Season. Other leagues use the date.
seasonintegerOptionalSeason
Season year for the week above and for standings, for example 2026.
seasonTypeenumOptionalSeason type
Regular season, postseason or preseason (NFL and NCAA Football weeks).
gameStatusarrayOptionalGame status
Keep only games in these states. Leave empty for all.
teamsarrayOptionalTeams or players
Keep only games involving these teams (name, nickname, city or abbreviation, e.g. Chiefs, KC, Kansas City) or, for tennis and fights, these players.
minBetsintegerOptionalMinimum bet count
Skip games with fewer tracked bets than this.
onlyTrendingbooleanOptionaldefault falseTrending games only
Keep only games the site flags as drawing unusual attention.
booksarrayOptionalSportsbooks
Sportsbook IDs or names to price (e.g. 68 or DraftKings, 69 FanDuel, 75 BetMGM, 79 bet365, 71 BetRivers, 123 Caesars). Leave empty for those six. Consensus (15) and the opening line (30) are always included, so betting splits and line movement never go missing.
periodsarrayOptionalGame segments
Full game, halves, quarters or hockey periods. The first one drives the consensus, best price and line movement blocks; all of them appear in the per-book prices. Leave empty for the full game.
includeExpertPicksbooleanOptionaldefault trueExpert picks
Attach expert picks for each game with the expert's league record, units and ROI. Included at no extra charge.
includeGameDetailbooleanOptionaldefault trueGame detail
Rosters, lineups, box score, play-by-play, player and team stats, venue, weather, officials, injuries and betting trends for each game. Included at no extra charge; turn off for smaller rows.
includeLineMovementbooleanOptionaldefault falseFull line movement history
Every timestamped price change per sportsbook back to the opening line (team sports). Charged as an add-on per game that has history. The opening and current price are always included without this.
includePropsbooleanOptionaldefault falsePlayer and game props
The full prop board for each game (team sports). Charged as an add-on per game that has props. Adds many requests per game, so runs take longer.
includeStandingsbooleanOptionaldefault falseStandings
One standings table per selected league, charged as a league report. Available for NFL, NCAA Football, NBA, NCAA Basketball, WNBA, MLB and NHL; the site publishes no soccer tables.
includeInjuriesbooleanOptionaldefault falseInjury report
One injury-report row per selected league (charged as a league report).
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work well for this site. Residential proxies are pinned to the US unless you choose a country.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| startTime | any | Start (UTC) |
| league | any | League |
| title | any | Matchup |
| status | any | Status |
| awayScore | any | Away score |
| homeScore | any | Home score |
| moneylineAway | any | ML away |
| moneylineHome | any | ML home |
| spreadHome | any | Spread (home) |
| totalLine | any | Total |
| moneylineHomeTicketPercent | any | ML home % bets |
| moneylineHomeMoneyPercent | any | ML home % money |
| spreadHomeTicketPercent | any | Spread home % bets |
| spreadHomeMoneyPercent | any | Spread home % money |
| overTicketPercent | any | Over % bets |
| overMoneyPercent | any | Over % money |
| totalBets | any | Bets tracked |
| result | any | Result |
| gameId | any | Game ID |
| gameUrl | any | Game page |
| awayName | any | Away |
| homeName | any | Home |
| consensus | any | Consensus lines and splits |
| bestPrices | any | Best price per side |
| lineMovement | any | Opening vs current |
| booksPricing | any | Sportsbook prices |
| expertPicks | any | Expert picks |
| lineMovementHistory | any | Line movement history |
| props | any | Props |
| recordType | any | Report |
| season | any | Season |
| entryCount | any | Entries |
| standings | any | Standings |
| injuries | any | Injuries |
| scrapedAt | any | Scraped at |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Game | One game, match or fight with consensus lines, public betting splits, every selected sportsbook's prices, best price per side, opening-to-current line movement, result, expert picks and game detail. | $0.003 |
| League report | One standings table or injury report for one league (only when switched on). | $0.006 |
| Line movement history | Every timestamped price change for one game, per sportsbook, back to the opening line (only when switched on). | $0.003 |
| Player and game props | The full prop board for one game across the selected sportsbooks (only when switched on). | $0.004 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/action-network-scraper').call({
"leagues": [
"nfl",
"nba",
"nhl",
"soccer"
],
"maxGames": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/action-network-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/action-network-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.
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.