Complete player records, appearances, minutes and match events from 2,200+ football leagues, in one uniform response. Built so a single missing stat never breaks a gameweek's scoring.
Inter
Goals and assists


Case study
"The quality of the data itself stands out."
Once you start utilising it, you realise its excellence isn't just superficial.

Case study
"Data reliability has been constantly improving."
I particularly highlight the support team's agility and efficiency in resolving any issues.


Case study
"Sportmonks has proven to be a great partner."
Finding high-quality football and betting data is challenging. When available, it's often too expensive or hard to integrate.

Case study
"Real-world football, inside FIFA Career Mode."
SoFIFA pulls up-to-date squads, ratings and historical seasons into the game.

Case study
"Seven years. No major problems."
Other services provided the same data at much higher prices that we could not afford.
Case study
"Automated sports media at scale."
ScorePlay powers sports media management with real-time Sportmonks data: every match, every moment.
"Sportmonks feels like a partner rather than just a service."
The support team is fast, helpful, and actually understands what you're trying to achieve.
Case study
"AI football commentary in 12+ languages."
Botbrains scales generative match commentary across markets, powered by Sportmonks data.
Case study
"Middle East's fastest-growing football fan platform."
Built on Sportmonks data to power live experiences for millions of fans.
"Fast and consistent, critical for live features."
Getting started was very smooth. Within a short time we were retrieving data and integrating it into the platform.
Case study
"Logic over gut feeling in sports betting."
Fine Line replaces guesswork with data-driven decisions across 2,200+ leagues.
Case study
"Side project to sustainable football platform."
Footi built and scaled the whole product on Sportmonks data.
"Worldwide coverage at unmatched price."
Depth of coverage on the worldwide package was unmatched at the price point.
Case study
"Sweden's most complete football site."
Fotboll.com is built end-to-end on Sportmonks data across all major leagues.
Fantasy is settled to the point. One wrong appearance or a late rating and the whole gameweek's table is wrong, in public, in front of your most engaged users.
Fantasy scoring is only as good as its worst record. A single player whose minutes, goal or assist never landed means every manager who owned him is scored wrong, and they will notice before you do.
Per-player minutes, ratings and events in lineups.details
A player changes club, or a feed reissues his id, and every squad, watchlist and points history keyed to the old id quietly breaks. In fantasy that mapping is the whole game.
Stable player ids across seasons and transfers
Provisional stats that keep changing for an hour after full time mean you either settle early and correct in public, or make managers wait. What you need is a feed that corrects itself under the same ids.
Corrections update in place under the same fixture and player ids
No SDK to adopt and no schema to design first. These are real calls against the v3 API, with the include options that decide how much comes back.
Pull a squad for a season and you have every player, with the ids you key your own records against. This is the call your game setup makes.
// 2930 = Inter, season 25533 /v3/football/squads/seasons/25533/teams/2930 ?include=player &api_token=YOUR_TOKEN
Useful includes
Request the fixture with lineups.details and events, and you have per-player minutes, ratings, goals and assists in one response. This is where a gameweek is settled.
// one fixture, per-player detail /v3/football/fixtures/19425124 ?include=lineups.details;events &api_token=YOUR_TOKEN
Useful includes
Pull the season topscorers to drive leaderboards, price players and set captaincy hints. Same ids and same response shape, so it reuses your player parser.
// season 25533 = Serie A /v3/football/topscorers/seasons/25533 ?include=player &api_token=YOUR_TOKEN
Useful includes
Not a capability list. These are the endpoints a fantasy build hits to set up a game and score it, and the fields they return, named exactly as they appear in the response.
| Endpoint | What it gives you | Fields you will use |
|---|---|---|
| /playersThe player universe | Every player with a stable id you key your squads, watchlists and points history against, so a transfer does not orphan your records. | iddisplay_nameposition_idnationality_iddate_of_birth |
| /squadsWho is in the squad this season | Squad membership per team and season, so your player pool for a game reflects who is actually registered rather than a stale list. | player_idteam_idjersey_numberseason_id |
| include=lineups.detailsPer-player match detail | The scoring engine. Per-player minutes, ratings and match stats for a fixture, keyed to the player id, so a gameweek is a loop over one response. | player_idplayer_namejersey_numberdetails[].type_iddetails[].data.value |
| include=eventsGoals, assists, cards | Every incident with its real minute and the players involved, plus the running score after it. This is the goals-and-assists side of scoring. | minuteplayer_namerelated_player_nametype_idresult |
| /topscorersSeason leaders | Ranked goal and assist leaders per season, so leaderboards, player pricing and captaincy hints come from data rather than a manual list. | player_idtotaltype_idparticipant_id |
| /fixturesThe gameweek schedule | Schedules and results with the same ids and response shape, so the fixture list that drives your gameweeks reuses one parser. | idresult_infostarting_atseason_id |
Scroll the table sideways to see every column.
Every field above is in the free trial. Read the full entity reference →
One call to a fixture with lineups.details and events, and you have the per-player detail a gameweek is scored from. Here is the call and exactly what comes back.
# One fixture, per-player detail and events curl -s "https://api.sportmonks.com/v3/football/fixtures/19425124?include=lineups.details;events" \ -H "Authorization: YOUR_API_TOKEN"
const res = await fetch( "https://api.sportmonks.com/v3/football/fixtures/19425124?include=lineups.details;events", { headers: { Authorization: process.env.SPORTMONKS_TOKEN } } ); const { data } = await res.json(); for (const player of data.lineups) { console.log(player.jersey_number, player.player_name); player.details.forEach(d => console.log(d.type_id, d.data.value) ); }
import os, requests r = requests.get( "https://api.sportmonks.com/v3/football/fixtures/19425124", params={"include": "lineups.details;events"}, headers={"Authorization": os.environ["SPORTMONKS_TOKEN"]}, timeout=10, ) for player in r.json()["data"]["lineups"]: print(player["jersey_number"], player["player_name"]) for d in player["details"]: print(d["type_id"], d["data"]["value"])
$ch = curl_init( "https://api.sportmonks.com/v3/football/fixtures/19425124?include=lineups.details;events" ); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: " . getenv("SPORTMONKS_TOKEN")], ]); $body = json_decode(curl_exec($ch), true); foreach ($body["data"]["lineups"] as $player) { printf("%s %s\n", $player["jersey_number"], $player["player_name"]); }
req, _ := http.NewRequest("GET", "https://api.sportmonks.com/v3/football/fixtures/19425124?include=lineups.details;events", nil) req.Header.Set("Authorization", os.Getenv("SPORTMONKS_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { return err } defer res.Body.Close() var payload FixtureResponse json.NewDecoder(res.Body).Decode(&payload)
{
"data": {
"id": 19425124,
"league_id": 384,
"season_id": 25533,
"name": "Inter vs Juventus",
"starting_at": "2026-02-14 19:45:00",
"result_info": "Inter won after full-time.",
"participants": [
{ "id": 2930, "name": "Inter",
"meta": { "location": "home" } },
{ "id": 625, "name": "Juventus",
"meta": { "location": "away" } }
],
"events": [
{ "minute": 26, "type_id": 14, "participant_id": 625,
"player_name": "Andrea Cambiaso",
"related_player_name": "Weston McKennie",
"result": "1-1" },
{ "minute": 76, "type_id": 14, "participant_id": 2930,
"player_name": "Pio Esposito",
"related_player_name": "Federico Dimarco",
"result": "2-1" },
{ "minute": 90, "type_id": 14, "participant_id": 2930,
"player_name": "Piotr Zieliński",
"related_player_name": "Yann Bisseck",
"result": "3-2" }
// + 2 more goals (17' OG 1-0, 83' Locatelli 2-2)
],
"lineups": [
{ "player_name": "Bremer", "jersey_number": 3,
"team_id": 2930,
"details": [
{ "type": { "code": "RATING" }, "data": { "value": 7.05 } },
{ "type": { "code": "MINUTES_PLAYED" }, "data": { "value": 90 } }
] },
{ "player_name": "Emil Holm", "jersey_number": 2,
"team_id": 625,
"details": [
{ "type": { "code": "RATING" }, "data": { "value": 6.28 } },
{ "type": { "code": "MINUTES_PLAYED" }, "data": { "value": 44 } }
] }
// each lineups[] entry also carries player_id, position_id, formation_field
]
}
}
Same per-player shape in Serie A, the Premier League and a second division you have never heard of. Read the docs or get a token and run it yourself.
Every figure here is measured rather than marketed, and we say which is which.
Measured uptime is our own observed availability, not a contractual guarantee. Ask support for the service terms that apply to your plan.
"Finding high-quality football and betting data is challenging. When available, it is often either too expensive or difficult to integrate. This is where Sportmonks has proven to be a great partner."
FantaMaster runs a fantasy football platform, where a game is only as trustworthy as the player records behind it. Complete, correctly attributed data at an approachable price is the difference between a game managers trust and one they abandon.
Pasquale PuzioCo-founder, FantaMaster
"Sportmonks gives us a clean, stable framework we can build on without worrying about inconsistent naming or missing relationships."
Khachin BorjiginFounder, SoFIFA
"Getting started with the Sportmonks API was actually very smooth. Within a short time, we were able to retrieve data and integrate it into our platform."
Leon KorstersCo-founder, Sportspoule
Start on the free tier, move up when your player base does. Every plan includes the players, squads and fixtures endpoints, human support and a 14-day trial of the paid features.
Starter
For a first build
EUR29/mo
Billed monthly
Growth
Most fantasy builds start here
EUR99/mo
Billed monthly
Pro
Multi-league fantasy games
EUR249/mo
Billed monthly
Enterprise
Full coverage
from EUR499/mo
Billed monthly
Prices exclusive of VAT. League counts are how many competitions you select on that plan, not a limit on what the API covers. See the full plan comparison →
Quick answers before you take a token. The long version is in the developer docs.
Request a fixture with include=lineups.details;events. That returns per-player minutes, ratings and match detail alongside the goals and assists, all keyed to the player id, so a gameweek is a loop over one response.
The same call works for any covered fixture, so one scoring routine covers every league you run. Every entity is listed in the docs.
Yes. A player keeps one stable id across clubs and seasons, so the squads, watchlists and points history you key against that id survive a transfer window without a remap.
That stability is what lets you carry a manager's history forward year on year. The player entity is documented in the players endpoint.
Call the squads endpoint for a team and season and you get every registered player with the ids to build your player pool from, rather than maintaining a list by hand.
Add include=player to pull the profile in the same response. The exact path is on the squads endpoint page.
Sportmonks carries ten years of sports data at scale across 2,200+ football leagues, in the same response shape as the current season, so history and live data share one parser.
That history is what preseason pricing, form and rankings are built from. Check a competition on the coverage page before you build a game around it.
Feeds are cross-checked against more than one source, and when a stat is corrected the fixture and its player detail update in place under the same ids, so your next poll returns the settled state without you reconciling anything.
We publish measured uptime rather than a settle-time figure we have not verified end to end. Ask support for the current picture on your plan, or see the plans and pricing page.
No. Players, squads, fixtures, lineups, events and topscorers are core Football API data, available on every plan including the free tier. Everything this page describes runs without an add-on.
The deeper analytical layers are sold separately and are listed on the plans and pricing page.
The topscorers endpoint returns ranked goal and assist leaders per season, which is what drives leaderboards, player pricing and captaincy hints from data rather than a manual list.
Add include=player to attach the profile to each entry. The endpoint is documented in the topscorers reference.
A token takes a couple of minutes and needs no card. Pull a fixture with lineups.details, score it, and judge the data on the response rather than on this page.
No contracts, no minimums. Human support seven days a week, including during your trial.
Sportmonks is the most approachable sports data API. Reliable enough to trust in production, priced so you can start today, and built so one person can get it working in an afternoon.
Building something else?
Want to build a real-time football app that fans love? Learn how to connect to thousands of leagues, stream scores, and keep your app blazing fast.
Enter your email to grab our practical, no-fluff PDF.
Detailed Player Statistics (Sample API Response)
{ "data": { "id": 19568538, "sport_id": 1, "league_id": 2, "season_id": 25580, "stage_id": 77478049, "round_id": 388952, "state_id": 5, "venue_id": 230, "name": "Liverpool vs Real Madrid", "starting_at": "2025-11-04 20:00:00", "result_info": "Liverpool won after full-time.", "has_odds": true, "has_premium_odds": true, "lineups": [ { "id": 14671425049, "player_name": "Virgil van Dijk", "jersey_number": 4, "details": [ { "type": {"name": "Captain"} }, { "type": {"name": "Minutes Played"}, "data": {"value": 90} }, { "type": {"name": "Possession Lost"}, "data": {"value": 7} }, { "type": {"name": "Accurate Passes"}, "data": {"value": 29} }, { "type": {"name": "Long Balls"}, "data": {"value": 12} } ] } ] } }