{
  "openapi": "3.0.1",
  "info": {
    "title": "BestFightOdds Scraper - MMA Odds, UFC & Boxing Odds, Line Moves",
    "description": "MMA and UFC odds plus boxing odds from BestFightOdds: one row per fight with every sportsbook's moneyline side by side, the best price and which book has it, implied probability, the opening line, the line range and the movement chart. Optional prop bets (rounds, method).",
    "version": "0.1",
    "x-build-id": "MXDNvYooGmbFO6iOh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~bestfightodds-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-bestfightodds-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/neverempty~bestfightodds-scraper/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-bestfightodds-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/neverempty~bestfightodds-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-bestfightodds-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": {
          "sport": {
            "title": "Sport",
            "enum": [
              "mma",
              "boxing",
              "both"
            ],
            "type": "string",
            "description": "mma = UFC, PFL, ONE, Bellator and the other MMA events on bestfightodds.com (the default). boxing = boxing events from proboxingodds.com, the BestFightOdds boxing site. both = MMA and boxing in one run. Ignored when you paste event URLs below.",
            "default": "mma"
          },
          "eventKeywords": {
            "title": "Only events whose name contains",
            "type": "array",
            "description": "Words to look for in the event name, for example UFC, PFL or ONE. An event is kept when its name contains any of them (not case sensitive). Leave empty to keep every upcoming event. Applied before \"How many events to read\". Boxing events are named by their date on the site (for example \"October 24th Boxing\"), so leave this empty for boxing.",
            "items": {
              "type": "string"
            }
          },
          "maxEvents": {
            "title": "How many events to read",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Upcoming events are taken in the order the site lists them, the nearest first, after the event-name filter above. Events with no betting line yet are skipped unless Include fights without odds is on. With Sport set to both, this many events are read from each site. Ignored when you paste event URLs below.",
            "default": 3
          },
          "eventUrls": {
            "title": "Event URLs (optional)",
            "type": "array",
            "description": "Paste event pages to read exactly those events, past or upcoming, for example https://www.bestfightodds.com/events/ufc-333-4321 or https://www.proboxingodds.com/events/2026-10-24-2473. When this list is filled, Sport and the event filters are not used. An address that is not an event page, or an event the site does not have, gets a free row that says so.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "fighterNames": {
            "title": "Only fights with these fighters",
            "type": "array",
            "description": "Part of a fighter's name, for example Volkanovski. A fight is kept when either fighter's name contains any of them (not case sensitive). Leave empty to keep every fight.",
            "items": {
              "type": "string"
            }
          },
          "includeLineMovement": {
            "title": "Include opening line and line movement",
            "type": "boolean",
            "description": "Adds each fighter's opening line, the line range, the movement % and the points of the odds-movement chart. This reads both fighters' pages, so it takes about two more requests per fight. Turn off for the fastest run with the current lines only.",
            "default": true
          },
          "includeProps": {
            "title": "Include prop bets",
            "type": "boolean",
            "description": "Adds the prop bets listed for each fight (over/under rounds, goes the distance, method of victory, round betting) with every book's price. Off by default because a big fight can have dozens of props.",
            "default": false
          },
          "includeFightsWithoutOdds": {
            "title": "Include fights without odds",
            "type": "boolean",
            "description": "Fights that are announced but have no betting line from any book yet are left out by default. Turn on to get them too, with empty odds.",
            "default": false
          },
          "maxRecords": {
            "title": "Maximum fights",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The most fight rows this run may return and charge for. When the limit cuts the result, fights are taken evenly from every event, so no event disappears completely, and a free row tells you what was left out.",
            "default": 100
          },
          "maxRequests": {
            "title": "Maximum page requests",
            "minimum": 1,
            "maximum": 3000,
            "type": "integer",
            "description": "A safety limit on how many pages this run may open. When it is reached the run stops early and a free row says so. The default fits about 140 fights with line movement.",
            "default": 300
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}