{
  "openapi": "3.0.1",
  "info": {
    "title": "Action Network Odds & Public Betting Scraper",
    "description": "Scrapes sportsbook odds, public betting splits, opening lines, line movement, sharp-money signals, arbitrage and middles, player props, weather, injuries, futures and ATS standings for NFL, NBA, MLB, NHL, college, soccer and more from Action Network.",
    "version": "1.0",
    "x-build-id": "gEeWzh0pz0vaUumyM"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/confidential_gnat~action-network-odds-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-confidential_gnat-action-network-odds-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/confidential_gnat~action-network-odds-scraper/runs": {
      "post": {
        "operationId": "runs-sync-confidential_gnat-action-network-odds-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/confidential_gnat~action-network-odds-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-confidential_gnat-action-network-odds-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "dataType": {
            "title": "Data to scrape",
            "enum": [
              "games",
              "futures",
              "injuries",
              "standings"
            ],
            "type": "string",
            "description": "Games = odds, public betting and signals. Futures = outright markets (championship, MVP, win totals). Injuries = league injury report. Standings = records including against-the-spread and over/under.",
            "default": "games"
          },
          "startUrls": {
            "title": "League page URLs",
            "type": "array",
            "description": "Optional Action Network league pages, e.g. https://www.actionnetwork.com/nfl/odds. The league is read from the URL.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "leagues": {
            "title": "Leagues",
            "type": "array",
            "description": "Leagues to scrape. Combined with any league taken from the URLs above.",
            "items": {
              "type": "string",
              "enum": [
                "nfl",
                "nba",
                "mlb",
                "nhl",
                "ncaaf",
                "ncaab",
                "wnba",
                "cfl",
                "mls",
                "epl",
                "laliga",
                "bundesliga",
                "seriea",
                "ligue1"
              ],
              "enumTitles": [
                "NFL",
                "NBA",
                "MLB",
                "NHL",
                "NCAA Football",
                "NCAA Basketball",
                "WNBA",
                "CFL",
                "MLS",
                "Premier League",
                "La Liga",
                "Bundesliga",
                "Serie A",
                "Ligue 1"
              ]
            },
            "default": [
              "nfl"
            ]
          },
          "dates": {
            "title": "Dates",
            "type": "array",
            "description": "Dates (YYYY-MM-DD) to scrape for date-based leagues (everything except NFL and NCAA Football). Leave empty for the current slate.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "weeks": {
            "title": "Weeks",
            "type": "array",
            "description": "Week numbers for NFL and NCAA Football. Leave empty for the current week.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "books": {
            "title": "Sportsbooks",
            "type": "array",
            "description": "Sportsbooks to include in the per-book odds. Consensus (public splits) and opening lines are always included.",
            "items": {
              "type": "string",
              "enum": [
                "draftkings",
                "fanduel",
                "betmgm",
                "caesars",
                "bet365",
                "betrivers",
                "unibet"
              ],
              "enumTitles": [
                "DraftKings",
                "FanDuel",
                "BetMGM",
                "Caesars",
                "bet365",
                "BetRivers",
                "Unibet"
              ]
            },
            "default": [
              "draftkings",
              "fanduel",
              "betmgm",
              "caesars",
              "bet365",
              "betrivers",
              "unibet"
            ]
          },
          "gameStatus": {
            "title": "Game status",
            "enum": [
              "all",
              "scheduled",
              "live",
              "complete"
            ],
            "type": "string",
            "description": "Keep only games in this state.",
            "default": "all"
          },
          "teams": {
            "title": "Teams",
            "type": "array",
            "description": "Keep only games (or injury reports) involving one of these teams (name or abbreviation, e.g. Cowboys, DAL).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minBets": {
            "title": "Minimum bets",
            "minimum": 0,
            "type": "integer",
            "description": "Skip games with fewer tracked bets than this.",
            "default": 0
          },
          "minSharpMoneyGap": {
            "title": "Minimum sharp money gap (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only games where, on some side, the share of money exceeds the share of tickets by at least this many percentage points.",
            "default": 0
          },
          "includeWeather": {
            "title": "Include venue & weather",
            "type": "boolean",
            "description": "Adds venue, roof type and game-time weather to each game. Billed as a game-details event.",
            "default": false
          },
          "includeInjuries": {
            "title": "Include game injuries",
            "type": "boolean",
            "description": "Adds the injury report for both teams to each game. Billed as a game-details event.",
            "default": false
          },
          "includeTeamStats": {
            "title": "Include team stats",
            "type": "boolean",
            "description": "Adds season team stats for both teams to each game. Billed as a game-details event.",
            "default": false
          },
          "includeProps": {
            "title": "Include player props",
            "type": "boolean",
            "description": "Adds player prop lines (consensus, opening and per-book). Billed as a game-details event.",
            "default": false
          },
          "propTypes": {
            "title": "Prop types",
            "type": "array",
            "description": "Short names such as passing_yards, rushing_yards, receiving_yards, receptions, anytime_td (NFL/NCAAF); points, rebounds, assists, threes (basketball); strikeouts, hits, total_bases, home_runs (MLB); shots_on_goal, points, saves (NHL). Raw core_bet_type_* ids also work. Empty uses the first three for each sport.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "futureCategories": {
            "title": "Futures markets",
            "type": "array",
            "description": "For the Futures data type: words that must appear in the market name, e.g. Superbowl, MVP, Total Wins. Empty returns the first market only.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "snapshotName": {
            "title": "Snapshot name",
            "type": "string",
            "description": "Give scheduled runs the same name and each game gets changeSinceLastRun: how its spread, total and moneyline moved since the previous run."
          },
          "alertWebhookUrl": {
            "title": "Alert webhook URL",
            "type": "string",
            "description": "Slack, Discord or any HTTPS endpoint. Receives a JSON POST with the flagged games after the run."
          },
          "alertOn": {
            "title": "Alert on",
            "type": "array",
            "description": "What triggers an alert. Empty means reverse line moves, steam and arbitrage.",
            "items": {
              "type": "string",
              "enum": [
                "reverse_line_move",
                "steam",
                "arbitrage",
                "middle",
                "sharp_gap",
                "line_move"
              ],
              "enumTitles": [
                "Reverse line move",
                "Steam",
                "Arbitrage",
                "Middle",
                "Sharp money gap",
                "Line moved since last run"
              ]
            },
            "default": []
          },
          "alertMinLineMove": {
            "title": "Alert: minimum line move",
            "minimum": 0,
            "type": "number",
            "description": "Points the spread or total must move since the last run (needs a snapshot name).",
            "default": 1
          },
          "alertMinSharpGap": {
            "title": "Alert: minimum sharp gap (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Money share minus ticket share needed for a sharp-gap alert.",
            "default": 20
          },
          "maxItems": {
            "title": "Max items per league",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum games (or futures rows, injuries, teams) saved for each league.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed for normal use. Enable only if you see blocked requests.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}