# FotMob League Scraper (`incognito_mode/fotmob-league-scraper`) Actor

Scrape any FotMob league or competition: the full standings table, every fixture and result with scores, season top players (rating, goals, assists) and the list of available seasons — one clean JSON/CSV record per league-season. Get current or historical seasons. Failed lookups are never billed.

- **URL**: https://apify.com/incognito\_mode/fotmob-league-scraper.md
- **Developed by:** [Elena Vance](https://apify.com/incognito_mode) (community)
- **Categories:** News, Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 league-season results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## FotMob League Scraper — Standings, Fixtures, Results & Season Top Players in One Record

**Turn any FotMob league or competition into clean, structured JSON or CSV: the
full standings table, every fixture and result with scores and match ids, the
season's top players (by rating, goals, and assists), league metadata, and the
list of available seasons — one tidy record per league-season.**

Point it at a league id (or league URL), pick the current season or pull years of
history, and get back data ready to drop into a spreadsheet, database, model, or
app. No login, no account, no HTML wrangling — and **you are never billed for
failed lookups**.

> **Good to know:** every match in the output carries its FotMob `matchId`. Feed
> those ids straight into the **[FotMob Match Details Scraper](https://apify.com/incognito_mode/fotmob-match-details-scraper)** to drill from a
> whole season's results down to lineups, events, and per-player stats — no
> manual id-hunting in between.

---

### Why this Actor

- **A complete season in one record.** One run returns the full standings table,
  *every* fixture and result with scores, and the season's top players (by rating,
  goals, and assists) — already joined and normalized into a single object per
  league-season. No stitching a dozen endpoints together by hand.
- **It handles FotMob's signed API for you.** FotMob's data API sits behind
  Cloudflare and signs every request with a rotating header. This Actor mints that
  signed header for each request and auto-refreshes it when FotMob rotates the key
  mid-run — so you never reverse-engineer or maintain the anti-bot layer.
- **You only ever pay for real data.** Transparent pay-per-event with a volume
  discount, and failures are never charged: an id that can't be parsed, or a season
  FotMob doesn't list for a league, is reported in the run summary — **not** written
  to your dataset and **not billed**.
- **Current season or up to 10 years of history.** Default to the live season, ask
  for exact seasons by name (e.g. `2024/2025`), or pull the **10 most recent**
  seasons per league in one run.
- **Built to chain.** Every match carries its `matchId` (and a `matchUrl`); feed the
  `matchIds` straight into the **FotMob Match Details Scraper** for lineups, events,
  and per-player stats — no id-hunting, no glue code. Don't know a league's id? The
  **[FotMob Leagues List Scraper](https://apify.com/incognito_mode/fotmob-leagues-list-scraper)** lists them all.
- **Drop-in clean output.** Integer ids, parsed scores, ISO timestamps, and a stable
  schema across every league and season — no login, no HTML wrangling.

---

### Problems this Actor solves

| If you are… | Your problem | How this Actor solves it |
|---|---|---|
| **A football data / analytics builder** | Stitching standings, fixtures, and player form together by hand is slow and brittle | One run returns all three per league-season, in a stable schema you can rely on |
| **A model / prediction developer** | You need clean historical results and tables to train and backtest on | Pull up to 10 seasons per league, each with standings and every result with scores |
| **A fantasy / betting tool builder** | Tracking form across leagues means babysitting many requests | Season top players (rating/goals/assists) and full results in a single record |
| **A content creator / journalist** | Compiling league tables and fixture lists is manual and error-prone | Export the standings and full fixture list straight to Sheets, CSV, or your CMS |
| **An app / chatbot / agent developer** | You need league data without building and maintaining a scraper | Pay per record on demand; chain `matchIds` into the Match Details Scraper |

---

### What data you get

Each requested **league-season** becomes one dataset record:

| Field | Description |
|---|---|
| `leagueId` | FotMob league id (integer) — the league this record covers |
| `name` / `shortName` | League name and short name (e.g. *Premier League* / *PL*) |
| `country` | Country / region code for the competition |
| `season` | The season this record covers, in FotMob format (e.g. `2025/2026`) |
| `latestSeason` | The competition's most recent season |
| `isCurrentSeason` | `true` when `season` equals the latest season |
| `leagueColor` | The league's brand color, when available |
| `leagueUrl` | Canonical fotmob.com league page |
| `availableSeasons` | Every season FotMob lists for this league (use to request history) |
| `standings` | *Optional:* the standings table — see below |
| `topPlayers` | *Optional:* `byRating`, `byGoals`, `byAssists` — see below |
| `matches` | *Optional:* every fixture and result — see below |
| `matchIds` | *Optional:* flat list of integer match ids (feed the Match Details Scraper) |
| `source` | Always `fotmob-league-scraper` |
| `scrapedAt` | ISO 8601 timestamp of the run |
| `rawData` | *Optional:* the full raw FotMob league payload, when **Include raw data** is on |

**`standings[]`** — one row per team: `rank`, `teamId`, `teamName`, `shortName`,
`played`, `wins`, `draws`, `losses`, `goalsFor`, `goalsAgainst`, `goalDifference`,
`points`. (Group-stage competitions are flattened into a single list of rows.)

**`topPlayers`** — three lists (`byRating`, `byGoals`, `byAssists`); each entry is
`{ playerId, name, teamId, teamName, value }` where `value` is the relevant metric
(rating, goal count, or assist count).

**`matches[]`** — one entry per fixture/result: `matchId`, `round`, `homeId`,
`homeName`, `awayId`, `awayName`, `homeScore`, `awayScore`, `utcTime`, `started`,
`finished`, `matchUrl`. Scores are `null` for matches that haven't been played yet.

#### Example output

Premier League, 2025/2026 — trimmed for readability (`standings`, `matches`, and
each `topPlayers` list are longer in a real record):

```jsonc
{
  "leagueId": 47,
  "name": "Premier League",
  "shortName": "PL",
  "country": "ENG",
  "season": "2025/2026",
  "latestSeason": "2025/2026",
  "isCurrentSeason": true,
  "leagueColor": "#3D195B",
  "leagueUrl": "https://www.fotmob.com/leagues/47",
  "availableSeasons": ["2025/2026", "2024/2025", "2023/2024", "2022/2023"],
  "standings": [
    {
      "rank": 1, "teamId": 9825, "teamName": "Arsenal", "shortName": "ARS",
      "played": 38, "wins": 27, "draws": 4, "losses": 7,
      "goalsFor": 88, "goalsAgainst": 32, "goalDifference": 56, "points": 85
    }
    // … 19 more rows
  ],
  "topPlayers": {
    "byRating": [
      { "playerId": 961995, "name": "Erling Haaland", "teamId": 8456, "teamName": "Manchester City", "value": 7.92 }
      // … more
    ],
    "byGoals": [
      { "playerId": 961995, "name": "Erling Haaland", "teamId": 8456, "teamName": "Manchester City", "value": 27 }
      // … more
    ],
    "byAssists": [
      { "playerId": 562727, "name": "Bukayo Saka", "teamId": 9825, "teamName": "Arsenal", "value": 12 }
      // … more
    ]
  },
  "matches": [
    {
      "matchId": 4506384,
      "round": 1,
      "homeId": 9825, "homeName": "Arsenal",
      "awayId": 10261, "awayName": "Wolverhampton Wanderers",
      "homeScore": 2, "awayScore": 0,
      "utcTime": "2025-08-16T14:00:00.000Z",
      "started": true, "finished": true,
      "matchUrl": "https://www.fotmob.com/match/4506384"
    }
    // … 379 more matches
  ],
  "matchIds": [4506384, 4506385, 4506386],  // 380 ids in a full Premier League season
  "source": "fotmob-league-scraper",
  "scrapedAt": "2026-06-18T08:30:00+00:00"
}
````

Inputs that could not be fetched are **not** written to the dataset (and never
billed). They are listed in the run's `SUMMARY` record in the key-value store —
`{ "failures": [ { "input": "…", "leagueId": …, "error": "…" } ] }` — and the run's
status message tells you at a glance how many league-seasons succeeded.

***

### How to use it (60 seconds)

1. Click **Try for free / Start**.
2. Add one or more **League ids or URLs** (one per line), e.g. `47` for the Premier
   League, or paste a full league URL like
   `https://www.fotmob.com/leagues/47/overview/premier-league`.
   *(Don't know the id? Run the **FotMob Leagues List Scraper** first.)*
3. Choose how many seasons:
   - **Current season (default):** leave **Seasons** empty and **Max seasons** at `1`.
   - **More history:** set **Max seasons** up to `10` for the most recent N seasons.
   - **Specific seasons:** list them under **Seasons** in FotMob format
     (e.g. `2024/2025`). Available seasons are shown on every output record.
4. Toggle what you need: **standings**, **fixtures & results**, **top players** (all
   on by default), and optionally **raw data**.
5. Click **Save & Start**. Download results as **JSON, CSV, Excel, or via API** from
   the **Dataset** tab; check **Key-value store → SUMMARY** for run totals and any
   failed lookups.

***

### Input reference

| Field | Type | Default | Description |
|---|---|---|---|
| **League ids or URLs** | list | `["47"]` | One FotMob league id or league URL per line. Numeric ids and `/leagues/<id>/…` URLs both work. |
| **Seasons** | list | *(empty)* | Specific seasons in FotMob format (e.g. `2024/2025`). Empty = use **Max seasons**. |
| **Max seasons (most recent)** | integer | `1` | When no specific seasons are given, scrape this many of the most recent seasons per league (1–10). `1` = current only. |
| **Include standings** | boolean | `true` | Include the league standings table. |
| **Include fixtures & results** | boolean | `true` | Include every fixture and result with scores and match ids. |
| **Include top players** | boolean | `true` | Include season top players by rating, goals, and assists. |
| **Include raw data** | boolean | `false` | Adds the full raw FotMob league payload under `rawData`. Significantly increases item size. |
| **Proxy configuration** | object | Apify Proxy, **datacenter** | Apify Proxy routes requests. Datacenter (the default) is enough for most runs; switch to Residential if you hit blocks on very large jobs. |
| **Delay between requests** | integer | `1` | Politeness delay in seconds before each request (0–10). |
| **Max items** | integer | `0` | Stop after N league-season records (`0` = unlimited). |

***

### Pricing — what a run costs

This Actor uses transparent **pay-per-event** pricing with a built-in **volume
discount**: a fixed price per successful league-season record for the first 10,000
results of a run, and a cheaper rate for every result beyond that, plus a small
**Actor-start fee** ($0.02) charged once per run. **No subscription, no minimums, and
failed lookups are never charged.** The exact per-result rate is shown on the Actor's
**Pricing** tab.

- **One billed record per league-season.** Asking for 5 seasons of one league bills
  5 records; failed lookups bill nothing.
- **Failed lookups are free.** Unparseable ids and seasons FotMob doesn't list for a
  league are reported in the summary, never billed.
- **Bigger runs cost less per item.** The discount tier resets per run, so one large
  run is cheaper than the same job split into many small ones.
- **Try it free:** an Apify free account includes **$5 of monthly platform credit** —
  enough to try the Actor before paying anything.
- **Stay in control:** set **Max items** and Apify's **maximum charge per run**; the
  Actor stops gracefully at your cap, keeping everything already scraped.

***

### Compared to the alternatives

| | **This Actor** | Build your own scraper | Manual checking |
|---|---|---|---|
| Standings + fixtures + top players in one record | Yes | You maintain it | Impractical |
| Historical seasons (up to 10) | Yes | You maintain it | One page at a time |
| Match ids that chain into match detail | Yes | You wire it up | Copy-paste |
| Handles FotMob request signing | Built in | You reverse-engineer it | – |
| Never billed for failures | Yes | – | – |
| Export JSON / CSV / Excel / API | Yes, built-in | DIY | Copy-paste |
| Setup time | ~60 seconds | Days; breaks on site changes | Hours per season |

***

### A family of FotMob Actors

This Actor is part of a set that fit together — start broad, then drill down:

- **[FotMob Leagues List Scraper](https://apify.com/incognito_mode/fotmob-leagues-list-scraper)** — discover every league/competition and its id.
  Use it to find the ids you feed in here.
- **FotMob League Scraper** *(this Actor)* — standings, fixtures, results, and season
  top players per league-season; emits the `matchIds`.
- **[FotMob Matches Scraper](https://apify.com/incognito_mode/fotmob-matches-scraper)** — match lists (e.g. by date or team), another source of
  match ids.
- **[FotMob Match Details Scraper](https://apify.com/incognito_mode/fotmob-match-details-scraper)** — pass the `matchIds` from this Actor to get
  lineups, events, and per-player match stats.

***

### Integrate the data

- **Exports:** JSON, CSV, Excel, XML from the Dataset tab — or fetch
  programmatically:
  ```
  GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json
  ```
- **Run on a schedule:** use Apify **Schedules** to refresh standings and results
  daily or weekly, and **webhooks** to push finished runs into your pipeline (Sheets,
  Slack, your backend).
- **Chain to match detail:** read `matchIds` from each record and pass them to the
  **FotMob Match Details Scraper** to expand a whole season into per-match data.
- **From code:** call the Actor with the [Apify API or SDKs](https://docs.apify.com/api)
  (Python / JavaScript) and read the dataset when the run finishes.
- **Run summary:** every run writes a `SUMMARY` record (key-value store) with totals,
  successes, failures, and billing counts — ideal for monitoring automated pipelines.

***

### FAQ

**Do I need a FotMob account or login?**
No. There is no account or login required.

**Where do I find a league's id?**
Use the **FotMob Leagues List Scraper** to list every league and its id, or copy it
from a FotMob league URL (`fotmob.com/leagues/<id>/…`). You can paste the full URL
here too — the Actor extracts the id for you.

**Can I get past seasons?**
Yes. Set **Max seasons** for the most recent N (up to 10), or list exact seasons under
**Seasons** in FotMob format (e.g. `2024/2025`). Each record's `availableSeasons` shows
what's on offer for that league; a season a league doesn't have is reported in the
summary and is never billed.

**How do I get every match's details?**
Take the `matchIds` from each record and run the **FotMob Match Details Scraper** —
the two Actors are designed to chain.

**Why are some scores `null`?**
Matches that haven't been played yet appear in `matches` with `homeScore`/`awayScore`
as `null` and `finished: false` — useful for upcoming-fixture lists.

**Do I need a proxy?**
Apify Proxy is pre-selected (datacenter). It's enough for most runs; switch to
Residential only if you hit blocks on very large jobs.

**How fresh is the data?**
Each run fetches live data, so you get exactly what FotMob shows at that moment.
Schedule the Actor to keep your dataset as fresh as you need.

**What formats can I export?**
JSON, CSV, Excel, XML — from the Console or via the Apify API.

***

### Disclaimer

This Actor is intended for personal and research use. You are responsible for ensuring
your use complies with FotMob's terms and applicable law. Please scrape responsibly —
keep the request delay reasonable and pull only the seasons you need. This project is
not affiliated with, endorsed by, or sponsored by FotMob.

# Actor input Schema

## `leagueIds` (type: `array`):

One FotMob league id or league URL per line, e.g. "47" (Premier League) or "https://www.fotmob.com/leagues/47/overview/premier-league".

## `seasons` (type: `array`):

Specific seasons to scrape, in FotMob format (e.g. "2024/2025"). Leave empty to use 'Max seasons' below. Available seasons are listed on each output record.

## `maxSeasons` (type: `integer`):

When no specific seasons are given, scrape this many of the most recent seasons per league. 1 = current season only.

## `includeStandings` (type: `boolean`):

Include the league standings table.

## `includeMatches` (type: `boolean`):

Include every fixture and result with scores and match ids (feed these to the Match Details Scraper).

## `includeTopPlayers` (type: `boolean`):

Include season top players by rating, goals and assists.

## `includeRawData` (type: `boolean`):

Adds the full raw FotMob league payload under 'rawData'. Significantly increases item size.

## `proxyConfiguration` (type: `object`):

Apify Proxy routes requests. Datacenter proxy (the default) is enough for most runs; switch to Residential if you hit blocks on very large jobs.

## `requestDelaySecs` (type: `integer`):

Politeness delay applied before each request. Keep a delay of at least 1 second to stay respectful.

## `maxItems` (type: `integer`):

Stop after producing this many league-season records. Set to 0 for no limit.

## Actor input object example

```json
{
  "leagueIds": [
    "47",
    "87",
    "https://www.fotmob.com/leagues/54/overview/bundesliga"
  ],
  "seasons": [
    "2024/2025",
    "2023/2024"
  ],
  "maxSeasons": 1,
  "includeStandings": true,
  "includeMatches": true,
  "includeTopPlayers": true,
  "includeRawData": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "requestDelaySecs": 1,
  "maxItems": 0
}
```

# Actor output Schema

## `leagues` (type: `string`):

All scraped league-season records (one item per league-season).

## `summary` (type: `string`):

JSON summary of the run: totals, successes, failures, and billing counts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "leagueIds": [
        "47"
    ],
    "seasons": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("incognito_mode/fotmob-league-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "leagueIds": ["47"],
    "seasons": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("incognito_mode/fotmob-league-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "leagueIds": [
    "47"
  ],
  "seasons": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call incognito_mode/fotmob-league-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=incognito_mode/fotmob-league-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FotMob League Scraper",
        "description": "Scrape any FotMob league or competition: the full standings table, every fixture and result with scores, season top players (rating, goals, assists) and the list of available seasons — one clean JSON/CSV record per league-season. Get current or historical seasons. Failed lookups are never billed.",
        "version": "0.1",
        "x-build-id": "26cJ7tRWufixHi2AS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/incognito_mode~fotmob-league-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-incognito_mode-fotmob-league-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~fotmob-league-scraper/runs": {
            "post": {
                "operationId": "runs-sync-incognito_mode-fotmob-league-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~fotmob-league-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-incognito_mode-fotmob-league-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": {
                    "leagueIds": {
                        "title": "League ids or URLs",
                        "type": "array",
                        "description": "One FotMob league id or league URL per line, e.g. \"47\" (Premier League) or \"https://www.fotmob.com/leagues/47/overview/premier-league\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "seasons": {
                        "title": "Seasons (optional)",
                        "type": "array",
                        "description": "Specific seasons to scrape, in FotMob format (e.g. \"2024/2025\"). Leave empty to use 'Max seasons' below. Available seasons are listed on each output record.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxSeasons": {
                        "title": "Max seasons (most recent)",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "When no specific seasons are given, scrape this many of the most recent seasons per league. 1 = current season only.",
                        "default": 1
                    },
                    "includeStandings": {
                        "title": "Include standings",
                        "type": "boolean",
                        "description": "Include the league standings table.",
                        "default": true
                    },
                    "includeMatches": {
                        "title": "Include fixtures & results",
                        "type": "boolean",
                        "description": "Include every fixture and result with scores and match ids (feed these to the Match Details Scraper).",
                        "default": true
                    },
                    "includeTopPlayers": {
                        "title": "Include top players",
                        "type": "boolean",
                        "description": "Include season top players by rating, goals and assists.",
                        "default": true
                    },
                    "includeRawData": {
                        "title": "Include raw data",
                        "type": "boolean",
                        "description": "Adds the full raw FotMob league payload under 'rawData'. Significantly increases item size.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy routes requests. Datacenter proxy (the default) is enough for most runs; switch to Residential if you hit blocks on very large jobs.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "requestDelaySecs": {
                        "title": "Delay between requests (seconds)",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Politeness delay applied before each request. Keep a delay of at least 1 second to stay respectful.",
                        "default": 1
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop after producing this many league-season records. Set to 0 for no limit.",
                        "default": 0
                    }
                }
            },
            "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
                                    }
                                }
                            },
                            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
