{
  "openapi": "3.0.1",
  "info": {
    "title": "Sports Odds Scraper: NFL, NBA, MLB & Soccer Lines",
    "description": "Pregame odds for NFL, NBA, WNBA, MLB, NHL, UFC, college and top soccer leagues: moneyline, spread and total per game in one normalized schema, American or decimal format. Keyless public feed, no proxy, no browser. One row per game, pay per row.",
    "version": "0.1",
    "x-build-id": "4A6N1YI5W30IYSfWT"
  },
  "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": "Sports/leagues to sweep: nfl, ncaaf, nba, wnba, ncaab, mlb, nhl, ufc, soccer_epl, soccer_laliga, soccer_bundesliga, soccer_seriea, soccer_ligue1, soccer_mls, soccer_uefa_cl, soccer_uefa_el (or short forms like epl, mls, ucl). Any ESPN sport/league path like soccer/bra.1 also works.",
            "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": "No longer supported (the sportsbook pages these pointed at block automated access). Use sports[] instead; URL entries return a free explanatory row.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "books": {
            "title": "Sportsbooks to include",
            "type": "array",
            "description": "No longer used, kept so older saved inputs keep working. Every run reads both available feeds: one bookmaker via ESPN's public scoreboard, typically DraftKings, plus Bovada's own prices. Setting this has no effect on what is returned.",
            "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": []
          },
          "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": "Attach a bestPrice field per outcome with the highest odds and which book offers it, compared across the books that priced that outcome. Events carried by only one book are left alone.",
            "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": "No longer used (one request per sport now). Kept for compatibility.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not used: the odds source works from datacenter IPs without any proxy. Kept for compatibility with older saved inputs.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}