OpenLigaDB
App · Sports · 16 actions
Pull German football results and fixtures into a workflow from OpenLigaDB, the open sports database behind the Bundesliga, its second and third tiers, the DFB-Pokal, the women's Bundesliga, national-team tournaments and hundreds of other competitions, ice hockey and handball among them. Read a matchday's scores goal by goal, a league's table, its scoring charts, one team's fixtures across every competition it plays in, or the record between two clubs. Check the next kick-off for a reminder, or watch a matchday for changes so a workflow only runs when something has actually happened. No account or API key required.
Actions
| Action | What it does |
|---|---|
| Get a match | Get one match by its id, with its goals minute by minute, the score at each stage it was recorded at, the venue and the attendance. |
| Get group tables | Get the standings of a tournament that plays in groups, one table per group, as at a World Cup or a European Championship. |
| Get head to head | Get every match two teams have played against each other, with the record worked out: how many each has won, how many were drawn, and the goals either way. |
| Get the current matchday | Find which round a league is on right now. |
| Get the last change date | Find when a matchday's data last changed. |
| Get the last match | Get the most recently played match in a league, or the last one a single team played. |
| Get the league table | Get a league's table for a season: every team with its points, its played, won, drawn and lost, its goals either way and its goal difference, in the order OpenLigaDB ranks them. |
| Get the next match | Get the next match still to be played in a league, or the next one for a single team. |
| List a team's matches | Get one club's matches around today across every competition OpenLigaDB holds, so a cup tie, a friendly and a league fixture come back together. |
| List leagues | Find a competition and the shortcut that addresses it. |
| List matchdays | List the rounds a league's season is played over, each with its number and its name. |
| List matches | Get the fixtures and results of a league's season, each with its kick-off, its score at half-time and full time, and every goal that was scored. |
| List result types | List the stages a score can be recorded at. |
| List sports | List the sports OpenLigaDB holds leagues for: football first and foremost, but also ice hockey, handball, basketball and several more. |
| List teams | List the teams in a league's season, with the crest and the team id that the head-to-head and team fixture actions take. |
| List top scorers | Get a league season's scoring charts, most goals first, each player with their goal count and their id. |
Get a match
Get one match by its id, with its goals minute by minute, the score at each stage it was recorded at, the venue and the attendance. Match ids come back from List matches and from the next and last match actions, so this is the step that follows one of those. No API key required.
Inputs
- Match id
match_idnumberRequired - OpenLigaDB's id for the match, as returned by List matches, Get the next match or Get the last match.At least 1.
Outputs
matchobject- One match, with its score, its stage scores and its goals.
Example output
{
"match": {
"goal_count": 5,
"goals": [
{
"comment": null,
"goal_id": 116409,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 12,
"score_team1": 0,
"score_team2": 1,
"scorer_id": 14289,
"scorer_name": "Granit Xhaka",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116410,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 38,
"score_team1": 0,
"score_team2": 2,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116412,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 59,
"score_team1": 1,
"score_team2": 2,
"scorer_id": 18490,
"scorer_name": "N. Elvedi",
"scoring_team_id": 87
},
{
"comment": null,
"goal_id": 116413,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 85,
"score_team1": 2,
"score_team2": 2,
"scorer_id": 18551,
"scorer_name": "T. Kleindienst",
"scoring_team_id": 87
},
{
"comment": "+11",
"goal_id": 116414,
"is_overtime": true,
"is_own_goal": false,
"is_penalty": true,
"minute": 90,
"score_team1": 2,
"score_team2": 3,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
}
],
"goals_team1": 2,
"goals_team2": 3,
"group_id": 45117,
"half_time_team1": 0,
"half_time_team2": 2,
"is_finished": true,
"kickoff_local": "2024-08-23T20:30:00",
"kickoff_utc": "2024-08-23T18:30:00Z",
"last_update": "2024-08-24T11:29:10.647",
"league_id": 4741,
"league_name": "1. Fu\u00dfball-Bundesliga 2024/2025",
"league_season": "2024",
"league_shortcut": "bl1",
"location_city": "M\u00f6nchengladbach",
"location_id": 32,
"location_stadium": "Borussia Park",
"match_id": 72214,
"matchday": 1,
"matchday_label": "Matchday 1",
"matchday_name": "1. Spieltag",
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"number_of_viewers": null,
"results": [
{
"description": "Ergebnis nach Ende der ersten Halbzeit",
"kind": "HalfTime",
"label": "Half-time",
"name": "Halbzeitergebnis",
"order": 1,
"points_team1": 0,
"points_team2": 2,
"result_id": 111413,
"result_type_id": 1
},
{
"description": "Ergebnis nach Ende der offiziellen Spielzeit",
"kind": "After90Minutes",
"label": "Full-time",
"name": "Endergebnis",
"order": 2,
"points_team1": 2,
"points_team2": 3,
"result_id": 111414,
"result_type_id": 2
}
],
"score": "2:3",
"score_source": "result",
"status": "finished",
"team1_icon_url": "https://i.imgur.com/KSIk0Eu.png",
"team1_id": 87,
"team1_name": "Borussia M\u00f6nchengladbach",
"team1_short_name": "Gladbach",
"team2_icon_url": "https://www.bundesliga-reisefuehrer.de/sites/default/files/B04_Standard_Logo_RGB.png",
"team2_id": 6,
"team2_name": "Bayer 04 Leverkusen",
"team2_short_name": "Leverkusen",
"time_zone_id": "W. Europe Standard Time",
"winner": "team2",
"winner_name": "Bayer 04 Leverkusen",
"winner_team_id": 6
}
}Get group tables
Get the standings of a tournament that plays in groups, one table per group, as at a World Cup or a European Championship. Only a competition with a group stage has these; a league that plays one table answers with a message pointing at Get the league table. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
Outputs
countnumber- How many rows are in this page.
groupslist- The groups, each with its own table.
leaguetext- The league shortcut the answer is about.
seasontext- The season the answer is about.
team_countnumber- How many teams there are across every group.
Example output
{
"count": 9,
"groups": [
{
"count": 2,
"group_id": 209,
"name": "Gruppe A",
"table": [
{
"drawn": 0,
"goal_difference": 2,
"goals_against": 0,
"goals_for": 2,
"icon_url": "http://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/Flag_of_Ecuador.svg/20px-Flag_of_Ecuador.svg.png",
"lost": 0,
"name": "Ecuador",
"played": 1,
"points": 3,
"position": 1,
"short_name": "ECU",
"team_id": 2670,
"won": 1
},
{
"drawn": 0,
"goal_difference": -2,
"goals_against": 2,
"goals_for": 0,
"icon_url": "https://upload.wikimedia.org/wikipedia/commons/6/65/Flag_of_Qatar.svg",
"lost": 1,
"name": "Katar",
"played": 1,
"points": 0,
"position": 2,
"short_name": "QAT",
"team_id": 4912,
"won": 0
}
]
}
],
"league": "WM2022",
"season": "2022",
"team_count": 32
}Get head to head
Get every match two teams have played against each other, with the record worked out: how many each has won, how many were drawn, and the goals either way. OpenLigaDB answers with their whole shared history across every competition it holds, and fixtures still to come are included alongside. No API key required.
Inputs
- League
leaguetextRequired - The league to pick the two teams from. It only fills the team lists: the answer covers every competition the two have met in.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
- First team
team_1textRequired - One of the two teams. The record is reported from this team's point of view.
- Second team
team_2textRequired - The other team. It must be a different one.
- Match status
statuslist - Optional. Keep only matches in these states. A match counts as in progress once its kick-off has passed and OpenLigaDB has not yet marked it finished. Choose none to keep them all.One or more of:
finished,live(In progress),upcoming(Not started). - Newest first
newest_firsttrue/false - Optional. Return the latest kick-off first instead of the earliest. Off by default, which is fixture-list order.Default:
false. - Number of rows
limitnumber - Optional. How many rows to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - Optional. How many rows to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default:
0.
Outputs
countnumber- How many rows are in this page.
drawsnumber- How many were drawn.
has_moretrue/false- True when more rows matched than this page holds.
leaguetext- The league the teams were picked from, which does not limit the meetings returned.
matcheslist- The matches in this page.
next_offsetnumber- The offset that fetches the next page. Null when this is the last one.
playednumber- How many of their meetings have been played. The record below counts only these.
seasontext- The season the answer is about.
team_1_goalsnumber- Goals the first team has scored in them.
team_1_idnumber- The first team's id.
team_1_winsnumber- How many the first team won.
team_2_goalsnumber- Goals the second team has scored in them.
team_2_idnumber- The second team's id.
team_2_winsnumber- How many the second team won.
total_countnumber- How many rows matched in total, across every page.
Example output
{
"count": 1,
"draws": 19,
"has_more": true,
"league": "bl1",
"matches": [
{
"goal_count": 5,
"goals": [
{
"comment": null,
"goal_id": 116409,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 12,
"score_team1": 0,
"score_team2": 1,
"scorer_id": 14289,
"scorer_name": "Granit Xhaka",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116410,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 38,
"score_team1": 0,
"score_team2": 2,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116412,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 59,
"score_team1": 1,
"score_team2": 2,
"scorer_id": 18490,
"scorer_name": "N. Elvedi",
"scoring_team_id": 87
},
{
"comment": null,
"goal_id": 116413,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 85,
"score_team1": 2,
"score_team2": 2,
"scorer_id": 18551,
"scorer_name": "T. Kleindienst",
"scoring_team_id": 87
},
{
"comment": "+11",
"goal_id": 116414,
"is_overtime": true,
"is_own_goal": false,
"is_penalty": true,
"minute": 90,
"score_team1": 2,
"score_team2": 3,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
}
],
"goals_team1": 2,
"goals_team2": 3,
"group_id": 45117,
"half_time_team1": 0,
"half_time_team2": 2,
"is_finished": true,
"kickoff_local": "2024-08-23T20:30:00",
"kickoff_utc": "2024-08-23T18:30:00Z",
"last_update": "2024-08-24T11:29:10.647",
"league_id": 4741,
"league_name": "1. Fu\u00dfball-Bundesliga 2024/2025",
"league_season": "2024",
"league_shortcut": "bl1",
"location_city": "M\u00f6nchengladbach",
"location_id": 32,
"location_stadium": "Borussia Park",
"match_id": 72214,
"matchday": 1,
"matchday_label": "Matchday 1",
"matchday_name": "1. Spieltag",
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"number_of_viewers": null,
"results": [
{
"description": "Ergebnis nach Ende der ersten Halbzeit",
"kind": "HalfTime",
"label": "Half-time",
"name": "Halbzeitergebnis",
"order": 1,
"points_team1": 0,
"points_team2": 2,
"result_id": 111413,
"result_type_id": 1
},
{
"description": "Ergebnis nach Ende der offiziellen Spielzeit",
"kind": "After90Minutes",
"label": "Full-time",
"name": "Endergebnis",
"order": 2,
"points_team1": 2,
"points_team2": 3,
"result_id": 111414,
"result_type_id": 2
}
],
"score": "2:3",
"score_source": "result",
"status": "finished",
"team1_icon_url": "https://i.imgur.com/KSIk0Eu.png",
"team1_id": 87,
"team1_name": "Borussia M\u00f6nchengladbach",
"team1_short_name": "Gladbach",
"team2_icon_url": "https://www.bundesliga-reisefuehrer.de/sites/default/files/B04_Standard_Logo_RGB.png",
"team2_id": 6,
"team2_name": "Bayer 04 Leverkusen",
"team2_short_name": "Leverkusen",
"time_zone_id": "W. Europe Standard Time",
"winner": "team2",
"winner_name": "Bayer 04 Leverkusen",
"winner_team_id": 6
}
],
"next_offset": 1,
"played": 58,
"season": "2024",
"team_1_goals": 45,
"team_1_id": 87,
"team_1_wins": 12,
"team_2_goals": 88,
"team_2_id": 6,
"team_2_wins": 27,
"total_count": 67
}Get the current matchday
Find which round a league is on right now. This is the one action that needs no season: OpenLigaDB works out which season is running and which round of it is next, which is what a weekly digest needs before it can ask for the fixtures. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
Outputs
foundtrue/false- True when the league is between or during matchdays. False when it is not running at all, which is a normal answer out of season.
group_idnumber- OpenLigaDB's id for the round.
labeltext- The same round in English, e.g. Matchday 1.
leaguetext- The league shortcut the answer is about.
matchdaynumber- The round number, counting from 1.
nametext- The round's name in German, e.g. 1. Spieltag.
Example output
{
"found": true,
"group_id": 50633,
"label": "Matchday 1",
"league": "bl1",
"matchday": 1,
"name": "1. Spieltag"
}Get the last change date
Find when a matchday's data last changed. This is the cheap check to run on a schedule: compare the answer with the one from the previous run and only fetch the matches when it has moved, rather than pulling a whole matchday every few minutes. Leave the matchday blank to watch whichever round the league is currently on. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
- Matchday
matchdaytext - Optional. One round of the season, called a Spieltag in the German leagues. Leave blank for the whole season.
- Changed since
sincedate and time - Optional. A moment to compare against, usually the last change date the previous run reported. The answer then says outright whether anything has changed. A time with no zone is read as UTC.
Outputs
has_changedtrue/false- True when the change is newer than the moment given. Null when no moment was given, so branch on it only when you passed one.
last_changetext- When the matchday last changed, exactly as OpenLigaDB reports it: its own clock, with no time zone attached. Store this and pass it back as Changed since next run.
last_change_utctext- The same moment read as UTC and formatted consistently, e.g. 2025-08-24T19:25:06Z.
leaguetext- The league shortcut the answer is about.
matchdaynumber- The matchday that was checked.
matchday_urltext- The page on openligadb.de showing that round.
seasontext- The season the answer is about.
used_current_matchdaytrue/false- True when no matchday was given and the league's current one was used.
Example output
{
"has_changed": true,
"last_change": "2024-08-27T17:07:06.143",
"last_change_utc": "2024-08-27T17:07:06Z",
"league": "bl1",
"matchday": 1,
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"season": "2024",
"used_current_matchday": false
}Get the last match
Get the most recently played match in a league, or the last one a single team played. With no team this is the league's last kick-off and no season is needed. Pair it with the table for a results round-up. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontext - Optional. Which season of that league, named for the year it starts in: 2025 is the 2025/2026 season. Leave blank for the most recent season the league has.
- Team
teamtext - Optional. One of the teams in the league and season chosen above. Leave blank to cover every team.
Outputs
foundtrue/false- True when there was a match to report. False is a normal answer: a league whose season has not started has no last match, and one that has ended has no next match. Branch on this before reading the match.
leaguetext- The league shortcut the answer is about.
matchobject- One match, with its score, its stage scores and its goals.
teamnumber- The team that was asked about. Null when the league's last match was asked for.
Example output
{
"found": true,
"league": "bl1",
"match": {
"goal_count": 5,
"goals": [
{
"comment": null,
"goal_id": 116409,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 12,
"score_team1": 0,
"score_team2": 1,
"scorer_id": 14289,
"scorer_name": "Granit Xhaka",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116410,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 38,
"score_team1": 0,
"score_team2": 2,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116412,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 59,
"score_team1": 1,
"score_team2": 2,
"scorer_id": 18490,
"scorer_name": "N. Elvedi",
"scoring_team_id": 87
},
{
"comment": null,
"goal_id": 116413,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 85,
"score_team1": 2,
"score_team2": 2,
"scorer_id": 18551,
"scorer_name": "T. Kleindienst",
"scoring_team_id": 87
},
{
"comment": "+11",
"goal_id": 116414,
"is_overtime": true,
"is_own_goal": false,
"is_penalty": true,
"minute": 90,
"score_team1": 2,
"score_team2": 3,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
}
],
"goals_team1": 2,
"goals_team2": 3,
"group_id": 45117,
"half_time_team1": 0,
"half_time_team2": 2,
"is_finished": true,
"kickoff_local": "2024-08-23T20:30:00",
"kickoff_utc": "2024-08-23T18:30:00Z",
"last_update": "2024-08-24T11:29:10.647",
"league_id": 4741,
"league_name": "1. Fu\u00dfball-Bundesliga 2024/2025",
"league_season": "2024",
"league_shortcut": "bl1",
"location_city": "M\u00f6nchengladbach",
"location_id": 32,
"location_stadium": "Borussia Park",
"match_id": 72214,
"matchday": 1,
"matchday_label": "Matchday 1",
"matchday_name": "1. Spieltag",
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"number_of_viewers": null,
"results": [
{
"description": "Ergebnis nach Ende der ersten Halbzeit",
"kind": "HalfTime",
"label": "Half-time",
"name": "Halbzeitergebnis",
"order": 1,
"points_team1": 0,
"points_team2": 2,
"result_id": 111413,
"result_type_id": 1
},
{
"description": "Ergebnis nach Ende der offiziellen Spielzeit",
"kind": "After90Minutes",
"label": "Full-time",
"name": "Endergebnis",
"order": 2,
"points_team1": 2,
"points_team2": 3,
"result_id": 111414,
"result_type_id": 2
}
],
"score": "2:3",
"score_source": "result",
"status": "finished",
"team1_icon_url": "https://i.imgur.com/KSIk0Eu.png",
"team1_id": 87,
"team1_name": "Borussia M\u00f6nchengladbach",
"team1_short_name": "Gladbach",
"team2_icon_url": "https://www.bundesliga-reisefuehrer.de/sites/default/files/B04_Standard_Logo_RGB.png",
"team2_id": 6,
"team2_name": "Bayer 04 Leverkusen",
"team2_short_name": "Leverkusen",
"time_zone_id": "W. Europe Standard Time",
"winner": "team2",
"winner_name": "Bayer 04 Leverkusen",
"winner_team_id": 6
},
"team": 40
}Get the league table
Get a league's table for a season: every team with its points, its played, won, drawn and lost, its goals either way and its goal difference, in the order OpenLigaDB ranks them. For a tournament that plays in groups, use Get group tables instead. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
Outputs
countnumber- How many rows are in this page.
leadertext- The team at the top of the table.
leader_pointsnumber- How many points that team has.
leaguetext- The league shortcut the answer is about.
matches_playednumber- The most matches any team has played, which is how far into the season the table is.
seasontext- The season the answer is about.
tablelist- The table, best placed team first.
Example output
{
"count": 18,
"leader": "FC Bayern M\u00fcnchen",
"leader_points": 82,
"league": "bl1",
"matches_played": 34,
"season": "2024",
"table": [
{
"drawn": 7,
"goal_difference": 67,
"goals_against": 32,
"goals_for": 99,
"icon_url": "https://upload.wikimedia.org/wikipedia/commons/1/1f/Logo_FC_Bayern_M%C3%BCnchen_%282002%E2%80%932017%29.svg",
"lost": 2,
"name": "FC Bayern M\u00fcnchen",
"played": 34,
"points": 82,
"position": 1,
"short_name": "Bayern",
"team_id": 40,
"won": 25
},
{
"drawn": 12,
"goal_difference": 29,
"goals_against": 43,
"goals_for": 72,
"icon_url": "https://www.bundesliga-reisefuehrer.de/sites/default/files/B04_Standard_Logo_RGB.png",
"lost": 3,
"name": "Bayer 04 Leverkusen",
"played": 34,
"points": 69,
"position": 2,
"short_name": "Leverkusen",
"team_id": 6,
"won": 19
}
]
}Get the next match
Get the next match still to be played in a league, or the next one for a single team. With no team this is the league's next kick-off whoever is playing, and no season is needed. This is the action a reminder workflow runs on a schedule. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontext - Optional. Which season of that league, named for the year it starts in: 2025 is the 2025/2026 season. Leave blank for the most recent season the league has.
- Team
teamtext - Optional. One of the teams in the league and season chosen above. Leave blank to cover every team.
Outputs
foundtrue/false- True when there was a match to report. False is a normal answer: a league whose season has not started has no last match, and one that has ended has no next match. Branch on this before reading the match.
leaguetext- The league shortcut the answer is about.
matchobject- One match, with its score, its stage scores and its goals.
teamnumber- The team that was asked about. Null when the league's next match was asked for.
Example output
{
"found": true,
"league": "bl1",
"match": {
"goal_count": 5,
"goals": [
{
"comment": null,
"goal_id": 116409,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 12,
"score_team1": 0,
"score_team2": 1,
"scorer_id": 14289,
"scorer_name": "Granit Xhaka",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116410,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 38,
"score_team1": 0,
"score_team2": 2,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116412,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 59,
"score_team1": 1,
"score_team2": 2,
"scorer_id": 18490,
"scorer_name": "N. Elvedi",
"scoring_team_id": 87
},
{
"comment": null,
"goal_id": 116413,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 85,
"score_team1": 2,
"score_team2": 2,
"scorer_id": 18551,
"scorer_name": "T. Kleindienst",
"scoring_team_id": 87
},
{
"comment": "+11",
"goal_id": 116414,
"is_overtime": true,
"is_own_goal": false,
"is_penalty": true,
"minute": 90,
"score_team1": 2,
"score_team2": 3,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
}
],
"goals_team1": 2,
"goals_team2": 3,
"group_id": 45117,
"half_time_team1": 0,
"half_time_team2": 2,
"is_finished": true,
"kickoff_local": "2024-08-23T20:30:00",
"kickoff_utc": "2024-08-23T18:30:00Z",
"last_update": "2024-08-24T11:29:10.647",
"league_id": 4741,
"league_name": "1. Fu\u00dfball-Bundesliga 2024/2025",
"league_season": "2024",
"league_shortcut": "bl1",
"location_city": "M\u00f6nchengladbach",
"location_id": 32,
"location_stadium": "Borussia Park",
"match_id": 72214,
"matchday": 1,
"matchday_label": "Matchday 1",
"matchday_name": "1. Spieltag",
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"number_of_viewers": null,
"results": [
{
"description": "Ergebnis nach Ende der ersten Halbzeit",
"kind": "HalfTime",
"label": "Half-time",
"name": "Halbzeitergebnis",
"order": 1,
"points_team1": 0,
"points_team2": 2,
"result_id": 111413,
"result_type_id": 1
},
{
"description": "Ergebnis nach Ende der offiziellen Spielzeit",
"kind": "After90Minutes",
"label": "Full-time",
"name": "Endergebnis",
"order": 2,
"points_team1": 2,
"points_team2": 3,
"result_id": 111414,
"result_type_id": 2
}
],
"score": "2:3",
"score_source": "result",
"status": "finished",
"team1_icon_url": "https://i.imgur.com/KSIk0Eu.png",
"team1_id": 87,
"team1_name": "Borussia M\u00f6nchengladbach",
"team1_short_name": "Gladbach",
"team2_icon_url": "https://www.bundesliga-reisefuehrer.de/sites/default/files/B04_Standard_Logo_RGB.png",
"team2_id": 6,
"team2_name": "Bayer 04 Leverkusen",
"team2_short_name": "Leverkusen",
"time_zone_id": "W. Europe Standard Time",
"winner": "team2",
"winner_name": "Bayer 04 Leverkusen",
"winner_team_id": 6
},
"team": null
}List a team's matches
Get one club's matches around today across every competition OpenLigaDB holds, so a cup tie, a friendly and a league fixture come back together. Pick the team from a league to get its id, or type part of its name to search without one. The two dates set the window; leave them blank for today plus four weeks. No API key required.
Inputs
- League
leaguetext - Optional. The league to pick the team from. It only fills the team list: the matches come back from every competition the team plays in, not just this one.
- Season
seasontext - Optional. Which season of that league, named for the year it starts in: 2025 is the 2025/2026 season. Leave blank for the most recent season the league has.
- Team
teamtext - Optional. One of the teams in the league and season chosen above. Leave blank to cover every team.
- Or search by name
team_nametext - Optional. Part of a team's name, for a team that is not in the league above. Matching is on any part of the name, so Bayern finds FC Bayern Muenchen. Use this or the team list, not both.
- From date
from_datedate - Optional. Only matches kicking off on or after this day, compared in UTC.
- To date
to_datedate - Optional. Only matches kicking off on or before this day, compared in UTC.
- Match status
statuslist - Optional. Keep only matches in these states. A match counts as in progress once its kick-off has passed and OpenLigaDB has not yet marked it finished. Choose none to keep them all.One or more of:
finished,live(In progress),upcoming(Not started). - Newest first
newest_firsttrue/false - Optional. Return the latest kick-off first instead of the earliest. Off by default, which is fixture-list order.Default:
false. - Number of rows
limitnumber - Optional. How many rows to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - Optional. How many rows to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default:
0.
Outputs
countnumber- How many rows are in this page.
from_datetext- The first day of the window that was applied, YYYY-MM-DD.
has_moretrue/false- True when more rows matched than this page holds.
leaguetext- The league the team was picked from, which does not limit the matches returned.
matcheslist- The matches in this page.
next_offsetnumber- The offset that fetches the next page. Null when this is the last one.
seasontext- The season the answer is about.
teamnumber- The team id that was asked about. Null when a name was searched instead.
team_nametext- The name that was searched. Null when a team was picked from the list instead.
to_datetext- The last day of the window that was applied, YYYY-MM-DD.
total_countnumber- How many rows matched in total, across every page.
Example output
{
"count": 1,
"from_date": "2024-08-01",
"has_more": false,
"league": "bl1",
"matches": [
{
"goal_count": 5,
"goals": [
{
"comment": null,
"goal_id": 116409,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 12,
"score_team1": 0,
"score_team2": 1,
"scorer_id": 14289,
"scorer_name": "Granit Xhaka",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116410,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 38,
"score_team1": 0,
"score_team2": 2,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116412,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 59,
"score_team1": 1,
"score_team2": 2,
"scorer_id": 18490,
"scorer_name": "N. Elvedi",
"scoring_team_id": 87
},
{
"comment": null,
"goal_id": 116413,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 85,
"score_team1": 2,
"score_team2": 2,
"scorer_id": 18551,
"scorer_name": "T. Kleindienst",
"scoring_team_id": 87
},
{
"comment": "+11",
"goal_id": 116414,
"is_overtime": true,
"is_own_goal": false,
"is_penalty": true,
"minute": 90,
"score_team1": 2,
"score_team2": 3,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
}
],
"goals_team1": 2,
"goals_team2": 3,
"group_id": 45117,
"half_time_team1": 0,
"half_time_team2": 2,
"is_finished": true,
"kickoff_local": "2024-08-23T20:30:00",
"kickoff_utc": "2024-08-23T18:30:00Z",
"last_update": "2024-08-24T11:29:10.647",
"league_id": 4741,
"league_name": "1. Fu\u00dfball-Bundesliga 2024/2025",
"league_season": "2024",
"league_shortcut": "bl1",
"location_city": "M\u00f6nchengladbach",
"location_id": 32,
"location_stadium": "Borussia Park",
"match_id": 72214,
"matchday": 1,
"matchday_label": "Matchday 1",
"matchday_name": "1. Spieltag",
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"number_of_viewers": null,
"results": [
{
"description": "Ergebnis nach Ende der ersten Halbzeit",
"kind": "HalfTime",
"label": "Half-time",
"name": "Halbzeitergebnis",
"order": 1,
"points_team1": 0,
"points_team2": 2,
"result_id": 111413,
"result_type_id": 1
},
{
"description": "Ergebnis nach Ende der offiziellen Spielzeit",
"kind": "After90Minutes",
"label": "Full-time",
"name": "Endergebnis",
"order": 2,
"points_team1": 2,
"points_team2": 3,
"result_id": 111414,
"result_type_id": 2
}
],
"score": "2:3",
"score_source": "result",
"status": "finished",
"team1_icon_url": "https://i.imgur.com/KSIk0Eu.png",
"team1_id": 87,
"team1_name": "Borussia M\u00f6nchengladbach",
"team1_short_name": "Gladbach",
"team2_icon_url": "https://www.bundesliga-reisefuehrer.de/sites/default/files/B04_Standard_Logo_RGB.png",
"team2_id": 6,
"team2_name": "Bayer 04 Leverkusen",
"team2_short_name": "Leverkusen",
"time_zone_id": "W. Europe Standard Time",
"winner": "team2",
"winner_name": "Bayer 04 Leverkusen",
"winner_team_id": 6
}
],
"next_offset": null,
"season": "2024",
"team": 87,
"team_name": null,
"to_date": "2024-08-31",
"total_count": 1
}List leagues
Find a competition and the shortcut that addresses it. OpenLigaDB holds over 800 league seasons, from the Bundesliga and the DFB-Pokal down to local amateur competitions, so narrow the list by season, sport or a word from the name. Every other action takes the shortcut and season this returns. No API key required.
Inputs
- Season
seasontext - Optional. Only leagues that ran in this season, which is named for the year it starts in: 2025 means 2025/2026. Leave blank for every season, which is a much larger list.
- Sport
sporttext - Optional. Only leagues in this sport. Leave blank for all of them.
- Name contains
querytext - Optional. Only leagues whose name or shortcut contains this text. Matching ignores capitals.
- Number of leagues
limitnumber - Optional. How many leagues to return. Between 1 and 500; 50 by default.From 1 to 500. Default:
50. - Skip
offsetnumber - Optional. How many rows to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default:
0.
Outputs
countnumber- How many rows are in this page.
has_moretrue/false- True when more rows matched than this page holds.
leagueslist- The leagues in this page, newest season first.
next_offsetnumber- The offset that fetches the next page. Null when this is the last one.
seasontext- The season that was filtered on. Null when every season was searched.
total_countnumber- How many rows matched in total, across every page.
Example output
{
"count": 1,
"has_more": false,
"leagues": [
{
"league_id": 4741,
"matches_url": "https://www.openligadb.de/Matches/bl1/2024/",
"name": "1. Fu\u00dfball-Bundesliga 2024/2025",
"season": "2024",
"shortcut": "bl1",
"sport_id": 1,
"sport_label": "Fu\u00dfball (Football)",
"sport_name": "Fu\u00dfball"
}
],
"next_offset": null,
"season": "2024",
"total_count": 1
}List matchdays
List the rounds a league's season is played over, each with its number and its name. A German league calls a round a Spieltag and numbers them; a cup names them instead, so a quarter-final comes back under that name. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
Outputs
countnumber- How many rows are in this page.
leaguetext- The league shortcut the answer is about.
matchdayslist- The matchdays, in the order they are played.
seasontext- The season the answer is about.
Example output
{
"count": 34,
"league": "bl1",
"matchdays": [
{
"group_id": 45117,
"label": "Matchday 1",
"matchday": 1,
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"name": "1. Spieltag"
},
{
"group_id": 45118,
"label": "Matchday 2",
"matchday": 2,
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/2",
"name": "2. Spieltag"
}
],
"season": "2024"
}List matches
Get the fixtures and results of a league's season, each with its kick-off, its score at half-time and full time, and every goal that was scored. Narrow it to one matchday, to one team's whole season, or to the days a weekend covers, and keep only the matches that have finished, are being played, or are still to come. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
- Matchday
matchdaytext - Optional. One round of the season, called a Spieltag in the German leagues. Leave blank for the whole season.
- Team
team_nametext - Optional. One of the teams in the league and season chosen above. Leave blank for every team's matches.
- From date
from_datedate - Optional. Only matches kicking off on or after this day, compared in UTC.
- To date
to_datedate - Optional. Only matches kicking off on or before this day, compared in UTC.
- Match status
statuslist - Optional. Keep only matches in these states. A match counts as in progress once its kick-off has passed and OpenLigaDB has not yet marked it finished. Choose none to keep them all.One or more of:
finished,live(In progress),upcoming(Not started). - Newest first
newest_firsttrue/false - Optional. Return the latest kick-off first instead of the earliest. Off by default, which is fixture-list order.Default:
false. - Number of rows
limitnumber - Optional. How many rows to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - Optional. How many rows to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default:
0.
Outputs
countnumber- How many rows are in this page.
has_moretrue/false- True when more rows matched than this page holds.
leaguetext- The league shortcut the answer is about.
matchdaynumber- The matchday that was filtered on. Null when the whole season was read.
matcheslist- The matches in this page.
next_offsetnumber- The offset that fetches the next page. Null when this is the last one.
seasontext- The season the answer is about.
team_nametext- The team that was filtered on. Null when every team was included.
total_countnumber- How many rows matched in total, across every page.
Example output
{
"count": 1,
"has_more": true,
"league": "bl1",
"matchday": 1,
"matches": [
{
"goal_count": 5,
"goals": [
{
"comment": null,
"goal_id": 116409,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 12,
"score_team1": 0,
"score_team2": 1,
"scorer_id": 14289,
"scorer_name": "Granit Xhaka",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116410,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 38,
"score_team1": 0,
"score_team2": 2,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
},
{
"comment": null,
"goal_id": 116412,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 59,
"score_team1": 1,
"score_team2": 2,
"scorer_id": 18490,
"scorer_name": "N. Elvedi",
"scoring_team_id": 87
},
{
"comment": null,
"goal_id": 116413,
"is_overtime": false,
"is_own_goal": false,
"is_penalty": false,
"minute": 85,
"score_team1": 2,
"score_team2": 2,
"scorer_id": 18551,
"scorer_name": "T. Kleindienst",
"scoring_team_id": 87
},
{
"comment": "+11",
"goal_id": 116414,
"is_overtime": true,
"is_own_goal": false,
"is_penalty": true,
"minute": 90,
"score_team1": 2,
"score_team2": 3,
"scorer_id": 18494,
"scorer_name": "F. Wirtz",
"scoring_team_id": 6
}
],
"goals_team1": 2,
"goals_team2": 3,
"group_id": 45117,
"half_time_team1": 0,
"half_time_team2": 2,
"is_finished": true,
"kickoff_local": "2024-08-23T20:30:00",
"kickoff_utc": "2024-08-23T18:30:00Z",
"last_update": "2024-08-24T11:29:10.647",
"league_id": 4741,
"league_name": "1. Fu\u00dfball-Bundesliga 2024/2025",
"league_season": "2024",
"league_shortcut": "bl1",
"location_city": "M\u00f6nchengladbach",
"location_id": 32,
"location_stadium": "Borussia Park",
"match_id": 72214,
"matchday": 1,
"matchday_label": "Matchday 1",
"matchday_name": "1. Spieltag",
"matchday_url": "https://www.openligadb.de/Matches/bl1/2024/1",
"number_of_viewers": null,
"results": [
{
"description": "Ergebnis nach Ende der ersten Halbzeit",
"kind": "HalfTime",
"label": "Half-time",
"name": "Halbzeitergebnis",
"order": 1,
"points_team1": 0,
"points_team2": 2,
"result_id": 111413,
"result_type_id": 1
},
{
"description": "Ergebnis nach Ende der offiziellen Spielzeit",
"kind": "After90Minutes",
"label": "Full-time",
"name": "Endergebnis",
"order": 2,
"points_team1": 2,
"points_team2": 3,
"result_id": 111414,
"result_type_id": 2
}
],
"score": "2:3",
"score_source": "result",
"status": "finished",
"team1_icon_url": "https://i.imgur.com/KSIk0Eu.png",
"team1_id": 87,
"team1_name": "Borussia M\u00f6nchengladbach",
"team1_short_name": "Gladbach",
"team2_icon_url": "https://www.bundesliga-reisefuehrer.de/sites/default/files/B04_Standard_Logo_RGB.png",
"team2_id": 6,
"team2_name": "Bayer 04 Leverkusen",
"team2_short_name": "Leverkusen",
"time_zone_id": "W. Europe Standard Time",
"winner": "team2",
"winner_name": "Bayer 04 Leverkusen",
"winner_team_id": 6
}
],
"next_offset": 1,
"season": "2024",
"team_name": null,
"total_count": 9
}List result types
List the stages a score can be recorded at. With no league this is the five OpenLigaDB shares across the whole database, which is what the kind on a match result refers to. With one it is the stages that league actually records, usually half-time and full time. No API key required.
Inputs
- League
leaguetext - Optional. Only the stages this league records. Leave blank for the five OpenLigaDB defines globally.
- Season
seasontext - Optional. Which season of that league, named for the year it starts in: 2025 is the 2025/2026 season. Leave blank for the most recent season the league has.
Outputs
countnumber- How many rows are in this page.
leaguetext- The league that was asked about. Null when the global stages were returned.
league_idnumber- The numeric league id the stages were read from. Null for the global stages.
result_typeslist- The result stages, in the order they occur in a match.
seasontext- The season the answer is about.
Example output
{
"count": 2,
"league": "bl1",
"league_id": 4741,
"result_types": [
{
"description": "Ergebnis nach Ende der ersten Halbzeit",
"global_id": 1,
"global_name": "Halbzeit",
"kind": "HalfTime",
"label": "Half-time",
"name": "Halbzeitergebnis",
"order": 1,
"result_type_id": 5676
},
{
"description": "Ergebnis nach Ende der offiziellen Spielzeit",
"global_id": 2,
"global_name": "nach 90 Minuten",
"kind": "After90Minutes",
"label": "Full-time",
"name": "Endergebnis",
"order": 2,
"result_type_id": 5677
}
],
"season": "2024"
}List sports
List the sports OpenLigaDB holds leagues for: football first and foremost, but also ice hockey, handball, basketball and several more. Each comes back with the id that filters the league list. No API key required.
Inputs
None.
Outputs
countnumber- How many rows are in this page.
sportslist- The sports, as OpenLigaDB numbers them.
Example output
{
"count": 13,
"sports": [
{
"label": "Fu\u00dfball (Football)",
"name": "Fu\u00dfball",
"sport_id": 1
},
{
"label": "Eishockey (Ice Hockey)",
"name": "Eishockey",
"sport_id": 2
}
]
}List teams
List the teams in a league's season, with the crest and the team id that the head-to-head and team fixture actions take. In a tournament each team also comes back with the group it was drawn into. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
Outputs
countnumber- How many rows are in this page.
leaguetext- The league shortcut the answer is about.
seasontext- The season the answer is about.
teamslist- The teams, in alphabetical order.
Example output
{
"count": 18,
"league": "bl1",
"season": "2024",
"teams": [
{
"group_name": null,
"icon_url": "https://upload.wikimedia.org/wikipedia/commons/9/9d/1._FC_Heidenheim_1846.svg",
"name": "1. FC Heidenheim 1846",
"short_name": "Heidenheim",
"team_id": 199
},
{
"group_name": null,
"icon_url": "https://assets.dfb.de/uploads/000/018/232/small_union-Berlin.jpg",
"name": "1. FC Union Berlin",
"short_name": "Union Berlin",
"team_id": 80
}
]
}List top scorers
Get a league season's scoring charts, most goals first, each player with their goal count and their id. This is the Torjaegerliste OpenLigaDB keeps for the competition. No API key required.
Inputs
- League
leaguetextRequired - The competition to read, picked from every league OpenLigaDB holds. The list is ordered with the long running competitions first, so the Bundesliga, its lower tiers and the DFB-Pokal are near the top.
- Season
seasontextRequired - Which season of that league. A season is named for the year it starts in, so 2025 is the 2025/2026 season. The list shows only the seasons this league actually has.
- Number of rows
limitnumber - Optional. How many rows to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - Optional. How many rows to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default:
0.
Outputs
countnumber- How many rows are in this page.
has_moretrue/false- True when more rows matched than this page holds.
leaguetext- The league shortcut the answer is about.
next_offsetnumber- The offset that fetches the next page. Null when this is the last one.
scorerslist- The scoring charts, most goals first.
seasontext- The season the answer is about.
top_scorertext- The player at the top of the charts.
top_scorer_goalsnumber- How many goals that player has scored.
total_countnumber- How many rows matched in total, across every page.
Example output
{
"count": 2,
"has_more": true,
"league": "bl1",
"next_offset": 2,
"scorers": [
{
"goals": 27,
"name": "H. Kane",
"player_id": 18898,
"position": 1
},
{
"goals": 21,
"name": "S. Guirassy",
"player_id": 19545,
"position": 2
}
],
"season": "2024",
"top_scorer": "H. Kane",
"top_scorer_goals": 27,
"total_count": 321
}