Sportmonks Match Facts transforms historical and live match data into pre-calculated insights your app can surface instantly.
No analytics pipeline. No statistical models to maintain. Just football match facts: ready to build with from day one.
Scores and statistics are table stakes. What fans actually want is context: football match facts that explain trends, highlight players, and reveal the patterns behind what’s happening on the pitch. Sportmonks gives your application that layer, without you having to build it yourself.
Match Facts are calculated directly from the underlying Sportmonks datasets and served through the same production-grade infrastructure that powers our sports data worldwide. Every insight is validated automatically — for example, window variations are only generated when sufficient match history exists, so you never surface a misleading statistic. Ship confidently knowing the context your application shows is accurate every time.
Building contextual football match facts from raw data is expensive. You’d need to retrieve large historical datasets, write filtering logic, calculate trends, and maintain all of it across leagues, teams, and time windows. Sportmonks Match Facts handles all of that for you. Pre-calculated, structured, and ready to use — so you can build features in an afternoon that would otherwise take weeks of engineering work.
Match Facts arrive through the same fixtures endpoint you’re already calling. Add the matchfacts include and your response is enriched with structured insights and optional natural language sentences you can display directly in your app. No new authentication, no new schema, no new infrastructure to learn. If you’re already building with Sportmonks, you’re one parameter away.
Football match facts are organised into categories based on the type of insight they provide. Each one is pre-calculated, window-aware, and available as structured data or a natural-language sentence, ready to display directly in your app.
Scoring patterns, attacking activity, discipline trends, and match dynamics. Calculated from historical data and ready to power previews, dashboards, and automated commentary without any dataset wrangling on your side.
Insights that surface the player narratives fans already care about. Top scoring threats, standout performers, notable absences. The storylines that make a match preview feel like it was written by someone who actually watched the game.
How strict is today’s referee compared to league average? Match Facts calculate discipline tendencies and officiating patterns automatically — useful for match analysis, prediction features, and any product where game flow context matters.
Long-term rivalries, tactical matchups, historical records between managers. Match Facts capture these relationships automatically, so your application can add narrative context to any fixture without you maintaining a separate historical lookup.
How does a team perform relative to league average? How does their home record compare to away? These comparative insights are especially useful for AI-generated previews, where relative performance turns raw numbers into something a user actually understands.
Scheduling, recent match history, previous outcomes between the two sides. Context that explains the situation around a fixture. Not just what the teams have done, but what they’re walking into.
Winning runs, scoring streaks, clean sheet sequences, disciplinary trends. Streaks translate complex match histories into the kind of simple, immediate narratives that users share. “Manchester United has won 6 of their last 7.” That’s a Match Fact.
Every Match Fact can also be returned as a ready-to-display sentence. No formatting logic needed on your side — just output the string. Combine structured data with natural language and you go from API response to editorial-quality content in a single call.
{
"data": {
"id": 19427187,
"sport_id": 1,
"league_id": 8,
"season_id": 25583,
"stage_id": 77476879,
"group_id": null,
"aggregate_id": null,
"round_id": 372148,
"state_id": 5,
"venue_id": 480,
"name": "Brighton & Hove Albion vs Liverpool",
"starting_at": "2026-03-21 12:45:00",
"result_info": "Brighton & Hove Albion won after full-time.",
"leg": "1/1",
"details": null,
"length": 90,
"placeholder": false,
"has_odds": true,
"has_premium_odds": true,
"starting_at_timestamp": 1774097100,
"matchfacts": [
{
"id": 28460438,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87913,
"participant": "away",
"basis": "team",
"data": {
"count": 3,
"percentage": 60
},
"natural_language": null,
"category": "statistics",
"scope": "all_matches"
},
{
"id": 28460446,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87913,
"participant": "away",
"basis": "team",
"data": {
"count": 3,
"percentage": 60
},
"natural_language": "In Liverpool's last 5 Premier League matches both teams scored in 3 of those matches.",
"category": "statistics",
"scope": "league_matches"
},
{
"id": 28083940,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87913,
"participant": "both",
"basis": "h2h",
"data": {
"count": 3,
"percentage": 60
},
"natural_language": "In the last 5 H2H matches, both teams scored 3 times, which is 60.0%",
"category": "statistics",
"scope": "allFixtures"
},
//and much more!
{
"data": {
"id": 19427187,
"sport_id": 1,
"league_id": 8,
"season_id": 25583,
"stage_id": 77476879,
"group_id": null,
"aggregate_id": null,
"round_id": 372148,
"state_id": 5,
"venue_id": 480,
"name": "Brighton & Hove Albion vs Liverpool",
"starting_at": "2026-03-21 12:45:00",
"result_info": "Brighton & Hove Albion won after full-time.",
"leg": "1/1",
"details": null,
"length": 90,
"placeholder": false,
"has_odds": true,
"has_premium_odds": true,
"starting_at_timestamp": 1774097100,
"matchfacts": [
{
"id": 28083795,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "h2h",
"data": {
"all": {
"count": 17,
"average": 1.7
},
"home": {
"count": 5,
"average": 1
},
"away": {
"count": 12,
"average": 2.4
}
},
"natural_language": "Liverpool has conceded 17 goals in their last 10 matches against Brighton & Hove Albion",
"category": "statistics",
"scope": "allFixtures"
},
{
"id": 28459565,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "h2h",
"data": {
"all": {
"count": 17,
"average": 1.7
},
"home": {
"count": 5,
"average": 1
},
"away": {
"count": 12,
"average": 2.4
}
},
"natural_language": null,
"category": "statistics",
"scope": "all_matches"
},
{
"id": 28459579,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "h2h",
"data": {
"all": {
"count": 16,
"average": 1.6
},
"home": {
"count": 8,
"average": 1.33
},
"away": {
"count": 8,
"average": 2
}
},
"natural_language": null,
"category": "statistics",
"scope": "league_matches"
},
{
"id": 28083797,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "overall",
"data": {
"all": {
"count": 10,
"average": 1
},
"home": {
"count": 6,
"average": 1.2
},
"away": {
"count": 4,
"average": 0.8
}
},
"natural_language": "Liverpool has conceded 10 goals in their last 10 matches",
"category": "statistics",
"scope": "allFixtures"
},
{
"id": 28459573,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "team",
"data": {
"all": {
"count": 9,
"average": 0.9
},
"home": {
"count": 5,
"average": 1
},
"away": {
"count": 4,
"average": 0.8
}
},
"natural_language": null,
"category": "statistics",
"scope": "all_matches"
},
{
"id": 28459587,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "team",
"data": {
"all": {
"count": 12,
"average": 1.2
},
"home": {
"count": 7,
"average": 1.4
},
"away": {
"count": 5,
"average": 1
}
},
"natural_language": null,
"category": "statistics",
"scope": "league_matches"
},
{
"id": 28083799,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "home",
"basis": "h2h",
"data": {
"all": {
"count": 20,
"average": 2
},
"home": {
"count": 8,
"average": 1.6
},
"away": {
"count": 12,
"average": 2.4
}
},
"natural_language": "Brighton & Hove Albion has conceded 20 goals in their last 10 matches against Liverpool",
"category": "statistics",
"scope": "allFixtures"
},
//and much more!
{
"data": {
"id": 19427187,
"sport_id": 1,
"league_id": 8,
"season_id": 25583,
"stage_id": 77476879,
"group_id": null,
"aggregate_id": null,
"round_id": 372148,
"state_id": 5,
"venue_id": 480,
"name": "Brighton & Hove Albion vs Liverpool",
"starting_at": "2026-03-21 12:45:00",
"result_info": "Brighton & Hove Albion won after full-time.",
"leg": "1/1",
"details": null,
"length": 90,
"placeholder": false,
"has_odds": true,
"has_premium_odds": true,
"starting_at_timestamp": 1774097100,
"matchfacts": [
{
"id": 28083907,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87903,
"participant": "away",
"basis": "h2h",
"data": {
"all": {
"count": 49,
"average": 2.23
},
"home": {
"count": 27,
"average": 2.45
},
"away": {
"count": 22,
"average": 2
}
},
"natural_language": "Liverpool has scored 49 goals in their last 25 matches against Brighton & Hove Albion",
"category": "statistics",
"scope": "allFixtures"
},
{
"id": 28460242,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87903,
"participant": "away",
"basis": "team",
"data": {
"all": {
"count": 53,
"average": 2.12
},
"home": {
"count": 34,
"average": 2.62
},
"away": {
"count": 19,
"average": 1.58
}
},
"natural_language": null,
"category": "statistics",
"scope": "all_matches"
},
{
"id": 28460249,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87903,
"participant": "away",
"basis": "team",
"data": {
"all": {
"count": 38,
"average": 1.52
},
"home": {
"count": 20,
"average": 1.67
},
"away": {
"count": 18,
"average": 1.38
}
},
"natural_language": null,
"category": "statistics",
"scope": "league_matches"
},
{
"id": 28083909,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87903,
"participant": "home",
"basis": "h2h",
"data": {
"all": {
"count": 26,
"average": 1.18
},
"home": {
"count": 16,
"average": 1.45
},
"away": {
"count": 10,
"average": 0.91
}
},
"natural_language": "Brighton & Hove Albion has scored 26 goals in their last 25 matches against Liverpool",
"category": "statistics",
"scope": "allFixtures"
},
//and much more!
{
"data": {
"id": 19427187,
"sport_id": 1,
"league_id": 8,
"season_id": 25583,
"stage_id": 77476879,
"group_id": null,
"aggregate_id": null,
"round_id": 372148,
"state_id": 5,
"venue_id": 480,
"name": "Brighton & Hove Albion vs Liverpool",
"starting_at": "2026-03-21 12:45:00",
"result_info": "Brighton & Hove Albion won after full-time.",
"leg": "1/1",
"details": null,
"length": 90,
"placeholder": false,
"has_odds": true,
"has_premium_odds": true,
"starting_at_timestamp": 1774097100,
"matchfacts": [
{
"id": 28083619,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 76101,
"participant": "away",
"basis": "h2h",
"data": {
"value": 1.03,
"related_player": {
"player_id": 37288979,
"display_name": "Hugo Ekitiké"
}
},
"natural_language": "In matches against Brighton & Hove Albion, Liverpool's player with the highest xGOT is Hugo Ekitiké with an average of 1.03",
"category": "statistics",
"scope": "allFixtures"
},
{
"id": 28458646,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 76101,
"participant": "away",
"basis": "h2h",
"data": {
"value": 1.03,
"related_player": {
"player_id": 37288979,
"display_name": "Hugo Ekitiké",
"sidelined": false
}
},
"natural_language": null,
"category": "statistics",
"scope": "all_matches"
},
{
"id": 28458630,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 76101,
"participant": "away",
"basis": "h2h",
"data": {
"value": 1.03,
"related_player": {
"player_id": 37288979,
"display_name": "Hugo Ekitiké",
"sidelined": false
}
},
"natural_language": "Hugo Ekitiké has the highest average xGOT for Liverpool in their Premier League matches against Brighton & Hove Albion, with an average xGOT of 1.03.",
"category": "players",
"scope": "league_matches"
},
{
"id": 28083621,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 76101,
"participant": "away",
"basis": "overall",
"data": {
"value": 0.59,
"related_player": {
"player_id": 4125,
"display_name": "Mohamed Salah"
}
},
"natural_language": "In Liverpool's latest matches, their player with the highest xGOT is Mohamed Salah with an average of 0.59",
"category": "statistics",
"scope": "allFixtures"
},
{
"id": 28458656,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 76101,
"participant": "away",
"basis": "overall",
"data": {
"value": 0.59,
"related_player": {
"player_id": 4125,
"display_name": "Mohamed Salah"
}
},
"natural_language": "In Liverpool's latest matches, their player with the highest xGOT is Mohamed Salah with an average of 0.59",
"category": "statistics",
"scope": "all_matches"
},
//and much more!
Football statistics are heavily shaped by recency. A team’s full-season record tells a different story than their last five matches. Match Facts support window variations, so the same insight can be calculated across multiple timeframes, and your application can choose what’s most relevant.
Window variations are generated automatically and only when sufficient match history exists. If a team has played fewer matches than the window requires, that variation simply isn’t returned, preventing misleading football match facts without any validation logic on your side. You retrieve the fact. Sportmonks handles the rest.
https://api.sportmonks.com/v3/football/fixtures/19427187?api_token=YOURTOKEN&include=AIOverviews
{
"data": {
"id": 19427187,
"sport_id": 1,
"league_id": 8,
"season_id": 25583,
"stage_id": 77476879,
"group_id": null,
"aggregate_id": null,
"round_id": 372148,
"state_id": 5,
"venue_id": 480,
"name": "Brighton & Hove Albion vs Liverpool",
"starting_at": "2026-03-21 12:45:00",
"result_info": "Brighton & Hove Albion won after full-time.",
"leg": "1/1",
"details": null,
"length": 90,
"placeholder": false,
"has_odds": true,
"has_premium_odds": true,
"starting_at_timestamp": 1774097100,
"matchfacts": [
{
"id": 28083795,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "h2h",
"data": {
"all": {
"count": 17,
"average": 1.7
},
"home": {
"count": 5,
"average": 1
},
"away": {
"count": 12,
"average": 2.4
}
},
"natural_language": "Liverpool has conceded 17 goals in their last 10 matches against Brighton & Hove Albion",
"category": "statistics",
"scope": "allFixtures"
},
{
"id": 28459565,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "h2h",
"data": {
"all": {
"count": 17,
"average": 1.7
},
"home": {
"count": 5,
"average": 1
},
"away": {
"count": 12,
"average": 2.4
}
},
"natural_language": null,
"category": "statistics",
"scope": "all_matches"
},
{
"id": 28459579,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "h2h",
"data": {
"all": {
"count": 16,
"average": 1.6
},
"home": {
"count": 8,
"average": 1.33
},
"away": {
"count": 8,
"average": 2
}
},
"natural_language": null,
"category": "statistics",
"scope": "league_matches"
},
{
"id": 28083797,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "overall",
"data": {
"all": {
"count": 10,
"average": 1
},
"home": {
"count": 6,
"average": 1.2
},
"away": {
"count": 4,
"average": 0.8
}
},
"natural_language": "Liverpool has conceded 10 goals in their last 10 matches",
"category": "statistics",
"scope": "allFixtures"
},
{
"id": 28459573,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "team",
"data": {
"all": {
"count": 9,
"average": 0.9
},
"home": {
"count": 5,
"average": 1
},
"away": {
"count": 4,
"average": 0.8
}
},
"natural_language": null,
"category": "statistics",
"scope": "all_matches"
},
{
"id": 28459587,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "away",
"basis": "team",
"data": {
"all": {
"count": 12,
"average": 1.2
},
"home": {
"count": 7,
"average": 1.4
},
"away": {
"count": 5,
"average": 1
}
},
"natural_language": null,
"category": "statistics",
"scope": "league_matches"
},
{
"id": 28083799,
"sport_id": 1,
"fixture_id": 19427187,
"type_id": 87878,
"participant": "home",
"basis": "h2h",
"data": {
"all": {
"count": 20,
"average": 2
},
"home": {
"count": 8,
"average": 1.6
},
"away": {
"count": 12,
"average": 2.4
}
},
"natural_language": "Brighton & Hove Albion has conceded 20 goals in their last 10 matches against Liverpool",
"category": "statistics",
"scope": "allFixtures"
},
//and much more!
Match Facts already returns structured insights and natural language sentences. AI Overviews take it one step further, generating a complete, ready-to-display match summary built directly from the underlying Match Facts data.
Just add AIOverviews to your fixtures call and your response includes a fully written match preview for your application.
Football match facts on every plan. No enterprise contract needed to access professional-grade insights. Start free and upgrade as your application grows.
Best for: side projects and early builds
This plan is best suited: Startups and growing applications
For production apps at scale
The ultimate solution for the real pros, contact us for a tailored offer
Sign up, get your token instantly, and pull pre-calculated football match facts without building a single analytics pipeline. Start free, no credit card required. No sales call needed. Whether you’re shipping a fan engagement widget, an automated preview engine, or a full betting insights product, Sportmonks Match Facts gets you there faster.
Try for free
matchfacts as an include parameter and your response is enriched with the full insights payload. Same authentication, same data format, no new infrastructure.matchfacts include on your current fixtures calls.