{
  "openapi": "3.0.1",
  "info": {
    "title": "FotMob Scraper ⚽ Match Details, Stats, Lineups & Players",
    "description": "From $0.8/1K. Pull structured football data from FotMob: match details with scores, team stats, events, lineups, player ratings, H2H, league tables and fixtures, team squads, and player careers. Paste match URLs, pull fixtures by date, or scrape leagues, teams and players.",
    "version": "1.0",
    "x-build-id": "oWwGF3fekgUnW18oT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~fotmob-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-fotmob-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/abotapi~fotmob-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-fotmob-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/abotapi~fotmob-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-fotmob-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "matches",
              "urls",
              "fixturesByDate",
              "league",
              "team",
              "player"
            ],
            "type": "string",
            "description": "How to discover what to scrape. MATCHES takes match ids/URLs. URLS takes generic FotMob match/team/player/league URLs. FIXTURESBYDATE pulls matches on a date. LEAGUE/TEAM/PLAYER scrape league, team, or player pages.",
            "default": "matches"
          },
          "matchIds": {
            "title": "Match ids or URLs",
            "type": "array",
            "description": "FotMob match ids (e.g. 4506324) or full match URLs. Each becomes one rich match record.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "FotMob URLs",
            "type": "array",
            "description": "Paste FotMob links: match (/match/<id>), team (/teams/<id>/...), player (/players/<id>/...), or league (/leagues/<id>/...) pages. Each link is routed to its entity scraper automatically.",
            "items": {
              "type": "string"
            }
          },
          "date": {
            "title": "Date (Fixtures mode)",
            "type": "string",
            "description": "Day to pull fixtures for, in YYYY-MM-DD. Matches are discovered via league fixtures filtered to this date."
          },
          "daysAhead": {
            "title": "Extra days",
            "minimum": 0,
            "maximum": 14,
            "type": "integer",
            "description": "Also pull fixtures for this many days after the chosen date. 0 = just the one day.",
            "default": 0
          },
          "leagueIds": {
            "title": "League ids",
            "type": "array",
            "description": "FotMob league ids (e.g. 47 = Premier League). Used by League mode and to scope Fixtures-by-date discovery.",
            "items": {
              "type": "string"
            }
          },
          "season": {
            "title": "Season (League mode)",
            "type": "string",
            "description": "Season label as shown on the league page (e.g. 2026/2027). Leave empty for the current season."
          },
          "teamIds": {
            "title": "Team ids",
            "type": "array",
            "description": "FotMob team ids (e.g. 10252 = Aston Villa). Only used when Mode = Team squads.",
            "items": {
              "type": "string"
            }
          },
          "playerIds": {
            "title": "Player ids",
            "type": "array",
            "description": "FotMob player ids (e.g. 268375 = Emiliano Martinez). Only used when Mode = Player profiles.",
            "items": {
              "type": "string"
            }
          },
          "includePlayerStats": {
            "title": "Player stats",
            "type": "boolean",
            "description": "Include the flat per-player stat rows (ratings, goals, saves, passes, xG) plus top players for match records.",
            "default": true
          },
          "includeEvents": {
            "title": "Match events & shotmap",
            "type": "boolean",
            "description": "Include goals, cards, substitutions plus the shot-by-shot shotmap (xG per shot) for match records.",
            "default": true
          },
          "includeLineups": {
            "title": "Match lineups",
            "type": "boolean",
            "description": "Include starters, subs, formations and coach for both sides of match records.",
            "default": true
          },
          "includeTeamStats": {
            "title": "Team stats",
            "type": "boolean",
            "description": "Include possession, shots, passes, xG and every other team stat group for match records.",
            "default": true
          },
          "includeH2H": {
            "title": "Head-to-head & league table",
            "type": "boolean",
            "description": "Include past meetings between the two teams plus the league table snapshot carried on the match page.",
            "default": false
          },
          "includeRawData": {
            "title": "Raw page data",
            "type": "boolean",
            "description": "Include the full embedded page payload (general/header/content) under rawData. Large — turn on only when you need every field.",
            "default": false
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "The single cap: stop after this many records (0 = no limit).",
            "default": 50
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many pages to fetch in parallel. Match pages are heavy (~1MB); keep this low.",
            "default": 3
          },
          "requestDelaySecs": {
            "title": "Delay between requests (seconds)",
            "minimum": 0,
            "type": "number",
            "description": "Politeness pause before each page fetch.",
            "default": 0.5
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue an interrupted crawl without returning or charging for entities already collected there. For recurring monitoring of the same scope, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching entities as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED entities. Turn on Emit unchanged or Emit expired only when you also want those entities returned (and billed).",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode, scope, and detail toggles."
          },
          "emitUnchanged": {
            "title": "Emit unchanged entities (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return entities that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired entities (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return entities that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked scope.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Output field names that should NOT make a record count as UPDATED. scrapedAt is always ignored because it is stamped fresh on every fetch. Add fields such as teamForm here if changes to them are not relevant to you. Ignored fields are still returned in the output.",
            "items": {
              "type": "string"
            }
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "FotMob accepts datacenter traffic from clean IPs; the scraper rotates connections automatically on rejection. Residential is recommended for large or frequent runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}