Open data

Open data: every settled model prediction

The whole track record as flat files: for each finished match in a covered league, the probabilities the model stored before kick-off, its pick and what actually happened. Free to download, analyse and republish with attribution.

661 settled matches across 10 leagues, Jul 17, 2026 to Oct 17, 2026. Files refresh hourly as matches are settled.

Nothing is filtered by outcome: the losing picks are in the file next to the winners. Upcoming matches are never included — a prediction only becomes public once the match is settled with a score.

Downloads

One row per match, UTF-8, comma-separated, kick-off order. The JSON files carry the same rows plus a provenance header. Direct links are stable and may be fetched by scripts; cross-origin requests are allowed.

Columns

ColumnMeaning
fixture_idMatch identifier (stable; the trailing number of the match URL).
kickoff_utcKick-off in UTC, ISO 8601.
leagueCompetition name.
league_slugCompetition slug as used in the site URLs and the per-league files.
countryCountry or confederation of the competition.
home_teamHome club.
away_teamAway club.
home_scoreFinal home goals (after 90 minutes plus stoppage; no extra time).
away_scoreFinal away goals.
resultFinal result derived from the score: 1 home win, X draw, 2 away win.
p_homeModel probability of a home win, stored before kick-off (0–1).
p_drawModel probability of a draw.
p_awayModel probability of an away win. The three sum to 1 within rounding.
lambda_homeModel goal expectation for the home side (Poisson rate), empty for older rows.
lambda_awayModel goal expectation for the away side.
pickThe model’s pre-match 1X2 pick (the most likely outcome); empty when none was issued.
pick_correct1 if the pick matched the result, 0 if not, empty without a pick.
model_versionVersion of the model that produced the row (see methodology).
match_urlPublic match page with the settled verdict.

Reading the data

The files load straight into pandas, R or a spreadsheet. A one-line Brier score per league:

import pandas as pd
df = pd.read_csv("https://footballanalytics.pro/data/all.csv")
df["brier"] = ((df.result == "1") - df.p_home) ** 2 + ((df.result == "X") - df.p_draw) ** 2 + ((df.result == "2") - df.p_away) ** 2
print(df.groupby("league").brier.mean())
df <- read.csv("https://footballanalytics.pro/data/all.csv")
mean(df$pick_correct, na.rm = TRUE)

Licence and citation

The dataset is published under CC BY 4.0.

You may copy, redistribute, transform and build on it for any purpose, including commercially, as long as you credit Football Analytics and link to this page. A sentence such as “Data: Football Analytics open data (footballanalytics.pro/data)” is enough.

Suggested citation

Football Analytics (2026). Settled model predictions dataset: pre-match 1X2 probabilities and results, 11 leagues. https://footballanalytics.pro/data. Licence: CC BY 4.0.

What the data is, and is not

  • Pre-match figures only. Every probability was written before kick-off and never revised; the match page shows the same numbers.
  • Settled matches only. A fixture appears once it has a final score; postponed or abandoned matches are absent, not marked.
  • Covered leagues only. The model is fitted per league; competitions outside the covered set are not in the file even where the site shows fixtures for them.
  • The goal expectations are the model’s attack-and-defence estimates (Dixon-Coles / Poisson), not shot-based xG from event data.
  • No bookmaker odds. The track record page measures the model against the closing market; the odds themselves are third-party data and are not redistributed.
  • The official model version at kick-off is used. Shadow versions under evaluation are never published.

Questions

Can I use this data in a paper, blog post or notebook?
Yes. The licence is CC BY 4.0: use it for anything, including commercial work, and credit Football Analytics with a link to footballanalytics.pro/data.
Why are there no upcoming matches?
Upcoming predictions are for members. A match enters the open file only once it is settled with a final score, which also makes the file a fair record: nothing can be edited after the result is known.
How far back does it go and how often is it updated?
From the start of the 2026-27 season (July 2026), when the current model went live. The files are regenerated every hour; a match is usually in them within an hour of the final whistle.
How do the probabilities relate to the pick?
The pick is the most likely of the three outcomes. pick_correct compares it with result. A Brier score across p_home, p_draw and p_away measures the probabilities themselves; the track record page shows the same figures with calibration.