{
  "openapi": "3.0.1",
  "info": {
    "title": "Flashscore Betting Odds & Opening Lines Scraper",
    "description": "Scrape pre-match betting odds from Flashscore: 1X2, over/under, Asian handicap, BTTS and more from 100+ bookmakers across countries, with opening prices and margins, plus outright winner odds for leagues and teams. 21 sports, one flat row per bookmaker line. No API key, no proxy.",
    "version": "1.0",
    "x-build-id": "6pgIyWpOLBFgZ75Nw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/incognito_mode~flashscore-odds-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-incognito_mode-flashscore-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/incognito_mode~flashscore-odds-scraper/runs": {
      "post": {
        "operationId": "runs-sync-incognito_mode-flashscore-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/incognito_mode~flashscore-odds-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-incognito_mode-flashscore-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "matches",
              "outrights"
            ],
            "type": "string",
            "description": "`matches`: odds for matches (the fields below). `outrights`: who-wins-the-competition odds for the league and team URLs in Outright URLs; Sports, Days, Status, Leagues, Match IDs, Markets, Periods and Lines are then ignored.",
            "default": "matches"
          },
          "outrightUrls": {
            "title": "Outright URLs",
            "type": "array",
            "description": "Outrights mode only. A league page gives every participant's price to win that competition (e.g. https://www.flashscore.com/football/england/premier-league/). A team page gives the team's price in each competition it can win (e.g. https://www.flashscore.com/team/arsenal/hA1Zm19f/).",
            "items": {
              "type": "string"
            }
          },
          "sports": {
            "title": "Sports",
            "type": "array",
            "description": "Which sports to list matches for. Ignored when Match IDs are given.",
            "items": {
              "type": "string",
              "enum": [
                "football",
                "tennis",
                "basketball",
                "hockey",
                "american-football",
                "baseball",
                "handball",
                "volleyball",
                "rugby-union",
                "rugby-league",
                "cricket",
                "futsal",
                "floorball",
                "aussie-rules",
                "badminton",
                "water-polo",
                "field-hockey",
                "table-tennis",
                "boxing",
                "mma",
                "esports"
              ],
              "enumTitles": [
                "Football (soccer)",
                "Tennis",
                "Basketball",
                "Ice hockey",
                "American football",
                "Baseball",
                "Handball",
                "Volleyball",
                "Rugby union",
                "Rugby league",
                "Cricket",
                "Futsal",
                "Floorball",
                "Aussie rules",
                "Badminton",
                "Water polo",
                "Field hockey",
                "Table tennis",
                "Boxing",
                "MMA",
                "Esports"
              ]
            },
            "default": [
              "football"
            ]
          },
          "days": {
            "title": "Days",
            "type": "array",
            "description": "Which days to list, as offsets from today (0 = today, 1 = tomorrow, -1 = yesterday) or dates like 2026-09-28. Days are UTC calendar days. Flashscore lists matches from 7 days ago to 7 days ahead; for an older match use Match IDs.",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "title": "Match status",
            "enum": [
              "all",
              "scheduled",
              "live",
              "finished"
            ],
            "type": "string",
            "description": "Upcoming matches carry the live pre-match price. Finished matches keep the last pre-match price Flashscore recorded next to the opening one — the data for backtesting and closing-line value.",
            "default": "all"
          },
          "leagues": {
            "title": "Leagues",
            "type": "array",
            "description": "Only matches from these competitions. Either part of the name as Flashscore shows it (\"Premier League\" also matches \"Premier League 2\", so prefer \"ENGLAND: Premier League\") or a Flashscore league URL, which matches exactly. Leave empty for every competition.",
            "items": {
              "type": "string"
            }
          },
          "matchIds": {
            "title": "Match IDs or URLs",
            "type": "array",
            "description": "Price specific matches instead of listing days: the 8-character id (MNThRu6l) or any Flashscore match URL. Works for matches of any age. When set, Sports, Days, Status and Leagues are ignored.",
            "items": {
              "type": "string"
            }
          },
          "bookmakerCountries": {
            "title": "Bookmaker countries",
            "type": "array",
            "description": "Flashscore shows the bookmakers licensed in one country at a time. List several and their bookmakers are merged, each bookmaker once: GB alone is about 20 bookmakers, GB + DE + IT + ES + FR + BR + CA over 70. Two-letter codes; per-state markets take a region (US-NJ, US-PA, CA-ON). Each country is one extra request per match.",
            "default": [
              "GB"
            ],
            "items": {
              "type": "string"
            }
          },
          "bookmakers": {
            "title": "Bookmakers",
            "type": "array",
            "description": "Only these bookmakers, by part of the name or by numeric id. \"bet365\" also matches bet365.it and bet365.us. Leave empty for every bookmaker in the chosen countries.",
            "items": {
              "type": "string"
            }
          },
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Which betting markets to return. Every selected market multiplies the rows per match: correct score alone is one row with 25 outcomes per bookmaker. An empty list returns every market Flashscore has.",
            "items": {
              "type": "string",
              "enum": [
                "HOME_DRAW_AWAY",
                "HOME_AWAY",
                "OVER_UNDER",
                "ASIAN_HANDICAP",
                "BOTH_TEAMS_TO_SCORE",
                "DRAW_NO_BET",
                "DOUBLE_CHANCE",
                "EUROPEAN_HANDICAP",
                "CORRECT_SCORE",
                "HALF_FULL_TIME",
                "ODD_OR_EVEN"
              ],
              "enumTitles": [
                "1X2 (home / draw / away)",
                "Moneyline (home / away)",
                "Over / under",
                "Asian handicap",
                "Both teams to score",
                "Draw no bet",
                "Double chance",
                "European handicap",
                "Correct score",
                "Half-time / full-time",
                "Odd / even"
              ]
            },
            "default": [
              "HOME_DRAW_AWAY",
              "HOME_AWAY",
              "OVER_UNDER",
              "ASIAN_HANDICAP",
              "BOTH_TEAMS_TO_SCORE"
            ]
          },
          "periods": {
            "title": "Periods",
            "type": "array",
            "description": "Which part of the match: FULL_TIME, FIRST_HALF, SECOND_HALF, FULL_TIME_OVER_TIME (including overtime), FIRST_SET, SECOND_SET. An empty list returns every period.",
            "default": [
              "FULL_TIME"
            ],
            "items": {
              "type": "string"
            }
          },
          "lines": {
            "title": "Lines",
            "enum": [
              "main",
              "all"
            ],
            "type": "string",
            "description": "Over/under and handicap markets come in many lines per bookmaker (2.5 goals, 3.5 goals, ...). \"Main line only\" keeps the one each bookmaker prices closest to even money; \"All lines\" keeps every one and is typically 5-10 times the rows.",
            "default": "main"
          },
          "maxMatches": {
            "title": "Maximum matches",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many matches with odds, soonest kick-off first. With several sports, matches are taken from each sport in turn so one sport cannot fill the cap. Matches with no odds do not count and are never charged.",
            "default": 100
          },
          "maxItems": {
            "title": "Maximum bookmaker lines",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on charged rows for this run. One match priced by 20 bookmakers with the default markets is about 70 rows, so this is the main cost control.",
            "default": 1000
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave this off. Flashscore's data is reachable directly, and the bookmaker country is chosen above, not by IP — a proxy adds cost and no bookmakers. A datacenter IP is tried automatically only if a request is actually refused.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}