Skip to content

About

Free 2026/27 football data in CSV: 75 competitions — Premier League, La Liga, Serie A, Bundesliga, Ligue 1 — results, fixtures, corners, yellow cards, fouls, shots and goal minutes. Updated daily, no API key.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Repository files navigation

open-matchday

Free, open football data for 2026/27 — 75 competitions as clean CSV files, refreshed every day.

Updated daily Season 2026/27 CSV No API key Free for non-commercial use

Match results, upcoming fixtures, half-time scores, goal minutes and detailed match statistics — shots, shots on target, fouls, yellow/red cards and corners (including first- and second-half corner splits) — for the Premier League, La Liga, Serie A, Bundesliga and Ligue 1, the UEFA Champions/Europa/Conference Leagues, and 70 more competitions across Europe, South America, North America, Asia and Oceania.

One fixed schema across every league. No API key, no signup, no rate limits, no paid feed — plain UTF-8 CSV you can curl, load with pandas/DuckDB/R, or commit into your own project.

curl -O https://raw.githubusercontent.com/oladeeayo/open-matchday/master/data/ENG_1_premier-league/results_2627.csv

Season code: folder and file names use 2627 = 2026/27. Calendar-year competitions (Brazil, Argentina, Mexico, USA, Japan, China) run Jan–Dec and therefore also contain their early-2026 matches.


Contents

Get the data

Four ways, pick whichever fits you:

1. One-off download — no git needed. Grab the whole dataset as a ZIP:

https://github.com/oladeeayo/open-matchday/archive/refs/heads/master.zip

2. Single file with curl.

curl -O https://raw.githubusercontent.com/oladeeayo/open-matchday/master/data/ESP_1_la-liga/results_2627.csv

3. Shallow clone (only the current state, no history):

git clone --depth 1 https://github.com/oladeeayo/open-matchday.git

4. Hotlink via CDN. jsDelivr mirrors the repository with edge caching — friendlier for web apps and repeated reads:

https://cdn.jsdelivr.net/gh/oladeeayo/open-matchday@master/data/ENG_1_premier-league/results_2627.csv

For reproducible research, pin a commit SHA instead of master:

git rev-parse HEAD
# then use .../open-matchday/<sha>/data/...

Quick start

pandas

import pandas as pd

BASE = "https://raw.githubusercontent.com/oladeeayo/open-matchday/master/data"
df = pd.read_csv(f"{BASE}/ENG_1_premier-league/results_2627.csv")

df[df.gw == 6]                                  # one gameweek
df[df.home == "Arsenal"]                        # one team
df.groupby("home")["ft_home"].sum().sort_values(ascending=False)   # home goals

DuckDB (query the CSV over HTTP, no download)

SELECT home,
       count(*)                    AS played,
       sum(ft_home)                AS goals_for,
       avg(home_corners)           AS avg_corners
FROM read_csv_auto(
  'https://raw.githubusercontent.com/oladeeayo/open-matchday/master/data/ENG_1_premier-league/results_2627.csv'
)
GROUP BY home
ORDER BY goals_for DESC;

R

df <- read.csv("https://raw.githubusercontent.com/oladeeayo/open-matchday/master/data/ESP_1_la-liga/results_2627.csv")
subset(df, home == "Real Madrid")

What you get

Competitions 75 (see LEAGUE_INDEX.md)
Finished matches 8,500+ result rows and growing daily
Upcoming fixtures 9,100+ fixture rows
Goal events 1,900+ goal rows (top-5 leagues, Germany 1–3, UEFA)
Format UTF-8 CSV, one folder per competition, fixed header
Update cadence Daily at 00:00 UTC via GitHub Actions
Access ZIP download, git clone, raw GitHub, jsDelivr CDN
Cost Free for informational, non-commercial use

Every competition folder contains:

data/ENG_1_premier-league/
    results_2627.csv    finished matches — score, HT, stats, corners, goal minutes
    fixtures_2627.csv   upcoming matches — gw, date, time, home, away
    goals_2627.csv      goal-by-goal detail (only where a provider supplies it)

Find your competition

Folder names follow <COUNTRY>_<TIER>_<league-slug>:

Folder Competition
ENG_1_premier-league Premier League
ESP_1_la-liga La Liga
GER_1_bundesliga Bundesliga
ITA_1_serie-a Serie A
FRA_1_ligue-1 Ligue 1
NED_1_eredivisie Eredivisie
POR_1_primeira-liga Primeira Liga
BEL_1_pro-league Belgian Pro League
TUR_1_super-lig Süper Lig
GRE_1_super-league Super League Greece
UEFA_1_champions-league UEFA Champions League
ENG_2_championship EFL Championship
BRA_1_serie-a Brasileirão Série A
USA_1_mls Major League Soccer

The complete list of all 75 competitions, with the source used for each, is in LEAGUE_INDEX.md.

Data dictionary

Full field-by-field documentation (types, nullability, sources, examples): DATA_DICTIONARY.md.

results_<season>.csv in brief:

Column Type Meaning
gw int Gameweek / matchday (true round where the provider supplies one)
date YYYY-MM-DD Match date (UTC)
time HH:MM Kickoff, CET-1 convention; blank when unknown
home, away text Team names in provider spelling
ft_home, ft_away, ft_result int, int, H/D/A Full-time score and result
ht_home, ht_away, ht_result int, int, H/D/A Half-time score (blank when unavailable)
home_shots … away_red int Shots, shots on target, fouls, corners, cards (blank when unavailable)
home_corners_1h, away_corners_1h int First-half corners — top-10 leagues only
home_corners_2h, away_corners_2h int Second-half corners — top-10 leagues only
goal_minutes text Comma-separated goal minutes, e.g. "12,45,90"
source text openligadb, fixturedl, espn, fd.co.uk or soccerway

fixtures_<season>.csv has gw, date, time, home, away and no scores. goals_<season>.csv has gw, date, home, away, minute, score_home, score_away, scorer.

Coverage and freshness

Coverage is deliberately uneven: every competition has results and fixtures, but detailed stats depend on which free provider covers that league.

Data Coverage
Results + fixtures All 75 competitions (cups gain fixtures round by round)
Half-time scores ~20% of result rows (football-data.co.uk and OpenLigaDB leagues)
Shots / fouls / cards ~19% of result rows (football-data.co.uk leagues)
Corner totals ~19% of result rows
Corner 1H + 2H splits Every played match in the top-10 leagues (784 rows and growing)
Goal minutes ~8% of result rows (top-5, Germany 1–3, UEFA)
  • Updated daily at 00:00 UTC by GitHub Actions; a red run means the dataset was not published, so what you see here always passes validation.
  • football-data.co.uk supplies match statistics and may lag by a gameweek or two; scores are refreshed daily from fresher sources.
  • The last build timestamp and per-league counts live in build_summary.json.
  • Fixture lists are complete where a provider publishes a full-season spine; other competitions grow as schedules are released.

How it is built

A small Python pipeline (standard library only, no dependencies) merges several keyless free sources into one normalised record per match, then publishes the generated CSVs to this repository daily:

fixturedownload.com ─┐
OpenLigaDB ──────────┤
ESPN site API ───────┼─► merge / normalise / dedupe ─► data/<league>/*.csv
football-data.co.uk ─┤
Fotmob ──────────────┤
Soccerway ───────────┘

Merge priority is OpenLigaDB > fixturedownload > ESPN > football-data.co.uk > Soccerway, with fuzzy team-name matching, ambiguity guards and postponement handling. The top-10 leagues additionally get per-match corner totals and half-by-half splits from FotMob. The build pipeline itself runs in a private repository; this one stays focused on the published data and its documentation.

Limitations

  • Not live. Scores refresh once a day; do not use this for in-play data.
  • Nulls are real. Blank means "no free source provided it", never zero.
  • Derived gameweeks. Only OpenLigaDB and fixturedownload supply official round numbers; elsewhere gw is clustered into Mon–Sun weeks.
  • Provider spelling. Team names follow the winning source; the same club can appear under a different spelling in another competition.
  • Kickoff times use a fixed CET-1 offset, so summer fixtures can be one hour off local time.
  • No xG, lineups, injuries, odds or play-by-play. Goals are available as minutes (and scorers for German leagues), not full event data.
  • Coverage varies. Check the per-competition table in LEAGUE_INDEX.md before relying on a stat for a league.

License and attribution

This compilation is shared for informational, non-commercial use.

  • You may use it in personal projects, research, journalism, dashboards and open-source tools, with attribution.
  • You may not sell it, sub-license it, charge for access, or present it as a commercial data feed.
  • Attribute by linking to this repository and naming open-matchday as the source.
  • Provider rights remain with the providers. football-data.co.uk, ESPN, FotMob, Soccerway, OpenLigaDB and fixturedownload have their own terms; this repository's compilation does not override them. Read DISCLAIMER.md before redistributing.

There is no OSI-approved license file because the upstream data is non-commercial; the terms above and in DISCLAIMER.md are the license.

Need more advanced data?

The published CSVs are deliberately broad and free. If you need something more sophisticated or advanced — xG, lineups, per-shot events, historical seasons, odds, a bespoke export for your model or study — here's how to reach out:

  • Open an issue for questions, data requests, or ideas. This is the best first step: we can scope what you need, and the answer stays visible to everyone who wants the same thing.
  • Open a pull request when you already have a concrete fix or addition — a correction backed by an official source, a new competition, or a schema improvement. Keep the CSV schema stable and describe your source in the PR.
  • For research collaborations or larger custom datasets, open an issue and say what you're building; we'll work out the details there.

Feature requests are welcome — this dataset grows because users ask for things.

Citation

If you use this dataset in published work, cite the repository. A machine-readable record is provided in CITATION.cff.

@misc{openmatchday2026,
  title        = {open-matchday: free 2026/27 football results, fixtures and match statistics},
  author       = {{open-matchday contributors}},
  year         = {2026},
  howpublished = {\url{https://github.com/oladeeayo/open-matchday}},
  note         = {Season 2026/27, accessed 2026-10-28}
}

Repository layout

data/<COUNTRY>_<TIER>_<league-slug>/
    results_<season>.csv   finished matches
    fixtures_<season>.csv  upcoming matches
    goals_<season>.csv     goal events (where available)
build_summary.json         per-league row counts and errors from the last build
LEAGUE_INDEX.md            generated index of all 75 competitions
DATA_DICTIONARY.md         field-by-field schema reference
CITATION.cff               citation metadata
DISCLAIMER.md              provider terms, data rights, no-warranty notice

Not affiliated with any league, club, federation or commercial data provider.

About

Free 2026/27 football data in CSV: 75 competitions — Premier League, La Liga, Serie A, Bundesliga, Ligue 1 — results, fixtures, corners, yellow cards, fouls, shots and goal minutes. Updated daily, no API key.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors