{
  "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": "3cA2xtd8xZ16LftOX"
  },
  "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",
              "news"
            ],
            "type": "string",
            "description": "How to discover what to scrape. News reads the latest football headlines (the default: at least 20 results out of the box). Matches by id reads the match links you list below. Paste FotMob URLs reads any mix of match, team, player and league links. Fixtures by date finds every match played on a date. League, Team and Player scrape those pages directly.",
            "default": "news"
          },
          "matchIds": {
            "title": "Match ids or links",
            "type": "array",
            "description": "Only used when Mode = Matches by id. One entry per match: a FotMob match id (e.g. 4506324) or a full match link (e.g. https://www.fotmob.com/match/4506324). Each entry becomes one rich match record.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "FotMob links (any mix)",
            "type": "array",
            "description": "Only used when Mode = Paste FotMob URLs. Paste any mix of match links (/match/<id>), team links (/teams/<id>/overview/...), player links (/players/<id>/...) and league links (/leagues/<id>/overview/... — /table, /fixtures and /stats tabs work too). Each link is routed to its own scraper automatically; anything else is skipped with a warning.",
            "items": {
              "type": "string"
            }
          },
          "date": {
            "title": "Fixtures date",
            "type": "string",
            "description": "Only used when Mode = Fixtures by date. Day to pull fixtures for, in YYYY-MM-DD (e.g. 2026-08-29). Matches are found through the leagues listed below, filtered to this date."
          },
          "daysAhead": {
            "title": "Extra days after the date",
            "minimum": 0,
            "maximum": 14,
            "type": "integer",
            "description": "Only used when Mode = Fixtures by date. Also pull fixtures for this many days after the date above. 0 = just the one day (max 14).",
            "default": 0
          },
          "leagueIds": {
            "title": "Leagues",
            "type": "array",
            "description": "Used by Mode = League tables & fixtures (the leagues to scrape) and Mode = Fixtures by date (the leagues to search for matches). FotMob league ids (e.g. 47) or plain names (e.g. \"Premier League\" — resolved automatically).",
            "items": {
              "type": "string"
            }
          },
          "season": {
            "title": "Season (optional, league mode only)",
            "type": "string",
            "description": "Only used when Mode = League tables & fixtures. Season label exactly as shown on the league page (e.g. 2026/2027). Leave empty for the current season."
          },
          "teamIds": {
            "title": "Teams",
            "type": "array",
            "description": "Only used when Mode = Team squads. FotMob team ids (e.g. 10252) or plain names (e.g. \"Arsenal\" — resolved automatically). Each team yields its squad, form, fixtures and table.",
            "items": {
              "type": "string"
            }
          },
          "playerIds": {
            "title": "Players",
            "type": "array",
            "description": "Only used when Mode = Player profiles. FotMob player ids (e.g. 268375) or plain names (e.g. \"Lionel Messi\" — resolved automatically). Each player yields career history, trophies and recent matches.",
            "items": {
              "type": "string"
            }
          },
          "newsPages": {
            "title": "News listing pages to read",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Only used when Mode = News articles. How many pages of the latest-news listing to walk (20 articles per page — 2 pages guarantees at least 20 results). The Max records cap below still governs the final count.",
            "default": 2
          },
          "includePlayerStats": {
            "title": "Player stats",
            "type": "boolean",
            "description": "Match records only. Include the flat per-player stat rows (ratings, goals, saves, passes, xG) plus top players.",
            "default": true
          },
          "includeEvents": {
            "title": "Match events & shotmap",
            "type": "boolean",
            "description": "Match records only. Include goals, cards and substitutions plus the shot-by-shot shotmap (xG per shot).",
            "default": true
          },
          "includeLineups": {
            "title": "Match lineups",
            "type": "boolean",
            "description": "Match records only. Include starters, subs, formations and coach for both sides.",
            "default": true
          },
          "includeTeamStats": {
            "title": "Team stats",
            "type": "boolean",
            "description": "Match records only. Include possession, shots, passes, xG and every other team stat group.",
            "default": true
          },
          "includeH2H": {
            "title": "Head-to-head & league table",
            "type": "boolean",
            "description": "Match records only. Include past meetings between the two teams plus the league-table snapshot carried on the match page. Off by default: it makes records much larger.",
            "default": false
          },
          "includeRawData": {
            "title": "Raw page data",
            "type": "boolean",
            "description": "Include the full embedded page payload under rawData. Large — turn on only when you need every field.",
            "default": false
          },
          "includeNewsBody": {
            "title": "News article full body",
            "type": "boolean",
            "description": "Only used when Mode = News articles. Fetch the full article text for each news record (one extra request per article, no extra per-record charge). Adds bodyHtml plus plain-text bodyText and fills in the lead. Works for FotMob-native articles (/news/...); syndicated embeds (/embed/news/...) are iframes to the publisher's site and carry no body on FotMob's side.",
            "default": true
          },
          "maxItems": {
            "title": "Max records",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many records across the whole run (0 = no limit). Use it to cap run size and cost.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Connection used for every request. FotMob answers on the standard pool and the scraper rotates sessions automatically when refused. Residential is recommended for large or frequent runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Continue a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue that interrupted run without returning or charging for records already collected there. For recurring monitoring of the same scope, use Recurring updates below instead — leave this empty."
          },
          "incrementalMode": {
            "title": "Recurring updates (only return what changed)",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching records as NEW. Later runs return only NEW, UPDATED and REAPPEARED records. Turn on Also-return options below only when you also want those extra records returned (and billed).",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, recurring updates only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its memory stable, or to deliberately share memory across differently configured runs. Leave empty to key the memory on this run setup automatically."
          },
          "emitUnchanged": {
            "title": "Also return unchanged records (recurring updates only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Also return records that are gone (recurring updates only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that were present before but are no longer found, marked EXPIRED. Only produced when a run covered its whole setup, so a capped or continued run never reports records as gone.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Output field names that should NOT mark a record 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"
            }
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}