{
  "openapi": "3.0.1",
  "info": {
    "title": "Sports Odds Scraper — Pinnacle, DraftKings, Bovada & Smarkets",
    "description": "Betting odds from Pinnacle, DraftKings, Bovada and the Smarkets exchange in one dataset: moneyline, spread and total for NFL, NBA, NHL, MLB, college, UFC and 14 soccer leagues, with no-vig fair probabilities, edge vs Pinnacle, best price and arbitrage checks. No login.",
    "version": "0.1",
    "x-build-id": "ocRHYEirUidwnnTgI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~sports-odds-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-sports-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/yugenox~sports-odds-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-sports-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/yugenox~sports-odds-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-sports-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": {
          "leagues": {
            "title": "Leagues",
            "type": "array",
            "description": "Which leagues to read. Each league is read from every selected book that covers it. Off-season leagues simply return no games.",
            "items": {
              "type": "string",
              "enum": [
                "nfl",
                "ncaaf",
                "cfl",
                "nba",
                "ncaab",
                "wnba",
                "euroleague",
                "nhl",
                "mlb",
                "ufc",
                "epl",
                "championship",
                "la-liga",
                "serie-a",
                "bundesliga",
                "ligue-1",
                "champions-league",
                "europa-league",
                "mls",
                "eredivisie",
                "primeira-liga",
                "liga-mx",
                "brasileirao",
                "scottish-premiership"
              ],
              "enumTitles": [
                "NFL",
                "NCAA Football",
                "CFL",
                "NBA",
                "NCAA Basketball",
                "WNBA",
                "EuroLeague",
                "NHL",
                "MLB",
                "UFC",
                "English Premier League",
                "English Championship",
                "La Liga",
                "Serie A",
                "Bundesliga",
                "Ligue 1",
                "UEFA Champions League",
                "UEFA Europa League",
                "MLS",
                "Eredivisie",
                "Primeira Liga",
                "Liga MX",
                "Brasileirão Série A",
                "Scottish Premiership"
              ]
            },
            "default": [
              "nfl"
            ]
          },
          "books": {
            "title": "Sportsbooks",
            "type": "array",
            "description": "Books whose prices are saved. Pinnacle is always read as the fair-price reference (for the no-vig and edge columns), but its rows are only saved when it is selected here.",
            "items": {
              "type": "string",
              "enum": [
                "pinnacle",
                "draftkings",
                "bovada",
                "smarkets"
              ],
              "enumTitles": [
                "Pinnacle (sharp line, with its stake limit)",
                "DraftKings (with the opening line)",
                "Bovada",
                "Smarkets exchange (back + lay prices, liquidity, traded volume)"
              ]
            },
            "default": [
              "pinnacle",
              "draftkings",
              "bovada",
              "smarkets"
            ]
          },
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Full-game markets: moneyline (match result; 3-way with the draw in soccer), spread (point spread / Asian handicap) and total (over/under).",
            "items": {
              "type": "string",
              "enum": [
                "moneyline",
                "spread",
                "total"
              ],
              "enumTitles": [
                "Moneyline / match result",
                "Spread / handicap",
                "Total (over/under)"
              ]
            },
            "default": [
              "moneyline",
              "spread",
              "total"
            ]
          },
          "hoursAhead": {
            "title": "Games starting within (hours)",
            "minimum": 0,
            "maximum": 1440,
            "type": "integer",
            "description": "Only games that start within this many hours from now. 0 = every game the books list (usually the next 1-2 weeks).",
            "default": 168
          },
          "maxItems": {
            "title": "Max rows",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of rows for the whole run (each row = one book's price for one outcome). 0 = no limit. One NFL week on all four books is about 340 rows.",
            "default": 1000
          },
          "minEdgePct": {
            "title": "Only +EV prices: minimum edge vs Pinnacle (%)",
            "minimum": -100,
            "maximum": 100,
            "type": "number",
            "description": "Keep only prices at least this many percent above Pinnacle's no-vig fair price (e.g. 0 = every +EV price, 2 = 2% or more). Leave empty to save every price."
          },
          "includeBestLines": {
            "title": "Add best-line / arbitrage rows",
            "type": "boolean",
            "description": "Adds one row per game, market and line with the best price per outcome across the selected books, the combined implied probability and, when it is below 100%, the arbitrage profit and stake split.",
            "default": false
          },
          "onlyArbitrage": {
            "title": "Only arbitrage rows",
            "type": "boolean",
            "description": "Save only the best-line rows that are an arbitrage (no per-book rows). Runs without an arbitrage save nothing and cost only the run and league-read fees.",
            "default": false
          },
          "onlyChanged": {
            "title": "Only changed prices (monitoring)",
            "type": "boolean",
            "description": "For scheduled runs: save only prices that are new or moved since the last run with the same settings (the previous price is in previousPriceDecimal). Unchanged prices are skipped and not charged.",
            "default": false
          },
          "allLines": {
            "title": "Alternate lines",
            "type": "boolean",
            "description": "Also save alternate spread and total lines (Pinnacle's alternates and the Smarkets line ladder). Off = each book's main line, plus the Smarkets lines that match the other books'.",
            "default": false
          },
          "includeLive": {
            "title": "Include live games",
            "type": "boolean",
            "description": "Also save games already in play (in-play prices move every few seconds). Off = upcoming games only.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy (datacenter) is the default and comes with every Apify plan. If a book keeps refusing datacenter IPs, or does not serve their country, the run asks it again through residential proxies when your account has them.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}