football-data.org is the free tier that a very large number of football side projects have quietly run on for years: 12 competitions, no cost, well documented, dependable. Paid plans run roughly €12 to €199 a month with add-ons around €15 each. foot.io is a bigger, younger, less proven database — 1,177,209 matches held across 926 competitions back to 1871, of which every tier reads the 733,863 we can defend a right to redistribute — in closed beta. For a lot of readers, the correct outcome of this page is "keep using football-data.org".
Written by foot.io. football-data.org figures are from their public pricing and documentation, checked 28 Jul 2026.
foot.io figures were measured against our production database, most recently on 10 Aug 2026.
If what you need is the Premier League table, Champions League fixtures, or a bot that posts scores from one of the big European competitions, football-data.org's free tier already does that, has done for years, and costs nothing. Use it. We are not going to construct a reason for you to pay us when the free option covers your job — that is exactly the kind of comparison page that makes developers distrust every other claim on the site.
The point at which we become interesting is when you hit an edge their scope does not reach: a competition outside the twelve, a season from decades ago, odds joined to results for a backtest, identifiers from another provider that need translating, or an LLM agent that should be able to query the database without you writing and maintaining a tool layer. Those are the five reasons anyone has to move, and if none of them apply, do not move.
| Capability | foot.io | football-data.org |
|---|---|---|
| Free tier | 196 competitions (measured 6 Aug 2026), current season only, 5,000 requests/mo at 30/min, REST + MCP | 12 competitions, free — a genuinely good free tier |
| Paid entry price | $19/mo Indie | From around €12/mo — cheaper than us |
| Paid range | $19 or $79/mo, Enterprise on request | Roughly €12–€199/mo |
| Add-ons | None. Nothing is sold separately | Around €15 each, on top of the plan |
| Competition gating | Only free vs paid. No gating between paid tiers: the cheapest paid key reads exactly the same rows as the most expensive one — a served set of 763 of the 926 competitions we hold, set by licence, not by plan (see "Some layers are withheld" below) | Scope varies by tier and add-on |
| Earliest match | 11 Nov 1871 | Modern era; check their per-competition season range |
| Historical odds | 6,222,372 pre-match quotes over 130,550 matches, 21 competitions, 7 bookmakers, 2000–2026; 49,929 odds matches join to a result every tier can read (measured 10 Aug 2026). A research convenience, not a licensed feed | Not the product |
| Live data | ~5-minute poll, single self-hosted runner. Not a livescore product | Fixture and result updates on their documented cadence |
| Query model | PostgREST — filter, order and embed related rows in one request | Small, clearly documented REST surface |
| Agent / MCP access | Deployed MCP server, 31 tools, every paid tier | REST only; you write the tool layer |
| Cross-provider ID resolution | resolve_entity translates ids from Transfermarkt, FBref, Wikidata, Sofascore, API-Football and others. Free, never metered | Their own ids |
| Coverage transparency | Per-competition, per-season fill rates on a public endpoint, gaps included | Documented competition and tier availability |
| Track record | Closed beta, solo developer, no SLA on self-serve tiers | Years of steady service — ahead of us |
We are unproven and they are not. football-data.org has been answering requests reliably for years. foot.io has been in closed beta for months, is run by one person, has no SLA on self-serve tiers, and has not opened self-serve checkout. Reliability is a feature and they have more of it than we do.
Our entry price is higher. $19/mo versus around €12/mo. We think you get more for it; you should decide that, not us.
Breadth is not depth. Our free tier spans 196 competitions, but "in the catalogue" is not the same as "richly covered". Roughly half of played current-season matches carry event data and roughly a third carry lineups — 40,775 and 26,123 of 79,698, measured on 6 August 2026 — and the long tail is much thinner than the headline. Check the competitions you actually need with the query below before you switch anything.
Some layers are withheld. On 28 Jul 2026 we removed player market values and injury records from the API surface because we could not defend our right to re-serve them. They are in no tier, at any price, and that has not changed. Since 29 Jul 2026 a licence gate has enforced the same rule on everything: every tier, Enterprise included, reads only rows we hold an explicit right to redistribute — 733,863 of the 1,177,209 matches we hold (62.3%), 42.9% of held events and 32.9% of held lineups, measured on 10 August 2026 and growing as clearances land. Transfers and shot-level data, xG included, pass the gate for zero rows, and the depth layer of the top five European leagues is still not part of it. We would rather have a smaller honest product than a bigger claim we cannot stand behind, and we would rather tell you when the honest product gets bigger than quietly leave a stale number up.
Breadth at the free tier. If your project has ever been blocked by "that competition is not in the free plan", this is the axis where we are straightforwardly different: 196 competitions, current season, no card required.
History, and odds that join to it. 6,222,372 pre-match quotes across 130,550 matches in 21 competitions from 7 bookmakers, 2000 to 2026, every quote keyed on the same match id as the results. That single join is why most of the people who move to us move to us, so here is its honest shape as of 10 August 2026: a narrow competition set, pre-match only, and — because of the licence gate — 49,929 of those 130,550 odds matches (38.2%) currently join to a result every tier can read, a number that grows as clearances land. The odds come from publicly published bookmaker CSVs compiled by football-data.co.uk, and they are a research convenience rather than a licensed market feed.
Identifier translation as a free primitive. resolve_entity takes a Transfermarkt id, an FBref id, a Wikidata QID, a Sofascore id or a plain name and returns our canonical entity with every other provider identifier we hold, plus the match method and a confidence score. It serves identifiers and names only — never stats — so it is never billed and never counts against a quota. 304,915 of our 305,434 players carry at least one external identifier (measured 6 Aug 2026).
Agent-native access. A deployed MCP server with 31 tools, included at every paid tier and metered exactly like REST. Three of them exist purely to hand an agent the caveats along with the numbers, so a coverage gap gets reported as a gap rather than as a zero.
Before you migrate anything, read our fill rates for the competitions you actually use. If a number on this page disagrees with what the endpoint returns, the endpoint is right and we owe you a correction.
Two footnotes on that query. It returns fill rates of what we hold; the licence gate then decides how much of that any key reads (see "Some layers are withheld" above). And filtering by name works here only because exactly one competition is called Championship — 17 are called Premier League, so for ambiguous names filter on competition_id instead.