Football Fixtures API: Scores, Results and League Table
Pricing
from $0.70 / 1,000 matches
Football Fixtures API: Scores, Results and League Table
Football fixtures, scores and results per league and season as one row per match, plus a computed league table and last 5 results per team. Public domain openfootball data, no login. $1.00 per 1,000 matches.
Pricing
from $0.70 / 1,000 matches
Rating
0.0
(0)
Developer
Don Mangu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Get football fixtures, scores and results by league and season as one row per match, for $1.00 per 1,000 matches.
Add the leagues and seasons you need, filter by status, dates or team, and get the round, date, kickoff time, home and away team, full time score, half time score and status. The Actor also computes the league table and the last 5 results per team from the same file, at no extra charge. The data comes from the public domain openfootball project. You need no login and no API key.
Sample output
One row per match. These are real rows from the 2026-27 Premier League, newest first, read on 6 October 2026:
| Date | Round | Home | Score | Away | Status |
|---|---|---|---|---|---|
| 2026-09-20 | Matchday 5 | Fulham FC | 1-1 | Manchester United FC | finished |
| 2026-09-20 | Matchday 5 | Manchester City FC | 5-3 | Sunderland AFC | finished |
| 2026-09-20 | Matchday 5 | Leeds United FC | 0-0 | Crystal Palace FC | finished |
| 2026-09-20 | Matchday 5 | AFC Bournemouth | 0-1 | Liverpool FC | finished |
| 2026-09-19 | Matchday 5 | Nottingham Forest FC | 0-1 | Coventry City FC | finished |
The first row in full:
{"league": "en.1","competition": "English Premier League 2026/27","season": "2026-27","round": "Matchday 5","date": "2026-09-20","time": "16:30","homeTeam": "Fulham FC","awayTeam": "Manchester United FC","status": "finished","homeGoals": 1,"awayGoals": 1,"result": "D","halfTimeHomeGoals": 0,"halfTimeAwayGoals": 0,"extraTimeHomeGoals": null,"extraTimeAwayGoals": null,"penaltiesHomeGoals": null,"penaltiesAwayGoals": null,"sourceUrl": "https://raw.githubusercontent.com/openfootball/football.json/master/2026-27/en.1.json"}
The league table is saved as the LEAGUE_TABLE record in the key-value store of the run. This is the top of the same run, after 5 matchdays:
{ "position": 1, "team": "Manchester City FC", "played": 5, "won": 5, "drawn": 0, "lost": 0, "goalsFor": 13, "goalsAgainst": 5, "goalDifference": 8, "points": 15 }
The FORM record holds the last 5 results per team, for example "form": "WWWWL" for Arsenal, with the date, opponent, venue and score of each match.
How to get football fixtures and scores
- Click Try for free. No API key or proxy is needed.
- In Leagues, add league codes such as
en.1(Premier League) orde.1(Bundesliga), one per line. - In Seasons, add seasons such as
2026-27. - Optionally set Status, Date from, Date to, Teams and Max matches.
- Click Start, open the Overview view for the matches, and open LEAGUE_TABLE and FORM in the key-value store.
You can also call it from your own code with the Apify API, run it on a schedule, or connect it to Make, Zapier or n8n.
Leagues and seasons
The Actor reads one file per league and season from the openfootball project. These codes had a file on 6 October 2026:
| Code | League | Seasons checked |
|---|---|---|
| en.1, en.2, en.3, en.4 | English Premier League, Championship, League One, League Two | 2025-26 (en.1 and en.2 also 2026-27, en.1 from 2010-11) |
| de.1, de.2 | Bundesliga, 2. Bundesliga | 2025-26 (de.1 also 2026-27 and 2010-11) |
| es.1, es.2 | La Liga, Segunda Division | 2025-26 (es.1 also 2026-27) |
| it.1, it.2 | Serie A, Serie B | 2025-26 (it.1 also 2026-27) |
| fr.1, fr.2 | Ligue 1, Ligue 2 | 2025-26 (fr.1 also 2026-27) |
| nl.1, pt.1 | Eredivisie, Primeira Liga | 2025-26 and 2026-27 |
| tr.1, at.1, be.1, sco.1, gr.1 | Turkey, Austria, Belgium, Scotland, Greece | 2025-26 |
| br.1 | Brasileiro Serie A | 2025 and 2026 (calendar year seasons) |
| ar.1, jp.1, cn.1 | Argentina, Japan, China | 2025 |
This list comes from the codes I tested, so other codes may exist. A league and season without a file returns one free status row.
What you get
- One row per match with round, date, kickoff time, home team, away team, status and goals.
- Half time goals, and extra time and penalty goals where the file lists them.
- The status
finished,scheduled,postponedorcanceled. - A computed league table (football standings): played, won, drawn, lost, goals for, goals against, goal difference and points.
- The last 5 results per team as a form string such as
WWDLW, oldest first, with the form points. - Filters by status, date range and team name, and a sort order of oldest or newest first.
Pricing
You pay per match row returned. The price is $1.00 per 1,000 matches, which is $0.001 per match. Apify also charges a start event of $0.00005 per GB of run memory, which is $0.0000125 at the default 256 MB. Apify platform usage is included. The league table and the form are free.
| Example | Matches | Cost |
|---|---|---|
| 20 matches of one league | 20 | $0.02 |
| One Premier League season (380 matches) | 380 | $0.38 |
| Five top leagues, one season each (en.1, de.1, es.1, it.1, fr.1) | 1,752 | $1.75 |
Status rows for a league or season without a file, or for filters that match nothing, are free. Paid plans get lower prices per match as your Apify plan tier goes up.
Input
{"leagues": ["en.1"],"seasons": ["2026-27"],"status": "finished","dateFrom": "2026-09-01","teams": ["Arsenal"],"includeTable": true,"sortOrder": "desc","maxMatches": 20}
leagues and seasons are required. At most 20 league and season files are read per run. status is all, finished or scheduled. teams keeps a match when the home or away name contains the text. maxMatches defaults to 1,000 and you pay for each row returned. Dates use the format YYYY-MM-DD. If you set dateTo, the table and the form count matches up to that date, so you can get a table as of any day.
Output fields
| Field | Meaning |
|---|---|
league, competition, season | The league code, the competition name from the file and the season |
round, date, time | Round name, match date and the kickoff time as listed in the file (no time zone is given). time is null when the file has none |
homeTeam, awayTeam | Team names as written in the file |
status | finished, scheduled, postponed or canceled on match rows. not_found, source_error or no_matching_matches on free status rows |
homeGoals, awayGoals, result | Full time goals, and H, D or A. Null until the match is finished |
halfTimeHomeGoals, halfTimeAwayGoals | Half time goals when listed |
extraTime..., penalties... | Extra time and penalty goals when listed |
sourceUrl | The openfootball file the row came from |
FAQ
Is it legal to use this data?
The data comes from the openfootball project, whose football.json repository states that the data is public domain and free to use. The Actor reads a few small files and sends one request at a time with a pause, to keep the load on GitHub low. Check that your own use follows the laws and terms that apply to you.
Does it cover soccer results as well?
Yes. Football and soccer are the same game, and the Actor returns the results of the leagues listed above. Names such as Premier League or Bundesliga appear as the league code and the competition name.
Which data is not included?
There are no live scores, no odds and no player statistics. Only team names appear, no player names. Only the leagues that exist in the openfootball repository are available. The files are updated about once a day for the current season, so a result can appear some hours after the match.
How is the league table computed?
From finished league matches in the file, with 3 points for a win and 1 for a draw. Teams are ordered by points, goal difference, goals for and then team name. Official rules can differ, for example by head to head. Rounds named Playoffs are left out. The table is a computed view and not an official standing.
Why did a league return a not_found row?
The league code or the season has no file. Check the code in the list above and the season format, for example 2026-27, or 2026 for calendar year leagues such as br.1.
What if the data host limits a request?
The Actor retries failed requests up to 3 times with a pause. If the host still refuses, you get a free status row for that file and the other files still return rows.
Related Actors
- RSS Feed Reader turns RSS and Atom feeds, such as club news feeds, into JSON rows.
About this Actor
I built this Actor as an independent developer. It is not affiliated with or endorsed by the openfootball project or by any league or club. Data comes from the public domain openfootball football.json files. If this saved you time, a rating helps others find it.