A concise, current (June 2026) map of where to get historical results, live results, and modelling data like expected goals (xG) for football — aimed at anyone building a match-prediction model/agent. Free-first; every row notes whether you need an API key.
Note: a few datasets ship historical bookmaker-odds columns — listed here purely as
model features, not for betting. Always read each provider's Terms & rate limits and cache aggressively.
| Source | What you get | Key? | Notes / best for |
|---|---|---|---|
football-data.orgfree foreverAPI-FootballTheSportsDBFootball-Data.co.ukStatsBomb Open Data| Source | What you get | Key? | Notes / best for |
|---|---|---|---|
ESPN hidden API — site.api.espn.com/apis/site/v2/sports/soccer/{league}/scoreboard |
Live scores + finished results, JSON | No | Free, no signup, fast; unofficial so endpoints can change. Solid for matchday polling. |
|
[football-data.org](https://www.football-data.org/)[SofaScore](https://www.sofascore.com/)[Live-Score API](https://live-score-api.com/)| Source | What you get | Key? | Notes / best for |
|---|---|---|---|
|
UnderstatStatsBomb Open DataClub Elosoccerdata (Python)Start here.worldfootballR (R)** Fixtures & results:football-data.org(keyed, clean) — oropenfootballfor zero-setup.Live during matches: ESPN hidden API (no key) +API-Footballfree tier as backup. Confirm a final score fromtwo** sources before trusting it.Model features:soccerdata→ FBref xG + Understat shot xG +Club Eloratings;StatsBomb Open Datawhen you want raw events.Curated index of everything else:openfootball/awesome-football.
Practical tips
- Cache results locally; most free tiers are rate-limited (and live feeds lag — verify FT from ≥2 outlets).
- "Hidden"/unofficial endpoints (ESPN, SofaScore) are great but can change without notice — keep a fallback.
- xG and form are featuresfor your model, not requirements — even a clean results feed + Elo gets you far.
Compiled June 2026. Free tiers and endpoints change — double-check each provider's current docs.