{
  "openapi": "3.0.1",
  "info": {
    "title": "Sports Odds Scraper",
    "description": "Scrape live sports betting odds across DraftKings, Pinnacle, FanDuel, BetMGM, Caesars, Bet365 and more. H2H, spreads, totals, props. Normalized schema, best price per outcome, arbitrage detection. No third party API key. Pay per row.",
    "version": "0.1",
    "x-build-id": "g3msbE9anJxk4FFpY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapemint~sports-odds-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapemint-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/scrapemint~sports-odds-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapemint-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/scrapemint~sports-odds-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapemint-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": {
          "sports": {
            "title": "Sports + leagues",
            "type": "array",
            "description": "Pick which leagues to scrape. Each pulls every upcoming event with currently posted lines from the selected sportsbooks.",
            "items": {
              "type": "string",
              "enum": [
                "nfl",
                "ncaaf",
                "nba",
                "wnba",
                "ncaab",
                "mlb",
                "nhl",
                "ufc",
                "boxing",
                "soccer_epl",
                "soccer_laliga",
                "soccer_bundesliga",
                "soccer_seriea",
                "soccer_ligue1",
                "soccer_mls",
                "soccer_uefa_cl",
                "soccer_uefa_el",
                "tennis_atp",
                "tennis_wta",
                "golf_pga",
                "f1",
                "esports_csgo",
                "esports_lol",
                "esports_dota2"
              ],
              "enumTitles": [
                "NFL",
                "NCAA Football",
                "NBA",
                "WNBA",
                "NCAA Basketball",
                "MLB",
                "NHL",
                "UFC / MMA",
                "Boxing",
                "Soccer - Premier League",
                "Soccer - La Liga",
                "Soccer - Bundesliga",
                "Soccer - Serie A",
                "Soccer - Ligue 1",
                "Soccer - MLS",
                "Soccer - UEFA Champions League",
                "Soccer - UEFA Europa League",
                "Tennis - ATP",
                "Tennis - WTA",
                "Golf - PGA",
                "Formula 1",
                "Esports - CS:GO",
                "Esports - League of Legends",
                "Esports - Dota 2"
              ]
            },
            "default": []
          },
          "eventUrls": {
            "title": "Event URLs",
            "type": "array",
            "description": "Direct event page URLs from any supported sportsbook (DraftKings, Pinnacle, FanDuel, BetMGM, Caesars, Bet365). Mix and match. Unknown books fall back to JSON-LD extraction.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "books": {
            "title": "Sportsbooks to include",
            "type": "array",
            "description": "Which sportsbooks to query when sports + leagues are selected. Empty means all supported books.",
            "items": {
              "type": "string",
              "enum": [
                "draftkings",
                "pinnacle",
                "fanduel",
                "betmgm",
                "caesars",
                "bet365"
              ],
              "enumTitles": [
                "DraftKings (US)",
                "Pinnacle (Global, sharpest lines)",
                "FanDuel (US)",
                "BetMGM (US)",
                "Caesars (US)",
                "Bet365 (Global)"
              ]
            },
            "default": [
              "draftkings",
              "pinnacle"
            ]
          },
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Which betting markets to pull per event.",
            "items": {
              "type": "string",
              "enum": [
                "h2h",
                "spreads",
                "totals",
                "player_props",
                "team_totals",
                "first_half"
              ],
              "enumTitles": [
                "Moneyline (h2h)",
                "Spreads / point spread",
                "Totals (over / under)",
                "Player props",
                "Team totals",
                "First half"
              ]
            },
            "default": [
              "h2h",
              "spreads",
              "totals"
            ]
          },
          "oddsFormat": {
            "title": "Odds format",
            "enum": [
              "american",
              "decimal",
              "fractional",
              "implied_probability"
            ],
            "type": "string",
            "description": "How to express prices in the row.",
            "default": "american"
          },
          "computeBestPrice": {
            "title": "Compute best price per outcome",
            "type": "boolean",
            "description": "When at least two books are queried, attach a bestPrice field per outcome with the highest odds and which book offers it.",
            "default": true
          },
          "computeArbitrage": {
            "title": "Compute arbitrage edges",
            "type": "boolean",
            "description": "Flag two way and three way markets where the best prices across books guarantee a profit. Adds an arbitrage object per market when found.",
            "default": false
          },
          "minArbPct": {
            "title": "Minimum arbitrage edge (%)",
            "minimum": 0,
            "maximum": 50,
            "type": "number",
            "description": "Drop arbitrage opportunities below this edge. 0.5 means at least 0.5% guaranteed return.",
            "default": 0
          },
          "minBestEdgePct": {
            "title": "Minimum best price edge vs market average (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "Filter best price flags to only those that beat the average price across books by this percent.",
            "default": 0
          },
          "totalMaxEvents": {
            "title": "Total maximum events",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on event rows pushed per run. 0 means unlimited.",
            "default": 50
          },
          "maxEventsPerSport": {
            "title": "Max events per sport",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Per league cap. Useful when scraping multiple leagues in one run.",
            "default": 100
          },
          "includeStartedEvents": {
            "title": "Include in play events",
            "type": "boolean",
            "description": "Include events already in progress. Off keeps the feed to upcoming events only.",
            "default": false
          },
          "lookAheadHours": {
            "title": "Look ahead window (hours)",
            "minimum": 0,
            "maximum": 720,
            "type": "integer",
            "description": "Only return events starting within this many hours from now. 0 means no time limit.",
            "default": 0
          },
          "dedupe": {
            "title": "Deduplicate across runs",
            "type": "boolean",
            "description": "Skip event IDs already pushed in previous runs (keyed by sport + home + away + commenceTime). Turn off to refresh stale rows.",
            "default": true
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Number of book + sport combinations fetched in parallel.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy. Pinnacle public API works on datacenter or unproxied. DraftKings is geo gated and Akamai protected, so US residential is required. FanDuel, BetMGM, Bet365 also need residential.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}