# Action Network Odds, Betting Splits & Line Movement Scraper (`artsiom_k/actionnetwork-scraper`) Actor

Sports betting odds from every major US sportsbook, public money/ticket percentages, line movement, props, injuries, ATS standings, futures and weather from Action Network - NFL, NBA, MLB, NHL, college, 8 soccer leagues, UFC and tennis.

- **URL**: https://apify.com/artsiom_k/actionnetwork-scraper.md
- **Developed by:** [Artsiom Kunitsyn](https://apify.com/artsiom_k) (community)
- **Categories:** Other, E-commerce
- **Stats:** 31 total users, 7 monthly users, 98.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Action Network Scraper — betting odds, public betting splits & line movement

Scrape **sports betting data from [Action Network](https://www.actionnetwork.com)**: **odds from
every major US sportsbook** (DraftKings, FanDuel, BetMGM, Caesars, bet365 and more), **public
betting percentages** (share of bets and share of money on each side), **timestamped line
movement**, **player and game props**, **injury reports**, **standings with against-the-spread
(ATS) and over/under records**, **futures odds** (champion, MVP, season win totals), game-day
**weather**, and scores. Covers **18 leagues**: the **NFL, NCAA Football, NBA, NCAA Basketball,
WNBA, MLB, NHL**, soccer's **Premier League, La Liga, Bundesliga, Serie A, Ligue 1, Champions
League, Europa League and MLS**, plus **UFC** and **ATP / WTA tennis**.

Get current slates or **historical closing odds and betting splits for past seasons**. Filter by
**team**, pick sportsbooks **by name**, ask for **today's** games without typing a date, and get
**compact rows** that fit an AI assistant. Export to JSON, CSV or Excel, or feed it straight into
your betting model in Python. No login or API key needed.

### Contents

- [What data can you extract?](#what-data-can-you-extract)
- [Strengths and limits](#strengths-and-limits)
- [Sample output](#sample-output)
- [Who uses this Action Network scraper?](#who-uses-this-action-network-scraper)
- [How much does it cost?](#how-much-does-it-cost)
- [How to scrape betting odds and splits](#how-to-scrape-betting-odds-and-splits)
- [Input](#input)
- [Input examples](#input-examples)
- [Line history: capture it daily](#line-history-capture-it-daily)
- [UFC and tennis](#ufc-and-tennis)
- [Incremental runs](#incremental-runs)
- [Use it from an AI assistant](#use-it-from-an-ai-assistant)
- [Use it from Python or the API](#use-it-from-python-or-the-api)
- [FAQ](#faq)
- [Related sports data scrapers](#related-sports-data-scrapers)

### What data can you extract?

Six data types, chosen with `entityType`:

| Data type | One row per | What's in it |
|---|---|---|
| `games` (default) | game, UFC bout or tennis match | Teams (or fighters / players), start time, status, score, winner, attendance. **Moneyline, spread and total** from Consensus, the opening line and each sportsbook. **Public betting splits** (`tickets_pct`, `money_pct`) per side of each market. Number of bets. Alternate lines and team totals where listed. NFL and NCAA Football games this week also get a **`weather`** forecast for kickoff. |
| `lineHistory` | game × sportsbook × market | Every odds and line change with its **timestamp**, per outcome: `[{updated_at, odds, value, line_status}]`, plus the opening point and number of moves. |
| `props` | prop market | Player (name, team, position) or game-level prop, stat type and period, with **every sportsbook's line and odds**. |
| `injuries` | injured player | Team, player, position, status (out, questionable, ...), injury, the latest note, starter / key-player flags, when it was reported and updated. |
| `standings` | team | Wins, losses, draws, win %, points for/against, streak, conference/division rank, games back, plus **ATS record**, **over/under record** and **units won** betting the team, and every split the site keeps in `records` (`ats_home`, `ats_fav`, `over_under_road`, `units_last_10`, `last_10`, ...). |
| `futures` | futures outcome | Market (e.g. "2026-27 NBA MVP", Super Bowl winner, division winners, season win totals), team or player, Over/Under or Yes/No option, line, **best price** and every sportsbook's odds. |

**Sportsbooks:** Consensus, Open (opening line), DraftKings, FanDuel, BetMGM, Caesars, Fanatics,
bet365, BetRivers, theScore Bet, Hard Rock Bet, Bally Bet, Unibet, BetVictor, Betfred, Bet99, Kalshi
and Polymarket. Choose them by name with `books`; without it you get the site's default set
(Consensus, Open and about five major US books).

Every game row also has the public splits and the opening line as flat fields
(`spread_home_tickets_pct`, `spread_home_money_pct`, `moneyline_home_tickets_pct`, `over_money_pct`,
`open_spread_home`, `open_total_line`, ...), so no digging into nested data is needed.

Game records also carry a `change_type` for incremental runs. The Output tab has readable
**Games**, **Line history**, **Props**, **Injuries**, **Standings & ATS** and **Futures** table
views with the full field list.

**Which data exists for which league** (what the site publishes, checked September 2026):

| | Games & splits | Line history, props | Injuries | Standings / ATS | Futures |
|---|---|---|---|---|---|
| NFL, NCAAF, NBA, NCAAB, WNBA, MLB, NHL | ✓ | ✓ | ✓ (none reported for NCAAF) | ✓ in season | ✓ |
| Soccer (8 leagues) | ✓ | ✓ | ✓ | MLS, Champions League, Europa League | — |
| UFC, ATP, WTA | odds & results, no splits | — | — | — | — |

#### Why this Action Network scraper

- **Odds and public betting splits in one row**, so you can see at once where the public and the
  money disagree.
- **Historical backfill:** closing odds and final splits for roughly the last two seasons, props for
  at least the past year.
- **Line movement capture** from the opening line to the close.
- **18 leagues in one actor**: every major US league, the top European soccer leagues, UFC and
  tennis, for the current slate or any date range or season.
- **Beyond odds:** injury reports, ATS / over-under standings, futures and weather from the same
  source, in the same format.
- **Fast and cheap:** a full NFL season (272 games) in one run, no proxy needed.

### ⚖️ Strengths and limits

Read this before you run a big job, so you know exactly what you get.

**Strengths**

- **Odds and public betting splits in one row**, for every major US sportsbook.
- **Complete seasons.** In our checks a season run matched the real game count exactly: NFL 2025 = 272 games, NHL
  2025-26 = 1,312.
- **18 leagues and six data types** from one actor, no proxy or login needed.

**Limits**

- **Not an official or licensed feed.** It reads the API behind Action Network's website, which isn't a public product,
  and the robots.txt on that API host disallows crawlers. Check this fits your own compliance rules. If the site changes
  the API, data types can stop working until the actor is updated: in October 2026 a site change briefly left `props`
  empty.
- **Line movement can't be backfilled.** Timestamped line history is kept for only 2–3 days after a game, so schedule
  `lineHistory` daily.
- **History is limited elsewhere too.** Closing odds and splits go back roughly two seasons, props at least a year.
  Injuries, standings, futures and weather are current snapshots only.
- **UFC and tennis are thinner.** Odds and results only: no splits, line history, props, injuries, standings or
  futures, and their odds disappear within days of the event.
- **Splits are Consensus only.** Ticket % and money % come from Action Network's Consensus entry, not from each sportsbook,
  and we can't verify how the site calculates them.
- **Sportsbook prices are state-specific.** A book's line is from one US state's listing (for example DraftKings NJ), so
  your state may differ. You get about five major books by default; ask for others in `books`.
- **Coverage varies by league.** See the table above: no futures for soccer, MLS and European cups only for soccer
  standings, standings empty between seasons, weather only for NFL and NCAA Football in the current week. Golf isn't
  covered. Injury rows have player names but no player ids.
- **Not real-time.** Each run is a snapshot of the moment it runs.
- **Rows can add up.** At $5 per 1,000 on the free plan: a full NFL season of games is about $1.40, but 90 games of
  props were 7,511 rows (about $38) and all futures 9,230 rows (about $46). Filter by league, team and date, and use
  `compact` for smaller rows.
- **Not affiliated** with Action Network or any sportsbook.

### Sample output

Real rows from a recent run (NHL, `games`):

| Game | Start (UTC) | Moneyline away / home | Puck line home | Total | Bets |
|---|---|---|---|---|---|
| Rangers @ Bruins | 2026-09-30 00:00 | +105 / −123 | −1.5 | 5.5 | 626 |
| Canucks @ Oilers | 2026-09-30 02:00 | +220 / −275 | −1.5 | 6.5 | 287 |
| Panthers @ Hurricanes | 2026-09-29 21:00 | +110 / −130 | −1.5 | 6.5 | 252 |
| Canadiens @ Maple Leafs | 2026-09-29 23:00 | −107 / −113 | −1.5 | 6.5 | 252 |
| Blackhawks @ Golden Knights | 2026-09-30 02:30 | +210 / −257 | −1.5 | 5.5 | 186 |

**Game record (JSON, shortened):**

```json
{
  "source": "actionnetwork",
  "external_id": "256552",
  "league": "nfl",
  "season": 2025,
  "week": 1,
  "start_time": "2025-09-05T00:20:00.000Z",
  "away_team": "Dallas Cowboys",
  "home_team": "Philadelphia Eagles",
  "status": "complete",
  "away_score": 20,
  "home_score": 24,
  "winner": "home",
  "moneyline_home": -425,
  "spread_home": -8.5,
  "total_line": 47.5,
  "consensus": {
    "spread": {
      "home": {"odds": -110, "value": -8.5, "tickets_pct": 64, "money_pct": 72},
      "away": {"odds": -110, "value": 8.5, "tickets_pct": 36, "money_pct": 28}
    }
  },
  "books": [{"book_id": 68, "book": "DK NJ", "moneyline": {}, "spread": {}, "total": {}}],
  "change_type": "new"
}
```

### Who uses this Action Network scraper?

- **Sports bettors and betting-model builders**: closing line value, reverse line movement,
  fading the public, and backtesting against historical closing odds and splits.
- **Tipster, picks and betting-media sites**: live odds tables, public-betting widgets and line
  movement charts.
- **Fantasy and DFS players**: player prop lines across books.
- **Sports-data analysts and researchers**: market efficiency, bookmaker comparison, the gap between
  public tickets and money.

### How much does it cost?

Pay per result: you're charged per row delivered. There's no monthly rental or separate API key
fee. See the **Pricing** tab for current prices, including automatic discounts on higher Apify plans.

The default run returns 50 rows, about $0.25 at the free-plan price. A full NFL season of games is
about $1.40, within the monthly credit on Apify's free plan.

### How to scrape betting odds and splits

1. Click **Try for free** (or open the actor in Apify Console) and go to the **Input** tab.
2. Choose `entityType`: `games`, `lineHistory`, `props`, `injuries`, `standings` or `futures`.
3. Pick the `leagues`.
4. Leave the dates empty for the current slate, set `dateFrom`/`dateTo` (a date or `today`,
   `tomorrow`, `yesterday`) for the daily leagues, or a `season` (and weeks) for NFL and NCAA Football.
5. Optionally pick `teams` and sportsbooks (`books`), and tick `compact` for smaller rows.
6. `maxItems` defaults to 50, a quick preview. Clear it (`null`) for everything in scope.
7. Click **Start**, then download the results as **JSON, CSV, Excel** or HTML, or use the API.
8. For a daily odds feed or line-movement capture, add a **Schedule** (examples below).

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `entityType` | string | `games` | `games`, `lineHistory`, `props`, `injuries`, `standings` or `futures`. The last three are the current snapshot and ignore dates and season. |
| `leagues` | array | all 18 | `nfl`, `ncaaf`, `nba`, `ncaab`, `wnba`, `mlb`, `nhl`, `epl`, `laliga`, `bundesliga`, `seriea`, `ligue1`, `champions`, `europa`, `mls`, `ufc`, `atp`, `wta`; `soccer` selects all 8 soccer leagues. Out-of-season leagues return nothing. |
| `teams` | array | all | Only games involving these teams (or UFC fighters / tennis players): `"Lakers"`, `"Kansas City Chiefs"`, `"NYY"`. Whole words or the abbreviation, any case. Also filters injuries, standings and futures; line history and props are fetched only for matching games. |
| `dateFrom` / `dateTo` | string | — | Game days for the daily leagues (everything except NFL and NCAA Football): `YYYY-MM-DD`, or `today`, `tomorrow`, `yesterday` (US Eastern). Empty = the current slate (in the US morning that can still be last night's games). At most 400 days. |
| `season` | integer | — | NFL / NCAA Football season year. Setting it walks the weeks below. |
| `weekFrom` / `weekTo` | integer | 1 / end of season | Week range when `season` is set. |
| `seasonType` | string | `reg` | `reg` or `post` (playoffs / bowl games). |
| `books` | array | site default | Sportsbooks by name: `DraftKings`, `FanDuel`, `BetMGM`, `Caesars`, `Fanatics`, `bet365`, `BetRivers`, `theScore Bet`, `Hard Rock Bet`, `Bally Bet`, `Unibet`, `BetVictor`, `Betfred`, `Bet99`, `Kalshi`, `Polymarket` (any case). Consensus (the splits) and Open are always kept. For futures, empty means every book that offers futures. |
| `compact` | boolean | `false` | Smaller rows: one flat price set per sportsbook for games, opening + current price (no full time series) for line history, book/side/line/odds for props. Good for AI assistants and spreadsheets. |
| `maxItems` | integer | `50` | Stop after this many rows. `null` = everything in scope. |
| `mode` | string | `auto` | `auto` / `full` / `incremental`, `games` only. |
| `bookIds` | array | — | Advanced: sportsbooks by Action Network book id (state-specific, e.g. `68` = DraftKings NJ). Combines with `books`. |
| `concurrency` | integer | `10` | Parallel requests (max 20). |
| `impersonate` | string | `firefox` | Browser fingerprint. Change only if requests are blocked. |
| `proxyConfiguration` | object | no proxy | Apify Proxy settings. Not needed. |

### Input examples

**Default preview (current slate of every league, first 50 games):**

```json
{}
```

**Today's NBA games, DraftKings, FanDuel and bet365 only, compact rows:**

```json
{ "leagues": ["nba"], "dateFrom": "today", "books": ["DraftKings", "FanDuel", "bet365"], "compact": true, "maxItems": null }
```

**One team's games, odds and public splits for the whole season:**

```json
{ "leagues": ["nfl"], "season": 2025, "teams": ["Kansas City Chiefs"], "maxItems": null }
```

**Tonight's player props for one team:**

```json
{ "entityType": "props", "leagues": ["nba"], "dateFrom": "today", "teams": ["Lakers"], "compact": true, "maxItems": 2000 }
```

**A full NFL regular season of closing odds and betting splits:**

```json
{ "leagues": ["nfl"], "season": 2025, "maxItems": null }
```

**NHL closing odds for a whole season, by date range:**

```json
{ "leagues": ["nhl"], "dateFrom": "2025-10-07", "dateTo": "2026-04-18", "maxItems": null }
```

**Daily feed of new and changed games (schedule this):**

```json
{ "leagues": ["nfl", "mlb", "nba", "nhl"], "maxItems": null }
```

**Daily line-movement capture (schedule this):**

```json
{ "entityType": "lineHistory", "leagues": ["nfl", "mlb", "nba", "nhl"], "maxItems": null }
```

**NBA player props for one night:**

```json
{ "entityType": "props", "leagues": ["nba"], "dateFrom": "2025-01-01", "maxItems": 2000 }
```

**Premier League and Champions League for a weekend:**

```json
{ "leagues": ["epl", "champions"], "dateFrom": "2026-09-19", "dateTo": "2026-09-20", "maxItems": null }
```

**Today's UFC card and tennis matches:**

```json
{ "leagues": ["ufc", "atp", "wta"], "maxItems": null }
```

**Injury report for every league (schedule it before game days):**

```json
{ "entityType": "injuries", "maxItems": null }
```

**NFL and MLB standings with ATS and over/under records:**

```json
{ "entityType": "standings", "leagues": ["nfl", "mlb"], "maxItems": null }
```

**NBA futures (champion, MVP, awards) from DraftKings and FanDuel:**

```json
{ "entityType": "futures", "leagues": ["nba"], "books": ["DraftKings", "FanDuel"], "maxItems": null }
```

### Line history: capture it daily

Action Network keeps a game's full timestamped line history for only **a few days after it's
played**. Games from about a week ago come back with every outcome present but an empty history. So
`lineHistory` is a **capture** product, not a backfill one: schedule it daily (or more often) and
each game's complete history, from the opening line to the close, is saved before the site drops it.

Closing odds, final public betting splits, scores and props *are* kept much longer (roughly the last
two seasons for odds and splits; props for at least the past year), so `games` and `props` can be
backfilled for a season with the season/week or date inputs.

### UFC and tennis

UFC bouts and ATP / WTA matches come in the `games` format: the two fighters or players are in the
away/home team fields (their ids are the site's player ids), with `event_title` (the card or
tournament round) and `venue`. UFC rows add `weight_class`, `result_method` (KO/TKO, Submission,
Decision...), `result_round` and `result_clock`; tennis rows add `set_scores` and put sets won in
the score fields.

What the site does **not** have for these sports: public betting splits (so `tickets_pct` and
`money_pct` are empty rather than a misleading 0%), line history, props, injuries, standings and
futures. Their **odds are removed within days of the event**, so scrape upcoming cards and matches
(or schedule a daily run) if you need the prices. Results and winners stay available for years.

### Incremental runs

`games` only, and only when `maxItems` is cleared (`null`); a capped run is a preview and always
returns games. In `auto` mode the first uncapped run returns every game in scope and remembers it.
Later uncapped runs return only new games and games whose **status, start time, score or closing
consensus line** changed (`change_type` is `new` or `changed`). The memory covers every league and
date you've run and forgets games that started more than 60 days ago. A run stopped by `maxItems`,
by your spending limit or by an error doesn't update it. `lineHistory`, `props`, `injuries`,
`standings` and `futures` are always a fresh pull.

### Use it from an AI assistant

Connect Claude, ChatGPT, Cursor or any MCP client to Apify's MCP server and ask in plain words. The
inputs are made for it: teams and sportsbooks by name, `today` instead of a date, and `compact`
rows that fit in an assistant's context.

- "What are the public betting splits on tonight's NBA games?" → `leagues: ["nba"]`, `dateFrom: "today"`, `compact: true`
- "Where is the money going on the Chiefs game?" → `leagues: ["nfl"]`, `teams: ["Chiefs"]`
- "Compare DraftKings and FanDuel on Premier League games this weekend" → `leagues: ["epl"]`, `dateFrom`/`dateTo`, `books: ["DraftKings", "FanDuel"]`
- "Who is on the Lakers injury report, and what are tonight's Lakers props?" → `entityType: "injuries"` or `"props"`, `leagues: ["nba"]`, `teams: ["Lakers"]`

A run whose filters match nothing ends with 0 rows and a status message saying why (for example, no
game involving that team in those dates).

### Use it from Python or the API

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("artsiom_k/actionnetwork-scraper").call(
    run_input={"leagues": ["nfl"], "season": 2025, "maxItems": None}
)
for game in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(game["away_team"], "@", game["home_team"], game["spread_home"],
          "tickets", game["spread_home_tickets_pct"], "money", game["spread_home_money_pct"])
```

The same works from JavaScript, plain HTTP, Make, Zapier, n8n and Google Sheets integrations. AI
agents such as Claude or Cursor can call it through Apify's MCP server.

### FAQ

**Is there an Action Network API?**
Action Network doesn't offer a public self-serve data API. This actor returns the odds, splits, line movement
and props shown on the site as structured data, so it works as an Action Network API alternative.

**What are ticket % and money %?**
Ticket % is the share of bets placed on a side; money % is the share of the dollars wagered. A big
gap between them usually means large bets ("sharp money") are on one side.

**Can I get historical betting odds and public splits?**
Yes. Closing odds and final splits go back roughly two seasons; use `season` (NFL, NCAA Football) or
`dateFrom`/`dateTo` (other leagues). Full line *movement* history is only available for a few days
after each game, so capture it daily.

**Which sportsbooks are covered?**
Consensus, Open (the opening line), DraftKings, FanDuel, BetMGM, Caesars, Fanatics, bet365,
BetRivers, theScore Bet, Hard Rock Bet, Bally Bet, Unibet, BetVictor, Betfred, Bet99, Kalshi and
Polymarket. Pick them by name in `books`.

**Why is a league empty?**
It's out of season, or has no games in the selected dates (European soccer also pauses for
international breaks).

**Why did my run finish with 0 rows?**
The input asks for something the site doesn't have, for example `props` or `lineHistory` for UFC
or tennis only, a team with no game in the chosen leagues and dates, or a date range that is
reversed or longer than 400 days. The run then ends
successfully with 0 rows (you're not charged for rows), and the run's status message and log say
why.

**Do you cover UFC, tennis or golf?**
UFC and ATP / WTA tennis, yes: odds and results (see [UFC and tennis](#ufc-and-tennis)). Golf isn't
covered. For full MMA fighter records and fight histories, see the
[Sherdog Scraper](https://apify.com/artsiom_k/sherdog-scraper).

**Can I get injury reports, ATS records and futures odds?**
Yes, with `entityType` `injuries`, `standings` (includes against-the-spread, over/under and units
records) and `futures`. These are the current snapshot, so schedule a run to keep a history.
Standings are empty for a league between seasons.

**What's in the weather field?**
For NFL and NCAA Football games in the current week: the hourly forecast closest to kickoff
(temperature in °F, wind speed in mph and direction, precipitation, humidity, cloud cover) and the
stadium's roof type and surface. Domed stadiums usually have no forecast.

**Can I export the odds to Excel or CSV?**
Yes: JSON, CSV, Excel, XML or HTML from the Output tab, or through the API. Nested fields
(`consensus`, `books`) are flattened into columns in CSV and Excel.

**Something doesn't work or a field is missing?**
Open an issue on the **Issues** tab; issues are answered promptly.

### Feedback and reviews

Missing a field or hit a problem? Open an issue on the **Issues** tab: issues are answered promptly.

If this Actor is useful to you, please leave a short review on this page. Reviews help other people find it and
help decide what to improve next. Thank you!

### Related sports data scrapers

- [Sports Odds History Scraper](https://apify.com/artsiom_k/sports-odds-history-scraper) — historical opening and closing odds per sportsbook (SportsBookReview) and closing lines with ATS / over-under results back to 2006 (Covers).
- [TennisExplorer Scraper](https://apify.com/artsiom_k/tennisexplorer-scraper) — tennis results back to the 1990s, bookmaker odds per match, match statistics and point-by-point.
- [FantasyPros Scraper](https://apify.com/artsiom_k/fantasypros-scraper) — expert consensus rankings, ADP and projections for NFL, NBA, MLB and NHL.
- [Sherdog Scraper](https://apify.com/artsiom_k/sherdog-scraper) — MMA fighter records, fight histories and event results (UFC, PFL, Bellator, ONE).
- [MotoGP Scraper](https://apify.com/artsiom_k/motogp-scraper) — official MotoGP, Moto2 and Moto3 results and standings.
- [FIBA Scraper](https://apify.com/artsiom_k/fiba-scraper) — international basketball game results and standings.
- [Smarkets Betting Exchange Scraper](https://apify.com/artsiom_k/smarkets-scraper) — betting exchange back and lay odds, matched volume, results and traded-price history.
- [PGA TOUR Scraper](https://apify.com/artsiom_k/pgatour-scraper) — golf results back to the 1950s, hole-by-hole scorecards, FanDuel odds history, tee times and player stats.
- [Kalshi & Polymarket Scraper](https://apify.com/artsiom_k/prediction-markets-scraper) — prediction market odds, settled results and price history for sports, politics, economics and crypto.
- [SofaScore Scraper](https://apify.com/artsiom_k/sofascore-scraper) — results, team statistics, lineups with player ratings, incidents and odds for football, basketball, hockey, tennis and 17 more sports.
- [Flashscore Scraper](https://apify.com/artsiom_k/flashscore-scraper) — results, statistics, lineups, incidents and opening/closing odds from ~20 bookmakers for 17 sports.

# Actor input Schema

## `entityType` (type: `string`):

"games": one row per game (or UFC bout / tennis match) with every sportsbook's moneyline/spread/total, public money & ticket percentages, scores and status; NFL/NCAAF games this week also carry the weather forecast. "lineHistory": one row per game/sportsbook/market with the full timestamped odds and line movement of every outcome (the site keeps this for only a few days after a game, so schedule it). "props": one row per player or game prop market with every sportsbook's lines. "injuries", "standings" and "futures" are the current snapshot per league (dates and season are ignored). Line history, props, injuries, standings and futures are not available for UFC or tennis.

## `leagues` (type: `array`):

Which leagues to pull. Leave all selected for every league. Leagues that are out of season simply return nothing. UFC and tennis have odds and results only: no public betting splits, and their odds disappear from the site within days of the event.

## `teams` (type: `array`):

Only games involving these teams, e.g. "Lakers", "Kansas City Chiefs", "NYY", or UFC fighters / tennis players ("Djokovic"). Matches whole words of the name or the abbreviation, any case. Also filters injuries, standings and futures. Line history and props are only fetched for the matching games, so a team filter makes those runs much faster. Empty = every game.

## `dateFrom` (type: `string`):

First game day for the daily leagues (NBA, NCAAB, WNBA, MLB, NHL, soccer, UFC, tennis), in US Eastern time: a date like 2026-01-15, or "today", "tomorrow" or "yesterday". Empty dateFrom/dateTo = each league's current slate (in the US morning that can still be last night's games; use "today" for today's). NFL and NCAA Football ignore dates: use season/week. Odds and betting splits go back roughly two seasons for team sports; line history only a few days; UFC/tennis odds only a few days (results much longer).

## `dateTo` (type: `string`):

Last game day (inclusive), same format as dateFrom (e.g. "tomorrow" for today and tomorrow). Defaults to dateFrom when only dateFrom is set. At most 400 days per run.

## `season` (type: `integer`):

Season year for NFL and NCAA Football, e.g. 2025. Setting it walks the weeks below; leave empty for the current week's slate.

## `weekFrom` (type: `integer`):

First week to pull when season is set. With only weekFrom, just that week. Defaults to week 1.

## `weekTo` (type: `integer`):

Last week to pull when season is set. Defaults to the end of the regular season (18 for NFL, 16 for NCAA Football) or of the postseason.

## `seasonType` (type: `string`):

Regular season or postseason (playoffs / bowl games) for NFL and NCAA Football.

## `books` (type: `array`):

Only these sportsbooks. Empty = the site's default set (Consensus, Open and about five major US books); for futures, every book that offers futures. Books outside the default set (bet365, Fanatics, Caesars, Hard Rock, Kalshi, ...) appear only when chosen here. Consensus (the public betting splits) and Open (opening line) are always included. Through the API, names are matched case-insensitively ("draftkings", "DK").

## `compact` (type: `boolean`):

Smaller rows, for AI agents and spreadsheets: games get one flat price set per sportsbook (moneyline, spread, total and their odds) instead of the nested markets, alternates and team totals; line history keeps each outcome's opening and current price and number of moves but not the full time series; props keep book, side, line and odds. Same field names as the full rows.

## `maxItems` (type: `integer`):

Stop after pushing this many rows. Defaults to 50 - a fast, cheap preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. Set to null for everything in the selected scope. Props rows are numerous (hundreds per game), so cap them.

## `mode` (type: `string`):

Applies to "games" only. "auto": the first run returns every game; later runs, with maxItems cleared, only new games and games whose status, score or closing lines changed. A capped run (the default preview) always returns games. "full": always every game. "incremental": only new/changed. Line history, props, injuries, standings and futures are always a fresh pull.

## `bookIds` (type: `array`):

Older way to pick sportsbooks by Action Network book id (state-specific, e.g. 68 = DraftKings NJ). Prefer "Sportsbooks" above; both can be combined.

## `concurrency` (type: `integer`):

Parallel requests (max 20). Line-history and props runs fetch one request per game.

## `impersonate` (type: `string`):

curl_cffi browser TLS-impersonation target. Defaults to "firefox" internally; change only if requests start being blocked.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Not needed: the API answered every request from Apify's infrastructure in testing without a proxy.

## Actor input object example

```json
{
  "entityType": "games",
  "leagues": [
    "nfl",
    "ncaaf",
    "nba",
    "ncaab",
    "wnba",
    "mlb",
    "nhl",
    "epl",
    "laliga",
    "bundesliga",
    "seriea",
    "ligue1",
    "champions",
    "europa",
    "mls",
    "ufc",
    "atp",
    "wta"
  ],
  "seasonType": "reg",
  "compact": false,
  "maxItems": 50,
  "mode": "auto",
  "concurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("artsiom_k/actionnetwork-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("artsiom_k/actionnetwork-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call artsiom_k/actionnetwork-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,artsiom_k/actionnetwork-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8oPWkncZLRDyn432A/builds/cbhw8EINuEYh93B6h/openapi.json
