{
  "openapi": "3.0.1",
  "info": {
    "title": "Sports Odds Comparison Scraper - 6 Sportsbooks & Arbitrage",
    "description": "Betting odds from Pinnacle, DraftKings, FanDuel, Bovada, BetRivers and Unibet on one row per game: best price, margin, arbitrage. Export CSV, Excel, JSON, XML.",
    "version": "0.1",
    "x-build-id": "6aGgNORjCHjmE2dbw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parseforge~sports-odds-comparison-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parseforge-sports-odds-comparison-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/parseforge~sports-odds-comparison-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parseforge-sports-odds-comparison-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/parseforge~sports-odds-comparison-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parseforge-sports-odds-comparison-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",
            "uniqueItems": true,
            "type": "array",
            "description": "Leagues to compare. Each league is read from every source that covers it, so a sport out of season simply returns no games.",
            "items": {
              "type": "string",
              "enum": [
                "nfl",
                "ncaaf",
                "nba",
                "ncaab",
                "wnba",
                "mlb",
                "nhl",
                "ufc",
                "epl",
                "laliga",
                "bundesliga",
                "seriea",
                "ligue1",
                "mls",
                "ucl"
              ],
              "enumTitles": [
                "NFL",
                "NCAA Football",
                "NBA",
                "NCAA Basketball",
                "WNBA",
                "MLB",
                "NHL",
                "UFC",
                "Premier League",
                "La Liga",
                "Bundesliga",
                "Serie A",
                "Ligue 1",
                "MLS",
                "Champions League"
              ]
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of rows to return. Free users: 10 rows per run. Paid users: up to 1,000,000."
          },
          "mode": {
            "title": "Output mode",
            "enum": [
              "events",
              "bestLines",
              "arbitrage",
              "valueBets"
            ],
            "type": "string",
            "description": "Events: one row per game with every book's price side by side. Best lines: one row per outcome with the best price and where to get it. Arbitrage: one row per sure bet with the stake split. Value bets: prices that beat the fair (no-vig) price.",
            "default": "events"
          },
          "oddsFormat": {
            "title": "Odds format",
            "enum": [
              "both",
              "american",
              "decimal"
            ],
            "type": "string",
            "description": "Every price is normalised from decimal odds. Both keeps American and decimal side by side.",
            "default": "both"
          },
          "markets": {
            "title": "Markets",
            "uniqueItems": true,
            "type": "array",
            "description": "Moneyline (or 1X2 in football), point/goal spread, and over/under totals. Full-game lines only.",
            "items": {
              "type": "string",
              "enum": [
                "moneyline",
                "spread",
                "total"
              ],
              "enumTitles": [
                "Moneyline / 1X2",
                "Spread / handicap",
                "Totals (over/under)"
              ]
            },
            "default": [
              "moneyline",
              "spread",
              "total"
            ]
          },
          "books": {
            "title": "Sportsbooks",
            "uniqueItems": true,
            "type": "array",
            "description": "Leave empty for every direct book (US books, Pinnacle, Bovada, Unibet). Add European bookmakers to also read about 14 more bookmakers per football match (football leagues only). That option routes through a residential proxy, so it is slower.",
            "items": {
              "type": "string",
              "enum": [
                "pinnacle",
                "bovada",
                "unibet_uk",
                "draftkings",
                "fanduel",
                "betmgm",
                "caesars",
                "betrivers",
                "bet365",
                "unibet_us",
                "fanatics",
                "hardrock",
                "ballybet",
                "thescore",
                "european"
              ],
              "enumTitles": [
                "Pinnacle",
                "Bovada",
                "Unibet (Kambi)",
                "DraftKings",
                "FanDuel",
                "BetMGM",
                "Caesars",
                "BetRivers",
                "bet365",
                "Unibet US",
                "Fanatics",
                "Hard Rock Bet",
                "Bally Bet",
                "theScore Bet",
                "European bookmakers (football, slower)"
              ]
            }
          },
          "daysAhead": {
            "title": "Days ahead",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Only games starting within this many days.",
            "default": 7
          },
          "minBooks": {
            "title": "Minimum books per market",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Skip markets priced by fewer books than this. Use 2 or more for a real comparison.",
            "default": 2
          },
          "includeLive": {
            "title": "Include in-play games",
            "type": "boolean",
            "description": "In-play prices move within seconds and are stale by the time a run ends, so sure bets are hidden for live games unless this is on.",
            "default": false
          },
          "maxMatchesPerLeague": {
            "title": "Max matches per league (European books)",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Each football match on the European list needs its own request, so this caps the extra time per league.",
            "default": 20
          },
          "bankroll": {
            "title": "Bankroll for stake split",
            "minimum": 1,
            "type": "number",
            "description": "Total amount to split across the legs of a sure bet (arbitrage mode). Stakes are rounded to cents.",
            "default": 100
          },
          "minProfitPercent": {
            "title": "Minimum profit %",
            "minimum": -50,
            "maximum": 100,
            "type": "number",
            "description": "Arbitrage mode: only sure bets at or above this profit. Use a negative number such as -1 to also list near misses.",
            "default": 0
          },
          "minEdgePercent": {
            "title": "Minimum edge %",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "Value bets mode: minimum expected value versus the fair price (Pinnacle without margin, or the consensus of 3+ books).",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Requests go direct first. If a book refuses the address the run switches to Apify datacenter proxy for that book.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}