# Sportradar Match Stats Scraper — Lineups, Timeline, Players (`blackfalcondata/sportradar-stats-scraper`) Actor

Match statistics from Sportradar at $2 per 1,000 matches plus $1 per 1,000 data layers: lineups, timeline, team and player stats, head-to-head and form for any Sportradar match id · the same ids Betano and other bookmakers publish · no browser.

- **URL**: https://apify.com/blackfalcondata/sportradar-stats-scraper.md
- **Developed by:** [Black Falcon Data](https://apify.com/blackfalcondata) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 matches

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### What does Sportradar Match Stats Scraper do?

Sportradar Match Stats Scraper reads the public match-statistics widget on sportradar.com and returns one JSON row per match. You give it Sportradar match ids. It gives you the teams, competition, kickoff, status, score, venue, referee and managers, plus the headline team statistics. Nine further data layers are switched on per run: team statistics with half splits, player statistics, lineups, the incident timeline, per-minute pressure, head to head, form, league tables and fun facts. A full match link works as an id, so the stats URL a bookmaker publishes next to a fixture can be pasted straight in. No browser.

### How to use this actor

- 👉 **Register for a free Apify account** — no credit card required.
- 🎉 Just click **[Sign up free on Apify →](https://console.apify.com/sign-up?fpr=1h3gvi)** and complete a quick signup.
- 💰 A free Apify account includes $5 in monthly credits — enough to test this actor.
- ⏳ Scrape during the free trial, with no commitment or upfront payment required.

### Key features

- **🔗 Driven by the ids you already have:** A bare Sportradar match id works, and so does a full match link: paste the stats URL a bookmaker publishes next to a fixture and the id is read out of it. It is the same id Betano and other books carry as `betRadarId`, so an odds feed and this actor join on one key with no name matching and no lookup table in between.
- **📚 Nine data layers, switched on per run:** on top of the header: team statistics with first and second half splits, per-player minutes, goals, assists, saves and cards, lineups with formation, bench, substitutions and player profiles, the full incident timeline with pitch coordinates, per-minute pressure, head-to-head with a summarised record, each team's last ten matches with results, league tables and fun facts.
- **💵 You pay for what arrives:** each match is one fee for the header, and each extra layer is charged once and only when it comes back with data. A fixture with no lineup published yet is delivered without one, the layer is listed on the row under `layersFailed`, and it is not billed.
- **📦 Compact mode:** header only: match, teams, competition, kickoff, status, score and venue. Layers you asked for are still fetched and still charged, so this is an output-shape switch rather than a cost switch.
- **🧹 Empty-field stripping:** drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards that already handle missing fields gracefully.
- **📤 Export anywhere:** Download the dataset as JSON, CSV, or Excel from the Apify Console, or stream live via the Apify API and integrations (Make, Zapier, Google Sheets, n8n, …).

### What data can you extract from sportradar.com?

Each result includes Core match fields (`matchId`, `client`, `sport`, `competition`, `competitionId`, `season`, `seasonId`, and `round`, and more). In standard mode, all fields are always present — unavailable data points are returned as `null`, never omitted. In compact mode, only core fields are returned.

### Input

The main inputs are a result limit. Additional filters and options are available in the input schema.

Key parameters:

- **`matchIds`** — Sportradar match ids, one per line. A full match link works too and is the easier way in: paste the stats link a bookmaker publishes next to a fixture (for example https://s5.sir.sportradar.com/betano/en/match/72221220) or a statshub.sportradar.com match URL, and the id is read from it. The same id is what Betano and other books carry as betRadarId. (default: `[]`)
- **`layers`** — Which blocks of data to attach to each match. The header (teams, competition, kickoff, status, score, venue, referee and managers) is always included and is what the match fee covers, along with the headline team statistics once the match is under way — a fixture that has not kicked off has none to publish. Every layer you add here is fetched separately and charged separately, and only when it comes back with data. (default: `["teamStats"]`)
- **`client`** — Which edition of the stats widget to read. Both serve the same match data; leave this on Betano unless a match answers only on the generic edition. (default: `"betano"`)
- ...and 4 more parameters

### Input examples

**Team and player statistics for two matches** — Bare match ids, the two statistics layers.

→ One row per match with possession, shots, corners, fouls and cards per side, half splits, and a row per player with minutes, goals, assists, saves and cards.

```json
{
  "matchIds": [
    "72221158",
    "72221220"
  ],
  "layers": [
    "teamStats",
    "playerStats"
  ]
}
```

**Everything about one fixture** — All nine layers on a single match.

→ One row carrying lineups with player profiles, the full timeline with pitch coordinates, per-minute pressure, head to head, both teams' form, the league tables and the fun facts.

```json
{
  "matchIds": [
    "72221158"
  ],
  "layers": [
    "teamStats",
    "playerStats",
    "lineups",
    "timeline",
    "situations",
    "h2h",
    "form",
    "tables",
    "funfacts"
  ]
}
```

**Compact rows for an agent or a dashboard** — Header only. The layers are still fetched and still charged, so ask only for what you want to keep.

→ Flat rows: match, teams, competition, kickoff, status, score, venue and which layers were delivered.

```json
{
  "matchIds": [
    "72221158",
    "72221220"
  ],
  "layers": [
    "teamStats"
  ],
  "compact": true,
  "excludeEmptyFields": true
}
```

**Pre-match research from a bookmaker's stats link** — Paste the match URL a book publishes next to its odds; the id is read from it.

→ Form for both sides with W/D/L, the record between the teams, the league table around them and the fixture's fun facts.

```json
{
  "startUrls": [
    "https://s5.sir.sportradar.com/betano/en/match/72221220"
  ],
  "layers": [
    "form",
    "h2h",
    "tables",
    "funfacts"
  ]
}
```

### Output

Each run produces a dataset of structured match records. Results can be downloaded as JSON, CSV, or Excel from the Dataset tab in Apify Console.

### Example match record

```json
{
  "matchId": "72221158",
  "client": "betano",
  "sport": "Soccer",
  "competition": "Premier League",
  "competitionId": "17",
  "season": "Premier League 26/27",
  "seasonId": "140756",
  "round": 1,
  "week": 34,
  "startTime": "2026-08-22T14:00:00.000Z",
  "status": "Ended",
  "statusCode": 100,
  "homeTeam": {
    "id": "4867",
    "uid": "48",
    "name": "Everton",
    "mediumName": "Everton FC",
    "abbr": "EVE",
    "country": "England",
    "countryCode": "ENG"
  },
  "awayTeam": {
    "id": "342002",
    "uid": "7",
    "name": "Crystal Palace",
    "mediumName": "Crystal Palace",
    "abbr": "CRY",
    "country": "England",
    "countryCode": "ENG"
  },
  "score": {
    "home": 2,
    "away": 0,
    "winner": "home",
    "periods": {
      "p1": {
        "home": 1,
        "away": 0
      },
      "ft": {
        "home": 2,
        "away": 0
      }
    }
  },
  "venue": {
    "id": "83422",
    "name": "Hill Dickinson Stadium",
    "city": "Liverpool",
    "country": "England",
    "capacity": 52769,
    "coordinates": "53.4251, -3.0028"
  },
  "referee": {
    "id": "104864",
    "name": "Tierney, Paul",
    "nationality": "England"
  },
  "managers": {
    "home": {
      "id": "52950",
      "name": "Moyes, David",
      "fullName": "Moyes, David William",
      "nationality": "Scotland"
    },
    "away": {
      "id": "2736867",
      "name": "Sage, Pierre",
      "nationality": "France"
    }
  },
  "coverage": {
    "lineup": 2,
    "formations": 0,
    "livetable": 108752,
    "injuries": 1,
    "ballspotting": false,
    "cornersonly": false,
    "multicast": true,
    "scoutmatch": 1,
    "scoutcoveragestatus": 0,
    "scoutconnected": true,
    "liveodds": true,
    "deepercoverage": true,
    "tacticallineup": true,
    "basiclineup": true,
    "hasstats": true,
    "inlivescore": true,
    "insights": true,
    "penaltyshootout": 2,
    "scouttest": false,
    "lmtsupport": 4,
    "venue": false,
    "matchdatacomplete": false,
    "mediacoverage": true,
    "substitutions": true,
    "live": {
      "id": 843,
      "level": {
        "name": "Level 1",
        "value": 1
      }
    },
    "match_creation": {
      "id": 841,
      "level": {
        "name": "Level 1",
        "value": 1
      }
    },
    "player_service": {
      "id": 855,
      "level": {
        "name": "Level 1",
        "value": 1
      }
    },
    "resulting": {
      "id": 853,
      "level": {
        "name": "Level 1",
        "value": 1
      }
    },
    "stats_creation_cup": {
      "id": 845,
      "level": {
        "name": "Cup 1",
        "value": 1
      }
    },
    "stats_creation_table": {
      "id": 847,
      "level": {
        "name": "Level 1",
        "value": 1
      }
    }
  },
  "teamStats": {
    "home": {
      "ballPossession": 42,
      "goalAttempts": 9,
      "shotsOnTarget": 5,
      "shotsOffTarget": 4,
      "shotsBlocked": 7,
      "saves": 3,
      "cornerKicks": 4,
      "freeKicks": 14,
      "offsides": 2,
      "fouls": 6,
      "goalKicks": 5,
      "throwIns": 21,
      "yellowCards": 0,
      "yellowRedCards": 0,
      "redCards": 0,
      "substitutions": 4,
      "injuries": 0,
      "ballSafe": 67,
      "ballSafePercentage": 50,
      "attack": 62,
      "attackPercentage": 14,
      "dangerousAttack": 36,
      "dangerousAttackPercentage": 36,
      "penalties": 0
    },
    "away": {
      "ballPossession": 58,
      "goalAttempts": 8,
      "shotsOnTarget": 3,
      "shotsOffTarget": 5,
      "shotsBlocked": 3,
      "saves": 3,
      "cornerKicks": 0,
      "freeKicks": 6,
      "offsides": 0,
      "fouls": 13,
      "goalKicks": 11,
      "throwIns": 15,
      "yellowCards": 1,
      "yellowRedCards": 0,
      "redCards": 0,
      "substitutions": 5,
      "injuries": 1,
      "ballSafe": 66,
      "ballSafePercentage": 58,
      "attack": 66,
      "attackPercentage": 24,
      "dangerousAttack": 41,
      "dangerousAttackPercentage": 18,
      "penalties": 0
    },
    "periods": {
      "home": {
        "ballPossession": "46/42",
        "yellowCards": "0/0",
        "redCards": "0/0",
        "cornerKicks": "2/2",
        "freeKicks": "6/8",
        "goalKicks": "2/3",
        "throwIns": "14/7",
        "offsides": "2/0",
        "shotsOnTarget": "2/3",
        "shotsOffTarget": "2/2",
        "saves": "1/2",
        "fouls": "3/3",
        "shotsBlocked": "2/5",
        "yellowRedCards": "0/0",
        "substitutions": "0/4",
        "goalAttempts": "4/5",
        "injuries": "0/0",
        "ballSafe": "46/54",
        "attack": "15/12",
        "dangerousAttack": "39/34"
      },
      "away": {
        "ballPossession": "54/58",
        "yellowCards": "1/0",
        "redCards": "0/0",
        "cornerKicks": "0/0",
        "freeKicks": "3/3",
        "goalKicks": "5/6",
        "throwIns": "7/8",
        "offsides": "0/0",
        "shotsOnTarget": "1/2",
        "shotsOffTarget": "4/1",
        "saves": "1/2",
        "fouls": "6/7",
        "shotsBlocked": "1/2",
        "yellowRedCards": "0/0",
        "substitutions": "0/5",
        "goalAttempts": "5/3",
        "injuries": "0/1",
        "ballSafe": "64/53",
        "attack": "20/27",
        "dangerousAttack": "16/20"
      }
    },
    "types": [
      {
        "key": "ballPossession",
        "id": "110",
        "name": "Ball possession"
      },
      {
        "key": "goalAttempts",
        "id": "goalattempts",
        "name": "Goal attempts"
      },
      {
        "key": "shotsOnTarget",
        "id": "125",
        "name": "Shots on target"
      },
      {
        "key": "shotsOffTarget",
        "id": "126",
        "name": "Shots off target"
      },
      {
        "key": "shotsBlocked",
        "id": "171",
        "name": "Shots blocked"
      },
      "... 19 more items"
    ]
  },
  "playerStats": [
    {
      "side": "home",
      "teamId": "4867",
      "teamUid": "48",
      "teamName": "Everton",
      "playerId": "110846",
      "name": "Keane, Michael",
      "position": "Defender",
      "positionType": "D",
      "nationality": "England",
      "stats": {
        "starting": 0
      }
    },
    {
      "side": "home",
      "teamId": "4867",
      "teamUid": "48",
      "teamName": "Everton",
      "playerId": "138530",
      "name": "Pickford, Jordan",
      "fullName": "Pickford, Jordan Lee",
      "position": "Goalkeeper",
      "positionType": "G",
      "nationality": "England",
      "stats": {
        "minutes": 90,
        "goaltendingTotalSavesPercentage": 1,
        "saves": 2,
        "starting": 1
      }
    },
    {
      "side": "home",
      "teamId": "4867",
      "teamUid": "48",
      "teamName": "Everton",
      "playerId": "145188",
      "name": "Tarkowski, James",
      "fullName": "Tarkowski, James Alan",
      "position": "Defender",
      "positionType": "D",
      "nationality": "England",
      "stats": {
        "minutes": 90,
        "shotsOffGoal": 1,
        "starting": 1
      }
    },
    {
      "side": "home",
      "teamId": "4867",
      "teamUid": "48",
      "teamName": "Everton",
      "playerId": "934536",
      "name": "Travers, Mark",
      "position": "Goalkeeper",
      "positionType": "G",
      "nationality": "Ireland",
      "stats": {
        "starting": 0
      }
    },
    {
      "side": "home",
      "teamId": "4867",
      "teamUid": "48",
      "teamName": "Everton",
      "playerId": "935132",
      "name": "Mykolenko, Vitaliy",
      "position": "Defender",
      "positionType": "D",
      "nationality": "Ukraine",
      "stats": {
        "minutes": 90,
        "starting": 1
      }
    },
    "... 35 more items"
  ],
  "lineups": {
    "home": {
      "formation": "4-3-3",
      "startingXI": [
        {
          "playerId": "138530",
          "name": "Pickford, Jordan",
          "shirtNumber": "1",
          "position": "G",
          "positionName": "Goalkeeper",
          "matchPosition": "G",
          "order": 1,
          "height": 185,
          "weight": 77,
          "foot": "Left",
          "birthdate": "1994-03-07T00:00:00.000Z",
          "nationality": "England",
          "marketValue": 22000000
        },
        {
          "playerId": "2102914",
          "name": "Rohl, Merlin",
          "shirtNumber": "34",
          "position": "M",
          "positionName": "Right back",
          "matchPosition": "D",
          "order": 2,
          "height": 192,
          "weight": 77,
          "foot": "Both",
          "birthdate": "2002-07-05T00:00:00.000Z",
          "nationality": "Germany",
          "marketValue": 3000000
        },
        {
          "playerId": "145188",
          "name": "Tarkowski, James",
          "shirtNumber": "6",
          "position": "D",
          "positionName": "Central defender",
          "matchPosition": "D",
          "order": 3,
          "height": 185,
          "weight": 81,
          "foot": "Right",
          "birthdate": "1992-11-19T00:00:00.000Z",
          "nationality": "England",
          "marketValue": 13000000
        },
        {
          "playerId": "1720484",
          "name": "Branthwaite, Jarrad",
          "shirtNumber": "4",
          "position": "M",
          "positionName": "Central defender",
          "matchPosition": "D",
          "order": 4,
          "height": 195,
          "weight": 89,
          "foot": "Left",
          "birthdate": "2002-06-27T00:00:00.000Z",
          "nationality": "England",
          "marketValue": 25000000
        },
        {
          "playerId": "935132",
          "name": "Mykolenko, Vitaliy",
          "shirtNumber": "16",
          "position": "D",
          "positionName": "Left back",
          "matchPosition": "D",
          "order": 5,
          "height": 180,
          "weight": 71,
          "foot": "Left",
          "birthdate": "1999-05-29T00:00:00.000Z",
          "nationality": "Ukraine",
          "marketValue": 28000000
        },
        "... 6 more items"
      ],
      "substitutes": [
        {
          "playerId": "934536",
          "name": "Travers, Mark",
          "shirtNumber": "12",
          "position": "G",
          "positionName": "Goalkeeper",
          "height": 191,
          "weight": 82,
          "foot": "Right",
          "birthdate": "1999-05-18T00:00:00.000Z",
          "nationality": "Ireland",
          "marketValue": 3500000
        },
        {
          "playerId": "110846",
          "name": "Keane, Michael",
          "shirtNumber": "5",
          "position": "D",
          "positionName": "Defender",
          "height": 191,
          "weight": 82,
          "foot": "Right",
          "birthdate": "1993-01-11T00:00:00.000Z",
          "nationality": "England",
          "marketValue": 7000000
        },
        {
          "playerId": "1297412",
          "name": "Garner, James",
          "shirtNumber": "37",
          "position": "M",
          "positionName": "Midfielder",
          "height": 186,
          "weight": 77,
          "foot": "Right",
          "birthdate": "2001-03-13T00:00:00.000Z",
          "nationality": "England",
          "marketValue": 20000
        },
        {
          "playerId": "1381883",
          "name": "Patterson, Nathan",
          "shirtNumber": "2",
          "position": "D",
          "positionName": "Defender",
          "height": 183,
          "weight": 83,
          "foot": "Right",
          "birthdate": "2001-10-16T00:00:00.000Z",
          "nationality": "Scotland",
          "marketValue": 15000000
        },
        {
          "playerId": "1645136",
          "name": "O'Brien, Jake",
          "shirtNumber": "15",
          "position": "D",
          "positionName": "Defender",
          "height": 197,
          "weight": 94,
          "foot": "Right",
          "birthdate": "2001-05-15T00:00:00.000Z",
          "nationality": "Ireland"
        },
        "... 4 more items"
      ],
      "manager": {
        "id": "52950",
        "name": "Moyes, David",
        "fullName": "Moyes, David William",
        "nationality": "Scotland"
      },
      "substitutions": [
        {
          "minute": 79,
          "playerIn": {
            "id": "1658367",
            "name": "Beto"
          },
          "playerOut": {
            "id": "2203482",
            "name": "Barry, Thierno"
          }
        },
        {
          "minute": 79,
          "playerIn": {
            "id": "1297412",
            "name": "Garner, James"
          },
          "playerOut": {
            "id": "1978891",
            "name": "Hackney, Hayden"
          }
        },
        {
          "minute": 84,
          "playerIn": {
            "id": "1646334",
            "name": "Johnson, Brennan"
          },
          "playerOut": {
            "id": "2437845",
            "name": "George, Tyrique"
          }
        },
        {
          "minute": 90,
          "playerIn": {
            "id": "2005163",
            "name": "Alcaraz, Carlos"
          },
          "playerOut": {
            "id": "1055173",
            "name": "Dewsbury-Hall, Kiernan"
          }
        }
      ]
    },
    "away": {
      "formation": "3-4-3",
      "startingXI": [
        {
          "playerId": "353202",
          "name": "Henderson, Dean",
          "shirtNumber": "1",
          "position": "G",
          "positionName": "Goalkeeper",
          "matchPosition": "G",
          "order": 1,
          "height": 188,
          "weight": 85,
          "foot": "Right",
          "birthdate": "1997-03-12T00:00:00.000Z",
          "nationality": "England",
          "marketValue": 12000000
        },
        {
          "playerId": "2839263",
          "name": "Canvot, Jaydee",
          "shirtNumber": "6",
          "position": "D",
          "positionName": "Central defender",
          "matchPosition": "D",
          "order": 2,
          "height": 188,
          "weight": 75,
          "foot": "Right",
          "birthdate": "2006-07-29T00:00:00.000Z",
          "nationality": "France"
        },
        {
          "playerId": "1512315",
          "name": "Richards, Chris",
          "shirtNumber": "26",
          "position": "D",
          "positionName": "Central defender",
          "matchPosition": "D",
          "order": 3,
          "height": 189,
          "weight": 87,
          "foot": "Right",
          "birthdate": "2000-03-28T00:00:00.000Z",
          "nationality": "USA",
          "marketValue": 8000000
        },
        {
          "playerId": "2070773",
          "name": "Riad, Chadi",
          "shirtNumber": "4",
          "position": "D",
          "positionName": "Central defender",
          "matchPosition": "D",
          "order": 4,
          "height": 186,
          "weight": 85,
          "foot": "Left",
          "birthdate": "2003-06-17T00:00:00.000Z",
          "nationality": "Morocco"
        },
        {
          "playerId": "1108227",
          "name": "Munoz, Daniel",
          "shirtNumber": "2",
          "position": "D",
          "positionName": "Right winger",
          "matchPosition": "M",
          "order": 5,
          "height": 180,
          "weight": 69,
          "foot": "Right",
          "birthdate": "1996-05-26T00:00:00.000Z",
          "nationality": "Colombia"
        },
        "... 6 more items"
      ],
      "substitutes": [
        {
          "playerId": "249859",
          "name": "Benitez, Walter",
          "shirtNumber": "44",
          "position": "G",
          "positionName": "Goalkeeper",
          "height": 191,
          "weight": 93,
          "foot": "Right",
          "birthdate": "1993-01-19T00:00:00.000Z",
          "nationality": "Argentina",
          "marketValue": 10000000
        },
        {
          "playerId": "1057441",
          "name": "Mingueza, Oscar",
          "shirtNumber": "30",
          "position": "D",
          "positionName": "Defender",
          "height": 184,
          "weight": 75,
          "foot": "Right",
          "birthdate": "1999-05-13T00:00:00.000Z",
          "nationality": "Spain"
        },
        {
          "playerId": "1065792",
          "name": "Strand Larsen, Jorgen",
          "shirtNumber": "22",
          "position": "F",
          "positionName": "Forward",
          "height": 193,
          "weight": 79,
          "foot": "Right",
          "birthdate": "2000-02-06T00:00:00.000Z",
          "nationality": "Norway"
        },
        {
          "playerId": "1428491",
          "name": "Guessand, Evann",
          "shirtNumber": "29",
          "position": "F",
          "positionName": "Forward",
          "height": 188,
          "weight": 79,
          "foot": "Right",
          "birthdate": "2001-07-01T00:00:00.000Z",
          "nationality": "Cote d’Ivoire"
        },
        {
          "playerId": "1634220",
          "name": "Pino, Yeremy",
          "shirtNumber": "10",
          "position": "F",
          "positionName": "Forward",
          "height": 174,
          "weight": 65,
          "foot": "Right",
          "birthdate": "2002-10-20T00:00:00.000Z",
          "nationality": "Spain"
        },
        "... 4 more items"
      ],
      "manager": {
        "id": "2736867",
        "name": "Sage, Pierre",
        "nationality": "France"
      },
      "substitutions": [
        {
          "minute": 55,
          "playerIn": {
            "id": "2275035",
            "name": "Khalaili, Anan"
          },
          "playerOut": {
            "id": "1108227",
            "name": "Munoz, Daniel"
          }
        },
        {
          "minute": 55,
          "playerIn": {
            "id": "1634220",
            "name": "Pino, Yeremy"
          },
          "playerOut": {
            "id": "937000",
            "name": "Nketiah, Eddie"
          }
        },
        {
          "minute": 63,
          "playerIn": {
            "id": "1428491",
            "name": "Guessand, Evann"
          },
          "playerOut": {
            "id": "1484502",
            "name": "McNeil, Dwight"
          }
        },
        {
          "minute": 63,
          "playerIn": {
            "id": "1065792",
            "name": "Strand Larsen, Jorgen"
          },
          "playerOut": {
            "id": "1027583",
            "name": "Mateta, Jean-Philippe"
          }
        },
        {
          "minute": 72,
          "playerIn": {
            "id": "772819",
            "name": "Tomiyasu, Takehiro"
          },
          "playerOut": {
            "id": "2070773",
            "name": "Riad, Chadi"
          }
        }
      ]
    }
  },
  "timeline": [
    {
      "id": "4306456f-bd2c-4f38-95b0-4abd90d95288",
      "type": "match_about_to_start",
      "name": "Match about to start",
      "minute": -1,
      "seconds": -1,
      "injuryTime": 0,
      "timestamp": "2026-08-22T13:59:35.000Z"
    },
    {
      "id": "d43ec4e2-9015-4577-a62a-0b47dd2d27f7",
      "type": "match_started",
      "name": "Started",
      "minute": -1,
      "seconds": -1,
      "injuryTime": 0,
      "team": "home",
      "timestamp": "2026-08-22T14:00:20.000Z",
      "detail": {
        "result": {
          "home": 0,
          "away": 0
        },
        "status": {
          "_doc": "status",
          "_id": 20,
          "name": "Started",
          "shortName": "STA"
        }
      }
    },
    {
      "id": "0026bd69-5888-47f7-8405-d47b4cbebaa5",
      "type": "periodstart",
      "name": "1st half",
      "minute": -1,
      "seconds": -1,
      "injuryTime": 0,
      "timestamp": "2026-08-22T14:00:26.000Z",
      "detail": {
        "period": 1
      }
    },
    {
      "id": "9441cb64-ca63-48e6-8d50-aedc5d092fa0",
      "type": "freekick",
      "name": "Freekick",
      "minute": 1,
      "seconds": 21,
      "injuryTime": 0,
      "team": "away",
      "x": 65,
      "y": 62,
      "timestamp": "2026-08-22T14:00:47.000Z"
    },
    {
      "id": "caa3eb0d-8072-44ff-a57b-381606a607bb",
      "type": "throwin",
      "name": "Throw-in",
      "minute": 2,
      "seconds": 85,
      "injuryTime": 0,
      "team": "home",
      "x": 35,
      "y": 0,
      "timestamp": "2026-08-22T14:01:53.000Z"
    },
    "... 142 more items"
  ],
  "situations": {
    "perMinute": [
      {
        "minute": 1,
        "injuryTime": 0,
        "home": {
          "attack": 4,
          "dangerous": 0,
          "safe": 17,
          "attackcount": 2,
          "dangerouscount": 0,
          "safecount": 1
        },
        "away": {
          "attack": 0,
          "dangerous": 0,
          "safe": 39,
          "attackcount": 0,
          "dangerouscount": 0,
          "safecount": 1
        }
      },
      {
        "minute": 2,
        "injuryTime": 0,
        "home": {
          "attack": 0,
          "dangerous": 0,
          "safe": 40,
          "attackcount": 0,
          "dangerouscount": 0,
          "safecount": 1
        },
        "away": {
          "attack": 1,
          "dangerous": 0,
          "safe": 19,
          "attackcount": 1,
          "dangerouscount": 0,
          "safecount": 0
        }
      },
      {
        "minute": 3,
        "injuryTime": 0,
        "home": {
          "attack": 1,
          "dangerous": 0,
          "safe": 47,
          "attackcount": 1,
          "dangerouscount": 0,
          "safecount": 1
        },
        "away": {
          "attack": 7,
          "dangerous": 5,
          "safe": 0,
          "attackcount": 1,
          "dangerouscount": 1,
          "safecount": 0
        }
      },
      {
        "minute": 4,
        "injuryTime": 0,
        "home": {
          "attack": 24,
          "dangerous": 18,
          "safe": 16,
          "attackcount": 1,
          "dangerouscount": 1,
          "safecount": 1
        },
        "away": {
          "attack": 0,
          "dangerous": 0,
          "safe": 2,
          "attackcount": 0,
          "dangerouscount": 0,
          "safecount": 1
        }
      },
      {
        "minute": 5,
        "injuryTime": 0,
        "home": {
          "attack": 15,
          "dangerous": 7,
          "safe": 14,
          "attackcount": 1,
          "dangerouscount": 1,
          "safecount": 1
        },
        "away": {
          "attack": 2,
          "dangerous": 6,
          "safe": 16,
          "attackcount": 1,
          "dangerouscount": 1,
          "safecount": 2
        }
      },
      "... 97 more items"
    ],
    "events": [
      {
        "id": "44cdd33f-3a70-47ce-b6de-20cd8ec8f1c0",
        "timestamp": "2026-08-22T14:00:27.000Z",
        "team": "home",
        "situation": "attack",
        "x": 50,
        "y": 50,
        "minute": 1,
        "injuryTime": 0
      },
      {
        "id": "4f0a1249-b14b-48e0-bbc4-df154c593e99",
        "timestamp": "2026-08-22T14:00:27.000Z",
        "team": "home",
        "situation": "safe",
        "x": 38,
        "y": 39,
        "minute": 1,
        "injuryTime": 0
      },
      {
        "id": "5e345ce2-1ff0-4330-b5cc-fb83a677b8a0",
        "timestamp": "2026-08-22T14:00:28.000Z",
        "team": "home",
        "situation": "safe",
        "x": 35,
        "y": 15,
        "minute": 1,
        "injuryTime": 0
      },
      {
        "id": "edcf076f-2eec-4f10-a105-99eeea7c74be",
        "timestamp": "2026-08-22T14:00:29.000Z",
        "team": "home",
        "situation": "safe",
        "x": 29,
        "y": 53,
        "minute": 1,
        "injuryTime": 0
      },
      {
        "id": "baa3b806-41ed-4e53-a92c-2bcb74a4cfd5",
        "timestamp": "2026-08-22T14:00:30.000Z",
        "team": "home",
        "situation": "safe",
        "x": 29,
        "y": 19,
        "minute": 1,
        "injuryTime": 0
      },
      "... 813 more items"
    ]
  },
  "h2h": {
    "homeTeam": {
      "id": "4867",
      "uid": "48",
      "name": "Everton",
      "mediumName": "Everton FC",
      "abbr": "EVE"
    },
    "awayTeam": {
      "id": "342002",
      "uid": "7",
      "name": "Crystal Palace",
      "mediumName": "Crystal Palace",
      "abbr": "CRY"
    },
    "matches": [
      {
        "matchId": "72221158",
        "startTime": "2026-08-22T14:00:00.000Z",
        "competitionId": "17",
        "round": 1,
        "homeTeam": {
          "id": "4867",
          "uid": "48",
          "name": "Everton",
          "mediumName": "Everton FC",
          "abbr": "EVE"
        },
        "awayTeam": {
          "id": "342002",
          "uid": "7",
          "name": "Crystal Palace",
          "mediumName": "Crystal Palace",
          "abbr": "CRY"
        },
        "score": {
          "home": 2,
          "away": 0,
          "winner": "home",
          "periods": {
            "ft": {
              "home": 2,
              "away": 0
            },
            "p1": {
              "home": 1,
              "away": 0
            }
          }
        },
        "comment": "1:0 (42.) K.Dewsbury-Hall, 2:0 (53.) T.Barry"
      },
      {
        "matchId": "61301229",
        "startTime": "2026-05-10T13:00:00.000Z",
        "competitionId": "17",
        "round": 36,
        "homeTeam": {
          "id": "342002",
          "uid": "7",
          "name": "Crystal Palace",
          "mediumName": "Crystal Palace",
          "abbr": "CRY"
        },
        "awayTeam": {
          "id": "4867",
          "uid": "48",
          "name": "Everton",
          "mediumName": "Everton FC",
          "abbr": "EVE"
        },
        "score": {
          "home": 2,
          "away": 2,
          "periods": {
            "ft": {
              "home": 2,
              "away": 2
            },
            "p1": {
              "home": 1,
              "away": 1
            }
          }
        },
        "comment": "0:1 (6.) J.Tarkowski, 1:1 (34.) I.Sarr, 1:2 (47.) Beto, 2:2 (77.) J.Mateta"
      },
      {
        "matchId": "61300637",
        "startTime": "2025-10-05T13:00:00.000Z",
        "competitionId": "17",
        "round": 7,
        "homeTeam": {
          "id": "4867",
          "uid": "48",
          "name": "Everton",
          "mediumName": "Everton FC",
          "abbr": "EVE"
        },
        "awayTeam": {
          "id": "342002",
          "uid": "7",
          "name": "Crystal Palace",
          "mediumName": "Crystal Palace",
          "abbr": "CRY"
        },
        "score": {
          "home": 2,
          "away": 1,
          "winner": "home",
          "periods": {
            "ft": {
              "home": 2,
              "away": 1
            },
            "p1": {
              "home": 0,
              "away": 1
            }
          }
        },
        "comment": "0:1 (37.) D.Munoz, 1:1 (76.) I.Ndiaye (pen), 2:1 (90.) J.Grealish"
      },
      {
        "matchId": "50850451",
        "startTime": "2025-02-15T17:30:00.000Z",
        "competitionId": "17",
        "round": 25,
        "homeTeam": {
          "id": "342002",
          "uid": "7",
          "name": "Crystal Palace",
          "mediumName": "Crystal Palace",
          "abbr": "CRY"
        },
        "awayTeam": {
          "id": "4867",
          "uid": "48",
          "name": "Everton",
          "mediumName": "Everton FC",
          "abbr": "EVE"
        },
        "score": {
          "home": 1,
          "away": 2,
          "winner": "away",
          "periods": {
            "ft": {
              "home": 1,
              "away": 2
            },
            "p1": {
              "home": 0,
              "away": 1
            }
          }
        },
        "comment": "0:1 (42.) Beto, 1:1 (47.) J.Mateta, 1:2 (80.) C.Alcaraz"
      },
      {
        "matchId": "50850075",
        "startTime": "2024-09-28T14:00:00.000Z",
        "competitionId": "17",
        "round": 6,
        "homeTeam": {
          "id": "4867",
          "uid": "48",
          "name": "Everton",
          "mediumName": "Everton FC",
          "abbr": "EVE"
        },
        "awayTeam": {
          "id": "342002",
          "uid": "7",
          "name": "Crystal Palace",
          "mediumName": "Crystal Palace",
          "abbr": "CRY"
        },
        "score": {
          "home": 2,
          "away": 1,
          "winner": "home",
          "periods": {
            "ft": {
              "home": 2,
              "away": 1
            },
            "p1": {
              "home": 0,
              "away": 1
            }
          }
        },
        "comment": "0:1 (10.) M.Guehi, 1:1 (47.) D.McNeil, 2:1 (54.) D.McNeil"
      },
      "... 32 more items"
    ],
    "upcomingMatches": [
      {
        "matchId": "72221804",
        "startTime": "2027-04-10T14:00:00.000Z",
        "competitionId": "17",
        "round": 31,
        "homeTeam": {
          "id": "342002",
          "uid": "7",
          "name": "Crystal Palace",
          "mediumName": "Crystal Palace",
          "abbr": "CRY"
        },
        "awayTeam": {
          "id": "4867",
          "uid": "48",
          "name": "Everton",
          "mediumName": "Everton FC",
          "abbr": "EVE"
        }
      }
    ],
    "summary": {
      "played": 37,
      "homeWins": 18,
      "draws": 13,
      "awayWins": 6,
      "goalsHome": 57,
      "goalsAway": 37
    }
  },
  "form": {
    "home": {
      "team": {
        "uid": "48",
        "name": "Everton",
        "mediumName": "Everton FC",
        "abbr": "EVE"
      },
      "matches": [
        {
          "matchId": "73667724",
          "startTime": "2026-08-26T19:00:00.000Z",
          "competitionId": "21",
          "round": 8,
          "homeTeam": {
            "id": "4838",
            "uid": "21",
            "name": "Preston",
            "mediumName": "Preston North End",
            "abbr": "PNE"
          },
          "awayTeam": {
            "id": "66575",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "score": {
            "home": 0,
            "away": 4,
            "winner": "away",
            "periods": {
              "ft": {
                "home": 0,
                "away": 4
              },
              "p1": {
                "home": 0,
                "away": 1
              }
            }
          },
          "comment": "0:1 (25.) T.Barry, 0:2 (59.) T.Barry, 0:3 (70.) T.Barry, 0:4 (72.) B.Johnson"
        },
        {
          "matchId": "72221158",
          "startTime": "2026-08-22T14:00:00.000Z",
          "competitionId": "17",
          "round": 1,
          "homeTeam": {
            "id": "4867",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "awayTeam": {
            "id": "342002",
            "uid": "7",
            "name": "Crystal Palace",
            "mediumName": "Crystal Palace",
            "abbr": "CRY"
          },
          "score": {
            "home": 2,
            "away": 0,
            "winner": "home",
            "periods": {
              "ft": {
                "home": 2,
                "away": 0
              },
              "p1": {
                "home": 1,
                "away": 0
              }
            }
          },
          "comment": "1:0 (42.) K.Dewsbury-Hall, 2:0 (53.) T.Barry"
        },
        {
          "matchId": "72392312",
          "startTime": "2026-08-15T14:00:00.000Z",
          "competitionId": "853",
          "homeTeam": {
            "id": "119940",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "awayTeam": {
            "id": "11034883",
            "uid": "1643",
            "name": "Lille",
            "mediumName": "Lille OSC",
            "abbr": "LIL"
          },
          "score": {
            "home": 1,
            "away": 1,
            "periods": {
              "ft": {
                "home": 1,
                "away": 1
              },
              "p1": {
                "home": 1,
                "away": 0
              }
            }
          },
          "comment": "1:0 (41.) I.Ndiaye (pen), 1:1 (90.) H.Haraldsson"
        },
        {
          "matchId": "71942308",
          "startTime": "2026-08-12T16:15:00.000Z",
          "competitionId": "853",
          "homeTeam": {
            "id": "119940",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "awayTeam": {
            "id": "120328",
            "uid": "39",
            "name": "Newcastle",
            "mediumName": "Newcastle United",
            "abbr": "NEW"
          },
          "score": {
            "home": 3,
            "away": 1,
            "winner": "home",
            "periods": {
              "ft": {
                "home": 3,
                "away": 1
              },
              "p1": {
                "home": 2,
                "away": 0
              }
            }
          },
          "comment": "1:0 (27.) T.Barry, 2:0 (36.) I.Ndiaye (pen), 3:0 (73.) T.George, 3:1 (85.) H.Barnes"
        },
        {
          "matchId": "72185464",
          "startTime": "2026-08-08T15:00:00.000Z",
          "competitionId": "853",
          "homeTeam": {
            "id": "228585",
            "uid": "2677",
            "name": "Stuttgart",
            "mediumName": "VfB Stuttgart",
            "abbr": "VFB"
          },
          "awayTeam": {
            "id": "119940",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "score": {
            "home": 3,
            "away": 1,
            "winner": "home",
            "periods": {
              "ft": {
                "home": 3,
                "away": 1
              },
              "p1": {
                "home": 1,
                "away": 0
              }
            }
          },
          "comment": "1:0 (16.) N.Nartey, 2:0 (65.) R.Hendriks, 2:1 (72.) T.Barry (pen), 3:1 (90.) B.Bouanani"
        },
        "... 5 more items"
      ],
      "results": [
        "W",
        "W",
        "D",
        "W",
        "L",
        "... 5 more items"
      ]
    },
    "away": {
      "team": {
        "uid": "7",
        "name": "Crystal Palace",
        "mediumName": "Crystal Palace",
        "abbr": "CRY"
      },
      "matches": [
        {
          "matchId": "72221158",
          "startTime": "2026-08-22T14:00:00.000Z",
          "competitionId": "17",
          "round": 1,
          "homeTeam": {
            "id": "4867",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "awayTeam": {
            "id": "342002",
            "uid": "7",
            "name": "Crystal Palace",
            "mediumName": "Crystal Palace",
            "abbr": "CRY"
          },
          "score": {
            "home": 2,
            "away": 0,
            "winner": "home",
            "periods": {
              "ft": {
                "home": 2,
                "away": 0
              },
              "p1": {
                "home": 1,
                "away": 0
              }
            }
          },
          "comment": "1:0 (42.) K.Dewsbury-Hall, 2:0 (53.) T.Barry"
        },
        {
          "matchId": "72367306",
          "startTime": "2026-08-15T12:00:00.000Z",
          "competitionId": "853",
          "homeTeam": {
            "id": "119837",
            "uid": "2538",
            "name": "Freiburg",
            "mediumName": "SC Freiburg",
            "abbr": "SCF"
          },
          "awayTeam": {
            "id": "119935",
            "uid": "7",
            "name": "Crystal Palace",
            "mediumName": "Crystal Palace",
            "abbr": "CRY"
          },
          "score": {
            "home": 3,
            "away": 0,
            "winner": "home",
            "periods": {
              "ft": {
                "home": 3,
                "away": 0
              },
              "p1": {
                "home": 1,
                "away": 0
              }
            }
          }
        },
        {
          "matchId": "73449096",
          "startTime": "2026-08-07T17:00:00.000Z",
          "competitionId": "853",
          "homeTeam": {
            "id": "225577",
            "uid": "43",
            "name": "Fulham",
            "mediumName": "Fulham FC",
            "abbr": "FUL"
          },
          "awayTeam": {
            "id": "119935",
            "uid": "7",
            "name": "Crystal Palace",
            "mediumName": "Crystal Palace",
            "abbr": "CRY"
          },
          "score": {
            "home": 1,
            "away": 2,
            "winner": "away",
            "periods": {
              "ft": {
                "home": 1,
                "away": 2
              },
              "p1": {
                "home": 1,
                "away": 1
              }
            }
          }
        },
        {
          "matchId": "73301084",
          "startTime": "2026-07-31T18:45:00.000Z",
          "competitionId": "853",
          "homeTeam": {
            "id": "119935",
            "uid": "7",
            "name": "Crystal Palace",
            "mediumName": "Crystal Palace",
            "abbr": "CRY"
          },
          "awayTeam": {
            "id": "34462358",
            "uid": "1367912",
            "name": "Alula SC",
            "mediumName": "Alula SC",
            "abbr": "ALU"
          },
          "score": {
            "home": 3,
            "away": 1,
            "winner": "home",
            "periods": {
              "ft": {
                "home": 3,
                "away": 1
              },
              "p1": {
                "home": 2,
                "away": 1
              }
            }
          }
        },
        {
          "matchId": "72498008",
          "startTime": "2026-07-28T18:30:00.000Z",
          "competitionId": "853",
          "homeTeam": {
            "id": "1400244",
            "uid": "49531",
            "name": "Famalicao",
            "mediumName": "FC Famalicao",
            "abbr": "FAM"
          },
          "awayTeam": {
            "id": "119935",
            "uid": "7",
            "name": "Crystal Palace",
            "mediumName": "Crystal Palace",
            "abbr": "CRY"
          },
          "score": {
            "home": 4,
            "away": 5,
            "winner": "away",
            "periods": {
              "ft": {
                "home": 0,
                "away": 0
              },
              "p1": {
                "home": 0,
                "away": 0
              },
              "ap": {
                "home": 4,
                "away": 5
              }
            }
          }
        },
        "... 5 more items"
      ],
      "results": [
        "L",
        "L",
        "W",
        "W",
        "W",
        "... 5 more items"
      ]
    }
  },
  "tables": {
    "slice": {
      "id": "108752",
      "name": "Premier League",
      "seasonId": "140756",
      "currentRound": 1,
      "maxRounds": 38,
      "totalRows": 20,
      "rows": [
        {
          "position": 4,
          "team": {
            "id": "4867",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "played": 1,
          "win": 1,
          "draw": 0,
          "loss": 0,
          "goalsFor": 2,
          "goalsAgainst": 0,
          "goalDiff": 2,
          "points": 3,
          "change": 0,
          "promotion": "Champions League"
        },
        {
          "position": 16,
          "team": {
            "id": "342002",
            "uid": "7",
            "name": "Crystal Palace",
            "mediumName": "Crystal Palace",
            "abbr": "CRY"
          },
          "played": 1,
          "win": 0,
          "draw": 0,
          "loss": 1,
          "goalsFor": 0,
          "goalsAgainst": 2,
          "goalDiff": -2,
          "points": 0,
          "change": 0
        }
      ]
    },
    "season": {
      "id": "108752",
      "name": "Premier League",
      "seasonId": "140756",
      "currentRound": 1,
      "maxRounds": 38,
      "totalRows": 20,
      "rows": [
        {
          "position": 1,
          "team": {
            "id": "6601990",
            "uid": "30",
            "name": "Brighton",
            "mediumName": "Brighton & Hove Albion",
            "abbr": "BRI"
          },
          "played": 1,
          "win": 1,
          "draw": 0,
          "loss": 0,
          "goalsFor": 4,
          "goalsAgainst": 0,
          "goalDiff": 4,
          "points": 3,
          "change": 0,
          "promotion": "Champions League"
        },
        {
          "position": 2,
          "team": {
            "id": "4871",
            "uid": "42",
            "name": "Arsenal",
            "mediumName": "Arsenal FC",
            "abbr": "ARS"
          },
          "played": 1,
          "win": 1,
          "draw": 0,
          "loss": 0,
          "goalsFor": 3,
          "goalsAgainst": 0,
          "goalDiff": 3,
          "points": 3,
          "change": 0,
          "promotion": "Champions League"
        },
        {
          "position": 2,
          "team": {
            "id": "13241732",
            "uid": "50",
            "name": "Brentford",
            "mediumName": "Brentford FC",
            "abbr": "BRE"
          },
          "played": 1,
          "win": 1,
          "draw": 0,
          "loss": 0,
          "goalsFor": 3,
          "goalsAgainst": 0,
          "goalDiff": 3,
          "points": 3,
          "change": 0,
          "promotion": "Champions League"
        },
        {
          "position": 4,
          "team": {
            "id": "4867",
            "uid": "48",
            "name": "Everton",
            "mediumName": "Everton FC",
            "abbr": "EVE"
          },
          "played": 1,
          "win": 1,
          "draw": 0,
          "loss": 0,
          "goalsFor": 2,
          "goalsAgainst": 0,
          "goalDiff": 2,
          "points": 3,
          "change": 0,
          "promotion": "Champions League"
        },
        {
          "position": 4,
          "team": {
            "id": "1274472",
            "uid": "96",
            "name": "Hull",
            "mediumName": "Hull City",
            "abbr": "HUL"
          },
          "played": 1,
          "win": 1,
          "draw": 0,
          "loss": 0,
          "goalsFor": 2,
          "goalsAgainst": 0,
          "goalDiff": 2,
          "points": 3,
          "change": 0,
          "promotion": "UEFA Europa League"
        },
        "... 15 more items"
      ]
    }
  },
  "funfacts": [
    "When playing at home, Everton have not lost to Crystal Palace in their last 12 encounters.",
    "Everton have played 4 home matches in a row without winning.",
    "During the last 17 meetings with Everton playing at home, Everton have won 10 times, there have been 4 draws while Crystal Palace have won 3 times. The goal difference is 35-19 in favour of Everton."
  ],
  "layersDelivered": [
    "info",
    "teamStats",
    "playerStats",
    "lineups",
    "timeline",
    "... 5 more items"
  ],
  "sourceUrl": "https://statshub.sportradar.com/betano/en/match/72221158",
  "scrapedAt": "2026-08-28T19:40:15.449Z"
}
```

### How to scrape sportradar.com

1. Go to [Sportradar Match Stats Scraper](https://apify.com/blackfalcondata/sportradar-stats-scraper?fpr=1h3gvi) in Apify Console.
2. Configure the input.
3. Set `maxResults` to control how many results you need.
4. Click **Start** and wait for the run to finish.
5. Export the dataset as JSON, CSV, or Excel.

### Use cases

- Extract match data from sportradar.com for market research and competitive analysis.
- Feed structured data into AI agents, MCP tools, and automated pipelines using compact mode.
- Export clean, structured data to dashboards, spreadsheets, or data warehouses.

### How much does it cost to scrape sportradar.com?

Sportradar Match Stats Scraper uses [pay-per-event](https://docs.apify.com/platform/actors/paid-actors/pay-per-event) pricing. You pay a small fee when the run starts and then for each result that is actually produced.

- **Run start:** $0.001 per run
- **Per match (primary event):** $0.002

You are billed only for the events your run actually triggers. Prices below are the Free plan tier.

| Event | Price (Free tier) | Charged when |
|---|---|---|
| Actor Start | $0.001 (one-time) | Charged once per run (one event per GB of memory, minimum one). Platform usage (compute and data transfer) is billed separately by Apify at your plan rates. |
| Match (primary) | $0.002 | One match delivered to your dataset with its header: teams, competition, season, round, kickoff, status, score, venue, referee and managers, plus the headline team statistics once the match is under way. A fixture that has not kicked off yet has no statistics to publish and still costs one match. Charged once per match, however many data layers ride on it. |
| Data layer | $0.001 | Added once per extra data layer delivered on a match: team statistics with half splits, player statistics, lineups, timeline, match situations, head-to-head, form, league tables or fun facts. A layer the source has no data for is not charged. |

Example costs (primary event only — other events above add cost when they fire):

- 10 results: **$0.021**
- 25 results: **$0.051**
- 100 results: **$0.2**
- 200 results: **$0.4**
- 500 results: **$1**

> **Platform usage is billed on top of these prices.** The figures above are Apify event fees only. Compute units and proxy traffic are billed separately by Apify at your actual consumption, and for proxy- or browser-heavy workloads they can exceed the event fees. What you actually pay depends on your own input — how many results you request, whether detail enrichment is on, the run memory you choose, and your proxy settings — so it cannot be stated as a fixed figure here. Every run reports its exact platform usage on the run detail page.
>
> The **Actor Start** event is charged once per GB of run memory (minimum one), so a run configured with 2 GB is charged two start events rather than one.

### FAQ

#### How many results can I get from sportradar.com?

The number of results depends on the search query and available matches on sportradar.com. Use the `maxResults` parameter to control how many results are returned per run.

#### Can I integrate Sportradar Match Stats Scraper with other apps?

Yes. Sportradar Match Stats Scraper works with Apify's [integrations](https://apify.com/integrations?fpr=1h3gvi) to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.

#### Can I use Sportradar Match Stats Scraper with the Apify API?

Yes. You can start runs, manage inputs, and retrieve results programmatically through the [Apify API](https://docs.apify.com/api/v2). Client libraries are available for JavaScript, Python, and other languages.

#### Can I use Sportradar Match Stats Scraper through an MCP Server?

Yes. Apify provides an [MCP Server](https://apify.com/apify/actors-mcp-server?fpr=1h3gvi) that lets AI assistants and agents call this actor directly. Use compact mode and `excludeEmptyFields` to keep payloads manageable for LLM context windows.

#### Is it legal to scrape sportradar.com?

This actor extracts publicly available data from sportradar.com. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.

#### Your feedback

If you have questions, need a feature, or found a bug, please [open an issue](https://apify.com/blackfalcondata/sportradar-stats-scraper/issues?fpr=1h3gvi) on the actor's page in Apify Console. Your feedback helps us improve.

### You might also like

- [Betano Odds API — Live and Pre-Match Odds, 14 Countries](https://apify.com/blackfalcondata/betano-odds-api?fpr=1h3gvi) — $3 day pass or $0.002 per call. Betano odds as a REST API: pre-match and live with score and clock,.
- [Betano Odds Scraper — Live + All Markets, 14 Countries](https://apify.com/blackfalcondata/betano-scraper?fpr=1h3gvi) — Scrape Betano betting odds from 14 country books at $3 per 1,000 events: pre-match and in-play.
- [Elpris Scraper — Danish Electricity Prices & Suppliers](https://apify.com/blackfalcondata/elpris-scraper?fpr=1h3gvi) — Scrape every electricity product Danish suppliers report to elpris.dk — supplier, price bands.
- [Google Trends Scraper \[Just 💰$0.49\] — Interest & Related](https://apify.com/blackfalcondata/google-trends-scraper?fpr=1h3gvi) — 💰 $0.49 per 1,000 trending terms — the cheapest paid Google Trends scraper. Scrape live trending.
- [MLB Stats Scraper 💰$2/1K — Rosters & Season Stats](https://apify.com/blackfalcondata/mlb-scraper?fpr=1h3gvi) — Scrape statsapi.mlb.com for every MLB player in a season: full roster with batting, pitching.
- [Outseo Scraper: Full Leaderboard](https://apify.com/blackfalcondata/outseo-scraper?fpr=1h3gvi) — Scrape every ranked site on the outseo.lol organic-traffic leaderboard, not just the first page,.
- [Transfermarkt Scraper \[Just 💰$0.5\] — football market values](https://apify.com/blackfalcondata/transfermarkt-market-value-scraper?fpr=1h3gvi) — 💰 $0.5 per 1,000 records. Scrape transfermarkt.com — player market values with full history ·.

### Getting started with Apify

New to Apify? [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=1h3gvi) — no credit card required.

1. Sign up — $5 platform credit included
2. Open this actor and configure your input
3. Click **Start** — export results as JSON, CSV, or Excel

Need more later? [See Apify pricing](https://apify.com/pricing?fpr=1h3gvi).

### How billing works

Two per-result fees, both charged only for what reaches your dataset. The match fee covers the header of every delivered match: teams, competition, season, round, kickoff, status, score, venue, referee, managers and the headline team statistics. It is charged once per match however many layers ride on it, because a match is always one row. The data-layer fee is added once for each extra layer that came back with data, so a match delivered with team statistics, lineups and the timeline is one match fee plus three layer fees. A layer you asked for that the source has no document for is listed on the row under layersFailed and is not charged, and a match whose header cannot be read is skipped and not charged at all. Platform usage (compute and data transfer) is billed by Apify at your plan's rates on top of these fees; a header-only run uses very little of it, and the timeline and match-situation layers are the two that move it.

### Where the match ids come from

Every Sportradar match has one numeric id, and bookmakers that embed the Sportradar widget publish it next to their fixtures. On Betano it is the betRadarId field on an event, and the stats link on the event page is the same id in URL form. You can paste either into matchIds: a bare id, a statshub.sportradar.com match URL, or the s5.sir.sportradar.com link a book publishes. That means an odds feed and this actor join on a single key, with no name matching and no lookup table in between.

### Disclaimer

This actor reads publicly available match statistics from Sportradar's own stats widget. It is not affiliated with, endorsed by or operated by Sportradar. Statistics, lineups, timelines, tables and fixture data are reproduced as the widget served them at the time of the run: live matches change minute by minute, and figures can be corrected or withdrawn afterwards. Availability depends on the source. Not every match has every layer, coverage differs by competition, and a fixture with no lineup published yet is delivered without one; when the source is down or has no document for an id, a run can return fewer matches or none. In that case you still pay the Actor start fee and the platform usage the run consumed, but no per-match or per-layer fees, because those are charged only for what is delivered to your dataset.

### Search keywords

sportradar scraper, sportradar api, apify sportradar, sportradar data extraction, sportradar match stats scraper, sportradar match stats api, apify sportradar match stats, sportradar match stats data extraction, sportradar.com scraper, sportradar.com data, sportradar.com api.

# Actor input Schema

## `matchIds` (type: `array`):

Sportradar match ids, one per line. A full match link works too and is the easier way in: paste the stats link a bookmaker publishes next to a fixture (for example https://s5.sir.sportradar.com/betano/en/match/72221220) or a statshub.sportradar.com match URL, and the id is read from it. The same id is what Betano and other books carry as betRadarId.

## `startUrls` (type: `array`):

Sportradar statshub match page URLs, or the statsUrl values other scrapers publish (for example https://s5.sir.sportradar.com/betano/en/match/72221220). They are read the same way as match ids and can be combined with them.

## `layers` (type: `array`):

Which blocks of data to attach to each match. The header (teams, competition, kickoff, status, score, venue, referee and managers) is always included and is what the match fee covers, along with the headline team statistics once the match is under way — a fixture that has not kicked off has none to publish. Every layer you add here is fetched separately and charged separately, and only when it comes back with data.

## `client` (type: `string`):

Which edition of the stats widget to read. Both serve the same match data; leave this on Betano unless a match answers only on the generic edition.

## `maxResults` (type: `integer`):

Stop after this many matches (0 = every id you supplied). Ids are processed in the order you list them.

## `compact` (type: `boolean`):

Header fields only: match, teams, competition, kickoff, status, score and venue. Drops the nested data layers from each row, for AI-agent and dashboard workflows. Layers you asked for are still fetched and still charged, so switch this off if you want them in the output.

## `excludeEmptyFields` (type: `boolean`):

Drop null, empty-string and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards.

## Actor input object example

```json
{
  "matchIds": [
    "72221158",
    "https://s5.sir.sportradar.com/betano/en/match/72221220"
  ],
  "startUrls": [],
  "layers": [
    "teamStats",
    "lineups",
    "timeline"
  ],
  "client": "betano",
  "maxResults": 2,
  "compact": false,
  "excludeEmptyFields": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "matchIds": [
        "72221158",
        "https://s5.sir.sportradar.com/betano/en/match/72221220"
    ],
    "layers": [
        "teamStats",
        "lineups",
        "timeline"
    ],
    "maxResults": 2,
    "compact": false,
    "excludeEmptyFields": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("blackfalcondata/sportradar-stats-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 = {
    "matchIds": [
        "72221158",
        "https://s5.sir.sportradar.com/betano/en/match/72221220",
    ],
    "layers": [
        "teamStats",
        "lineups",
        "timeline",
    ],
    "maxResults": 2,
    "compact": False,
    "excludeEmptyFields": False,
}

# Run the Actor and wait for it to finish
run = client.actor("blackfalcondata/sportradar-stats-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "matchIds": [
    "72221158",
    "https://s5.sir.sportradar.com/betano/en/match/72221220"
  ],
  "layers": [
    "teamStats",
    "lineups",
    "timeline"
  ],
  "maxResults": 2,
  "compact": false,
  "excludeEmptyFields": false
}' |
apify call blackfalcondata/sportradar-stats-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,blackfalcondata/sportradar-stats-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/wrLhQh7Y19bczQbzE/builds/XghezgqPPW28GtQ1O/openapi.json
