{
  "openapi": "3.0.1",
  "info": {
    "title": "Arbitrage & Value Bets Finder: Surebets & +EV, 30+ Bookmakers",
    "description": "Find sports betting arbitrage (surebets) and value bets (+EV) across 30+ bookmakers: football, tennis, NBA, NFL, NHL, MLB and 18 more sports. Stake split for every arbitrage, fair odds and edge for every value bet, stale prices filtered out.",
    "version": "0.1",
    "x-build-id": "Ba8M6CA0t3ZZZhvkN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sports-odds-lab~arbitrage-value-bets-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sports-odds-lab-arbitrage-value-bets-finder",
        "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/sports-odds-lab~arbitrage-value-bets-finder/runs": {
      "post": {
        "operationId": "runs-sync-sports-odds-lab-arbitrage-value-bets-finder",
        "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/sports-odds-lab~arbitrage-value-bets-finder/run-sync": {
      "post": {
        "operationId": "run-sync-sports-odds-lab-arbitrage-value-bets-finder",
        "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": {
          "find": {
            "title": "What to find",
            "type": "array",
            "description": "Arbitrage: the best prices of every outcome of one bet, at different bookmakers, add up to less than 100 % — staking as shown returns the same amount whatever happens. Value bets: a bookmaker's price above the fair (margin-free) price of the rest of the market.",
            "items": {
              "type": "string",
              "enum": [
                "arbitrage",
                "value"
              ],
              "enumTitles": [
                "Arbitrage (surebets)",
                "Value bets (+EV)"
              ]
            },
            "default": [
              "arbitrage",
              "value"
            ]
          },
          "sports": {
            "title": "Sports",
            "type": "array",
            "description": "Sports to scan. Each sport adds its matches of the next hours; football and tennis have the most.",
            "items": {
              "type": "string",
              "enum": [
                "soccer",
                "basketball",
                "hockey",
                "tennis",
                "volleyball",
                "handball",
                "americanFootball",
                "baseball",
                "rugbyUnion",
                "rugbyLeague",
                "cricket",
                "darts",
                "snooker",
                "esports",
                "mma",
                "boxing",
                "futsal",
                "floorball",
                "fieldHockey",
                "waterPolo",
                "beachVolleyball",
                "badminton",
                "tableTennis",
                "aussieRules"
              ],
              "enumTitles": [
                "Football (soccer)",
                "Basketball",
                "Ice hockey",
                "Tennis",
                "Volleyball",
                "Handball",
                "American football",
                "Baseball",
                "Rugby union",
                "Rugby league",
                "Cricket",
                "Darts",
                "Snooker",
                "Esports",
                "MMA",
                "Boxing",
                "Futsal",
                "Floorball",
                "Field hockey",
                "Water polo",
                "Beach volleyball",
                "Badminton",
                "Table tennis",
                "Aussie rules (AFL)"
              ]
            },
            "default": [
              "soccer",
              "tennis",
              "basketball",
              "hockey",
              "americanFootball",
              "baseball",
              "volleyball",
              "handball"
            ]
          },
          "hoursAhead": {
            "title": "Hours ahead",
            "minimum": 1,
            "maximum": 168,
            "type": "integer",
            "description": "Matches starting within this many hours (up to 168 = 7 days). Prices closest to kick-off are the most accurate.",
            "default": 24
          },
          "maxMatches": {
            "title": "Max matches to scan",
            "minimum": 0,
            "type": "integer",
            "description": "The matches that start first are scanned first (0 = all). About 600 matches take a minute or two.",
            "default": 500
          },
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Match winner = 1X2 where draws are possible (plus the 2-way winner with overtime in ice hockey). Handicap and total: every line, each kind of line kept apart (games vs sets in tennis). Both teams to score: football.",
            "items": {
              "type": "string",
              "enum": [
                "matchWinner",
                "handicap",
                "total",
                "btts"
              ],
              "enumTitles": [
                "Match winner / 1X2 / moneyline",
                "Handicap / spread (every line)",
                "Total / over-under (every line)",
                "Both teams to score"
              ]
            },
            "default": [
              "matchWinner",
              "handicap",
              "total",
              "btts"
            ]
          },
          "bookmakers": {
            "title": "Only my bookmakers",
            "type": "array",
            "description": "Optional. Names or parts of names, e.g. bet365, Betfred, Skybet, Betway, DraftKings, FanDuel, Betano. Leave empty for all (about 30 per match).",
            "items": {
              "type": "string"
            }
          },
          "excludeBookmakers": {
            "title": "Exclude bookmakers",
            "type": "array",
            "description": "Optional. Bookmakers never to bet with (they still count in the fair price).",
            "items": {
              "type": "string"
            }
          },
          "minProfitPct": {
            "title": "Min arbitrage profit (%)",
            "minimum": 0,
            "type": "number",
            "description": "Guaranteed return above the total stake, in %.",
            "default": 0.5
          },
          "maxProfitPct": {
            "title": "Max arbitrage profit (%)",
            "minimum": 0,
            "type": "number",
            "description": "Bigger \"arbitrages\" are almost always a bookmaker's error that it will void (palpable error). Raise it to see them anyway.",
            "default": 5
          },
          "stake": {
            "title": "Total stake",
            "minimum": 1,
            "type": "number",
            "description": "Split across the legs of every arbitrage, in your currency.",
            "default": 100
          },
          "minEdgePct": {
            "title": "Min value edge (%)",
            "minimum": 0,
            "type": "number",
            "description": "Price × fair probability − 1, in %. 4 % keeps the clearer cases; 2 % finds many more.",
            "default": 4
          },
          "maxEdgePct": {
            "title": "Max value edge (%)",
            "minimum": 0,
            "type": "number",
            "description": "Edges above this are usually stale or wrong prices.",
            "default": 15
          },
          "maxOdds": {
            "title": "Max odds",
            "minimum": 1.01,
            "type": "number",
            "description": "Leave out long shots (decimal odds above this).",
            "default": 6
          },
          "minBookmakers": {
            "title": "Min bookmakers in the market",
            "minimum": 3,
            "type": "integer",
            "description": "A bet is checked only when at least this many bookmaker brands price it — a thin market has no reliable fair price.",
            "default": 5
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Optional. Country of the competition as on Flashscore, e.g. England, Spain, USA, World, Europe.",
            "items": {
              "type": "string"
            }
          },
          "competitions": {
            "title": "Competitions",
            "type": "array",
            "description": "Optional. 'Country: Competition' as on Flashscore, e.g. 'England: Premier League', 'USA: NBA', or just 'NBA'.",
            "items": {
              "type": "string"
            }
          },
          "includeWomen": {
            "title": "Include women's competitions",
            "type": "boolean",
            "description": "Women's leagues and tournaments (WTA, women's football, basketball…).",
            "default": true
          },
          "includeYouth": {
            "title": "Include youth and reserve competitions",
            "type": "boolean",
            "description": "Thinly priced; off by default.",
            "default": false
          },
          "oddsFormat": {
            "title": "Odds format",
            "enum": [
              "decimal",
              "american"
            ],
            "type": "string",
            "description": "Odds in the output: decimal (2.10) or American (+110).",
            "default": "decimal"
          },
          "onlyNew": {
            "title": "Only new opportunities",
            "type": "boolean",
            "description": "Leave out (and don't pay for) opportunities that earlier runs of the same search already delivered in the last 24 hours, unless the profit or edge grew by a point since. Remembered in your account (key-value store 'arbitrage-finder-seen').",
            "default": false
          },
          "historyName": {
            "title": "History name",
            "type": "string",
            "description": "Optional. Each search keeps its own history automatically; give several schedules the same name to share one."
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 192,
            "type": "integer",
            "description": "Parallel requests to the source.",
            "default": 128
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}