27,831 European matches, 1X2 results and odds ready to backtest.
Premier League, LaLiga, Bundesliga, Serie A, Ligue 1, their second divisions and five more leagues. Score, half-time, xG, Bet365 and Pinnacle pre-match odds, and the close: Pinnacle, market average, best price.
Choose your option
Same columns for every season. The price covers the file as it is at purchase time, unless marked “updated”.
One season
One full season of all 15 leagues.
Download link valid 72 h, 5 downloads
Buy season 2025-26All seasons
2021 → 2026, plus the start of 2026-27.
- 27,831 matches, one file per season + a combined file
- 2026-27 included up to Oct 21, 2026 (frozen)
- Joins our other football files on match_id
Download link valid 72 h, 5 downloads
Buy — €29Football Complete Pack
All 3 datasets, all seasons.
- 1X2 & Results
- Over/Under 2.5
- Machine Learning
Home, draw, away: league by league
Across every season in the file, the share of home wins, draws and away wins in each of the 15 leagues.
| LEAGUE | MATCHES | Home | Draw | Away |
|---|---|---|---|---|
| Süper Lig | 1,793 | 45.9% | 24.9% | 29.2% |
| LaLiga | 1,989 | 45.7% | 26.2% | 28.1% |
| LaLiga2 | 2,420 | 45.1% | 28.8% | 26.1% |
| Bundesliga | 1,584 | 44.3% | 24.7% | 30.9% |
| Premier League | 1,970 | 44.0% | 24.1% | 31.9% |
| 2. Bundesliga | 1,602 | 43.6% | 25.7% | 30.8% |
| Eredivisie | 1,611 | 43.6% | 24.4% | 32.0% |
| Ligue 1 | 1,741 | 43.5% | 24.5% | 32.0% |
| Championship | 2,892 | 43.4% | 26.1% | 30.5% |
| Jupiler Pro League | 1,619 | 43.2% | 24.6% | 32.1% |
| Liga Portugal | 1,602 | 43.1% | 24.8% | 32.1% |
| Ligue 2 | 1,831 | 42.0% | 27.8% | 30.2% |
| Super League (GRE) | 1,237 | 42.0% | 26.1% | 31.9% |
| Serie A | 1,970 | 40.6% | 26.9% | 32.5% |
| Serie B | 1,970 | 40.4% | 31.9% | 27.7% |
Built for modelers
One row per match, a match_id key shared by all our football files, several odds levels side by side.
Backtest against the close
Pinnacle closing and market average: the benchmark to judge a strategy.
df = pd.read_parquet("football_1x2_all_seasons.parquet")
df["imp_home"] = 1 / df.pinnacle_close_homeMeasure line-shopping value
Best closing price versus market average, match by match.
(df.max_close_home / df.avg_close_home - 1).describe()Compare xG and results
Provider or computed xG (labelled), to separate luck from performance.
df.groupby("xg_source")[["home_xg", "home_goals"]].mean()Every column shows its fill rate.
Pinnacle closing thins out from October 2025 and stops on 2026-01-16, when the public source stopped publishing it. Market-average closing covers every season; best closing is the best price of each outcome, not available everywhere at once: an upper bound. We state it instead of filling the gaps. Since August 2025 the source's market-average and best closing carry higher margins and the best no longer includes Pinnacle: do not chain seasons at those prices without accounting for it (measured in the README).
Bet365 and Pinnacle “pre-match” odds are a weekly snapshot: neither opening nor closing. xG is labelled row by row: official provider or computed by ProbWin from shots (46.6% provider xG).
Cleaning (September 2026): team spellings unified, the same match recorded twice one day apart removed, and 22 mislabelled 2026-27 rows removed (Portuguese duplicates tagged LaLiga, Scottish matches tagged LaLiga2).
What's in the file — and what isn't
Included
- Final score, half-time, H/D/A result
- Labelled xG (provider or ProbWin)
- Bet365 and Pinnacle pre-match odds
- Pinnacle close, market average, best price
- Fair probability per outcome + best price vs fair price
Not included
- Pinnacle closing after 2026-01-16
- Opening odds
- Cups and European competitions
- Asian handicaps
Every column, with its fill rate
Measured on the delivered file. 100% = no missing values.
Match
match_id key (shared across our football files), season, league, date, teams
Result
Final score, H/D/A result, half-time score
xG
Expected goals, labelled source (provider or ProbWin)
Pre-match odds
Bet365 and Pinnacle, weekly pre-match snapshot
Closing
Pinnacle close (to 2026-01-16), market average, best price
ProbWin layer
Fair probability without margin (Pinnacle close, else market average) and best price vs fair price
The file, exactly as you'll get it
Six real rows, main columns. Download 50 free rows with every column to check it fits your pipeline.
| match_date | league | home_team | away_team | home_goals | away_goals | result | home_xg | away_xg | b365_home | b365_draw | b365_away | pinnacle_close_home | pinnacle_close_draw | pinnacle_close_away | max_close_home | max_close_draw | max_close_away |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2024-08-16 | E1 | Coventry | Oxford | 3 | 2 | H | 2.95 | 0.96 | 1.7 | 3.9 | 4.75 | 1.7 | 4.09 | 4.91 | 1.7 | 4.3 | 5.5 |
| 2024-09-20 | N1 | Zwolle | AZ Alkmaar | 1 | 2 | A | 1.69 | 1.44 | 6.5 | 5.0 | 1.42 | 6.64 | 4.85 | 1.46 | 7.0 | 5.12 | 1.48 |
| 2024-10-12 | SP2 | Cadiz CF | Malaga | 2 | 2 | D | 2.6 | 2.06 | 1.75 | 3.4 | 5.0 | 1.8 | 3.58 | 4.98 | 1.8 | 3.88 | 5.8 |
| 2024-10-26 | T1 | Kasimpasa | Samsunspor | 1 | 4 | A | 1.4 | 2.38 | 2.62 | 3.25 | 2.7 | 2.11 | 3.33 | 3.86 | 2.16 | 3.5 | 3.87 |
| 2024-11-10 | B1 | St. Gilloise | Genk | 4 | 0 | H | 2.28 | 0.75 | 2.45 | 3.4 | 2.75 | 2.21 | 3.45 | 3.4 | 2.4 | 3.61 | 3.4 |
| 2025-01-26 | D1 | TSG Hoffenheim | Eintracht Frankfurt | 2 | 2 | D | 2.32 | 2.3 | 3.1 | 3.6 | 2.2 | 3.43 | 3.88 | 2.09 | 3.43 | 3.9 | 2.14 |
Before you buy
Which leagues?
England (Premier League, Championship), Spain (LaLiga, LaLiga2), Germany (Bundesliga, 2. Bundesliga), Italy (Serie A, Serie B), France (Ligue 1, Ligue 2), Netherlands (Eredivisie), Portugal (Liga Portugal), Belgium (Jupiler Pro League), Turkey (Süper Lig), Greece (Super League).
How do I get the file?
Right after payment a download link appears on screen and is emailed to you. The archive contains CSV and Parquet files plus a README documenting every column.
Can I use it in a commercial product?
Yes for your models, analyses and tools, commercial ones included. Reselling or redistributing the files themselves is not allowed.
A question before buying?
Email [email protected] — the founder answers, usually the same day.