Fixtures, events, lineups, statistics and pre-calculated Match Facts from 2,200+ football leagues, in one uniform response. Template a match report once, and it stays correct across every fixture and every competition you cover.
Man City
Events
Match fact · generated
Manchester City won the possession battle 59% to 41% and out-shot Arsenal 15 to 9 on the way to a 2-1 win, Haaland settling it on 65 minutes.


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.
A media site is judged on the pages nobody sees you make. The report that reads well is the one that was correct without an editor touching it.
A match report template that works for the derby will trip over the fixture with an own goal, a red card in stoppage time or a name with an accent. At volume, the edge case is not rare, it is Saturday.
One uniform response shape across every fixture and competition
Every provider carries the big five. A media site earns its traffic on the second tier and the league a reader follows because they grew up near the ground. That is exactly where budget feeds stop returning enough to build a page from.
2,200+ leagues, the long tail included, one response shape
Writing the context by hand does not cover a full matchday, let alone a full weekend across every competition. The moment coverage depends on someone being awake, the coverage has a ceiling.
Match Facts arrive pre-calculated, structured and window-aware
No SDK to adopt and no schema to design first. The same fixtures endpoint carries the story, the context layer and the widgets, so a template you write once holds its shape across every competition.
One request returns a fixture with its goals, cards, lineups and team numbers. This is the call a match report or match page renders from.
// one fixture, full match story /v3/football/fixtures/19427734 ?include=events;statistics; lineups;participants
Useful includes
Match Facts arrive on the same fixtures call as an add-on: pre-calculated trends, storylines and an optional written sentence per fact, so the report explains the match, not just records it.
// same fixture, context layer (add-on) /v3/football/fixtures/19427734 ?include=events;statistics; trends;AIOverviews
Useful includes
When the match view is one part of a bigger site rather than the whole product, embed a widget instead of building a front end. It runs on the same data, so you can move to the raw API later without switching provider.
// match centre widget, one embed <div id="sm-widget" data-widget="match-centre" data-fixture="19427734">
Widgets available
Not a capability list. These are the endpoints a media build hits to publish a match, and the fields they return, named exactly as they appear in the response.
| Endpoint | What it gives you | Fields you will use |
|---|---|---|
| /fixturesThe match spine | One fixture with its result and metadata. This is the object a match report, preview or recap is built around, the same shape in every competition you cover. | idnameresult_infostarting_atleague_id |
| include=eventsGoals, cards, substitutions | Every incident with its real minute and the players involved, plus the running score after it. This is what a timeline and an auto-written recap render from. | minuteextra_minuteplayer_namerelated_player_nameresult |
| include=statisticsThe match in numbers | Bilateral team statistics, one object per team per type, so a comparison table is a loop rather than a special case per competition. | type_idlocationdata.value |
| include=lineupsWho played | Starting elevens, bench and formation slots, with player ids you can key your own records and player pages against. | player_idplayer_namejersey_numberformation_field |
| include=trendsMatch Facts, add-on | Pre-calculated trends, streaks, head-to-head records and player storylines, window-aware so you choose which fixtures count. This is the context layer you would otherwise build and maintain yourself. | all_matchesleague_matchesallFixtures |
| include=AIOverviewsMatch Facts, add-on | A ready-to-display written match summary generated from the underlying Match Facts, so a preview or recap arrives as a sentence, not just as numbers to assemble. | fixtures endpoint |
Scroll the table sideways to see every column.
The core fixture data is in the free trial. Match Facts and AI Overviews are add-ons. Read the full entity reference →
One endpoint, the includes you name, and a response that looks the same in every competition. Here is the call and exactly what comes back.
# One fixture with its events and statistics curl -s "https://api.sportmonks.com/v3/football/fixtures/19427734?include=events;statistics" \ -H "Authorization: YOUR_API_TOKEN"
const res = await fetch( "https://api.sportmonks.com/v3/football/fixtures/19427734?include=events;statistics", { headers: { Authorization: process.env.SPORTMONKS_TOKEN } } ); const { data } = await res.json(); console.log(data.name, data.result_info); data.events.forEach(e => console.log(e.minute, e.player_name, e.result) );
import os, requests r = requests.get( "https://api.sportmonks.com/v3/football/fixtures/19427734", params={"include": "events;statistics"}, headers={"Authorization": os.environ["SPORTMONKS_TOKEN"]}, timeout=10, ) fixture = r.json()["data"] print(fixture["name"], fixture["result_info"]) for e in fixture["events"]: print(e["minute"], e["player_name"], e["result"])
$ch = curl_init( "https://api.sportmonks.com/v3/football/fixtures/19427734?include=events;statistics" ); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: " . getenv("SPORTMONKS_TOKEN")], ]); $fixture = json_decode(curl_exec($ch), true)["data"]; printf("%s (%s)\n", $fixture["name"], $fixture["result_info"]);
req, _ := http.NewRequest("GET", "https://api.sportmonks.com/v3/football/fixtures/19427734?include=events;statistics", 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": 19427734,
"league_id": 8,
"season_id": 25583,
"name": "Manchester City vs Arsenal",
"starting_at": "2026-04-19 15:30:00",
"result_info": "Manchester City won after full-time.",
"participants": [
{ "id": 9, "name": "Manchester City",
"meta": { "location": "home" } },
{ "id": 19, "name": "Arsenal",
"meta": { "location": "away" } }
],
"events": [
{ "minute": 16, "type_id": 14, "participant_id": 9,
"player_name": "Rayan Cherki",
"related_player_name": "Matheus Nunes",
"result": "1-0" },
{ "minute": 18, "type_id": 14, "participant_id": 19,
"player_name": "Kai Havertz",
"result": "1-1" },
{ "minute": 65, "type_id": 14, "participant_id": 9,
"player_name": "Erling Haaland",
"result": "2-1" }
// full-time: Manchester City 2-1 Arsenal
],
"statistics": [
{ "type_id": 45, "location": "home", "data": { "value": 59 } },
{ "type_id": 45, "location": "away", "data": { "value": 41 } },
{ "type_id": 42, "location": "home", "data": { "value": 15 } },
{ "type_id": 42, "location": "away", "data": { "value": 9 } },
{ "type_id": 80, "location": "home", "data": { "value": 498 } },
{ "type_id": 80, "location": "away", "data": { "value": 348 } },
{ "type_id": 34, "location": "home", "data": { "value": 8 } },
{ "type_id": 34, "location": "away", "data": { "value": 5 } }
// possession 45, shots total 42, passes 80, corners 34
]
}
}
Same shape in the Premier League, a continental final and a second division you have never heard of, so one match template covers all of them. 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.
"Automated sports media at scale."
ScorePlay powers sports media management on real-time Sportmonks data, replacing player and schedule data that was previously entered by hand for every club. "We chose Sportmonks because of the accuracy of their API, its ease of use, and their outstanding customer service." Accuracy is the point: automated content is only worth shipping when it is correct without an editor checking it.
Xavier GreenScorePlay
"Side project to sustainable football platform."
FootiFootball media platform
"Sweden's most complete football site."
FotbollSwedish football media
Start on the free tier, move up when your traffic does. Every plan includes the fixtures endpoint, human support and a 14-day trial of the paid features. Match Facts and AI Overviews are add-ons.
Starter
For a first build
EUR29/mo
Billed monthly
Growth
Most media builds start here
EUR99/mo
Billed monthly
Pro
Multi-league publishers
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.
One call to the fixtures endpoint returns a single match with whichever includes you name, so you assemble a match page from one response rather than stitching several calls together.
Add include=events for goals and cards, include=lineups for the elevens and include=statistics for the team numbers. Every entity is listed in the docs.
Match Facts are pre-calculated insights, trends, streaks, head-to-head records and player storylines, that explain a match rather than just record it. They arrive on the same fixtures endpoint you already call.
Match Facts is a paid add-on, listed on the plans and pricing page. The core fixture, event and statistic data is available on every plan including the free tier.
Yes. AI Overviews build a ready-to-display match summary from the underlying Match Facts, so a preview or recap arrives as a written sentence rather than as numbers your editors assemble by hand.
Add include=AIOverviews to your fixtures call once the add-on is on your plan. The field definitions live in the docs.
That is the point of a uniform response. The same field names and the same include syntax come back whether the fixture is a Premier League match or a second-division one, so a template written once keeps working.
What varies is depth inside a fixture, not its shape: a lower-tier competition may return fewer statistic types. Check a competition on the coverage page before you build a page around it.
Sportmonks has served sports data for 10 years, and historical fixtures, events and statistics sit on the same endpoints and the same response shape as the live ones, so a retrospective piece reuses your match template.
Depth varies by competition and season, and the coverage page shows what history is available where.
Yes. The football widgets run on this same data and drop into a page with an embed, which is often the faster route when the match view is one part of a bigger site.
You can start with a widget and move to the raw API later without changing data provider.
A media product displays data to the public, so redistribution is a licensing question rather than a technical one. What you may display, cache and syndicate depends on your plan and use case.
See what each plan includes on the plans and pricing page, and ask support for the redistribution terms that apply to your product, in writing, before you build a public page on the feed.
A token takes a couple of minutes and needs no card. Call a fixture with its events and statistics, look at what comes back, and judge the feed 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?