/compare · foot.io vs API-Football

foot.io vs API-Football

Two flat-priced football APIs that are good at opposite things. API-Football is a live feed across roughly 1,200 leagues, updating in-play about every 15 seconds. foot.io is a historical database — we hold 1,177,209 matches back to 1871, every tier reads the 733,863 we can defend a right to redistribute, joined to 6.2 million odds quotes — served over PostgREST and MCP, currently in closed beta.

Written by foot.io. API-Football 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, and move as we ingest and as clearances land.

The short version

read this bit if you read nothing else

If your product puts a score on a screen while the match is being played, buy API-Football and stop reading. Their live cycle is roughly 15 seconds and it is the thing they are built to do. foot.io polls fixtures every five minutes from a single self-hosted machine. That is an honest description of a results database, not of a livescore feed, and no amount of positioning changes it.

If your product is a model, a backtest, a research tool or an agent — something that reads far more history than it does live minutes — then the trade flips. We hold results further back than a modern-era feed does, we do not gate competitions by plan, and we will translate other providers' identifiers into ours for free so you can join our history onto whatever live feed you already pay for. Plenty of people should buy both.

API-Football Choose API-Football when…

  • You need in-play scores and events during the match. ~15-second updates; we are 300 seconds behind that on a good day.
  • You need breadth of current leagues — their ~1,200 leagues is more than the 926 competitions we hold, and more still than the 763 we serve.
  • You need live bookmaker odds attached to fixtures. Ours are pre-match and historical only.
  • You need a company — support, an SLA, an invoice from a business that will still exist next year. We are one person in closed beta.
  • You want to buy today. Their checkout works; ours is not open yet.

foot.io Choose foot.io when…

  • You need history. Our earliest recorded match is 11 Nov 1871; we hold 1,177,209 matches, and every tier reads the 733,863 we can defend (measured 10 Aug 2026).
  • You are backtesting and want odds and results in one join — 6.2M pre-match quotes keyed on our match id; 49,929 odds matches join to a result every tier can read today.
  • You already have ids from somewhere else and need them translated. resolve_entity is free and unmetered.
  • You are building for an LLM agent and want MCP rather than a REST client you have to write and maintain.
  • You want to audit coverage before paying — ours is published per competition, per season, publicly.

Side by side

capabilities · theirs checked 28 jul 2026 · ours measured 6 aug 2026
Capabilityfoot.ioAPI-Football
Entry price$0 free tier · $19/mo Indie · $79/mo Pro · Enterprise on request$19–$39/mo across paid plans, plus a free tier
Plan gatingNone between tiers: the cheapest paid key reads exactly the same rows as the most expensive one. Which rows exist to read is set by the licence gate (see Redistribution rights), not by your planNone. All endpoints on every paid plan; plans differ on request volume
Competitions926 held with at least one recorded match; 763 serve at least one match to every tier (measured 10 Aug 2026)~1,200 leagues and cups — more than us
Live latency~5 minutes, single self-hosted poller. Not a livescore product~15 seconds in-play — far better than us
Earliest match11 Nov 1871Modern era; check their per-league season list
Redistribution rightsEnforced by a licence gate since 29 Jul 2026: every tier reads only rows we can defend — 733,863 of 1,177,209 held matches (62.3%), 42.9% of held events, 32.9% of held lineups, measured 10 Aug 2026. Top-five-league depth, transfers, shot-level data, market values and injuries withheldCommercial terms for app use; resale by arrangement
Historical odds6,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). Research convenience, not a licensed feedLive and pre-match odds across the live catalogue, from a commercial arrangement
Query modelPostgREST — filter, order and embed related rows in one requestFixed REST endpoints with documented parameters
Agent / MCP accessDeployed MCP server, 31 tools, included at every paid tierREST only; you write the tool layer
Cross-provider ID resolutionresolve_entity maps ids from Transfermarkt, FBref, Wikidata, Sofascore, API-Football and others onto ours. Free, never meteredTheir own ids
Published coveragePer-competition, per-season fill rates on a public endpoint — including the gapsDocumented league and season lists
Corrections logPublic erratumChangelog and support channel
MaturityClosed beta, solo developer, no SLA on self-serve tiersEstablished commercial service — ahead of us

What we are not good at

the part most comparison pages leave out

Live is a different product and we are not it. Our fixture poller runs on a five-minute cycle on one machine. If it stops, it stops until someone notices. API-Football runs infrastructure for this; we run a cron job.

Current-season depth is partial. 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. Depth is much better in the leagues you would expect and much worse everywhere else. Do not take that on trust — the query below returns it per competition and per season, and it needs no key.

Redistribution rights are partial, and since 29 Jul 2026 a licence gate enforces them on every tier, Enterprise included. We hold 1,177,209 matches; every tier reads the 733,863 (62.3%) we can defend a right to re-serve. Of the events we hold, every tier reads 42.9%; of lineups, 32.9% — measured on 10 August 2026, and growing as clearances land. That still leaves a lot withheld. The event and lineup layer of the top five European leagues comes from sources we have no right to re-serve, so we sell none of it; transfers and all shot-level data, xG included, pass the gate for zero rows; player market values and injury records came off the API surface entirely on 28 Jul 2026 and are in no tier at any price. A vendor with signed feed contracts can promise you things we still cannot, and that is a legitimate reason to buy from them instead.

We are one person. No support rota, no uptime guarantee on self-serve tiers, no procurement paperwork. If your business would be damaged by any of that, buy from a company.

What we are good at

measured 6 aug 2026, production database
1,177,209
matches held, earliest 11 Nov 1871 · every tier reads 733,863
926
competitions held · 763 serve at least one match
6.22M
pre-match odds quotes, 130,550 matches
31
MCP tools, every paid tier

Depth of history, not breadth of today. A modern-era feed answers "what happened this season" better than we do. We answer "what happened in the Football League in 1889" at all. If your model needs decades rather than seasons, that is the entire argument.

One price, no gating between tiers. Our cheapest paid key reads exactly the same rows as the most expensive one — the licence gate defines the served set once, for everyone, and plans differ only on request volume. API-Football takes the same approach on endpoints, which we think is the right one — this is a point of agreement between us, not a differentiator.

Identifier translation as a free primitive. Hand resolve_entity a Transfermarkt id, an FBref id, a Wikidata QID, a Sofascore id or a plain name, and it returns our canonical entity plus every other provider identifier we hold for it, with the match method and a confidence score so you can tell an exact id hit from a fuzzy name guess. It returns identifiers and names only, never stats, which is why 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). This is how you glue our history onto whichever live feed you already pay for.

Agent-native access. The MCP server is a deployed HTTP JSON-RPC endpoint with 31 tools, metered exactly like REST rather than sold as a separate product. Three of those tools — get_data_quality_summary, get_competition_coverage and get_fact_evidence — exist so an agent gets the caveats along with the numbers instead of confidently reporting a gap as a zero.

Check it yourself

no key required · this is the query that would catch us lying

Every coverage claim above is served from a public, unauthenticated endpoint. Pick any competition and read the fill rates season by season. If a number here disagrees with what that endpoint returns, the endpoint is right and we owe you a correction.

# per-season lineup / event / player-stat coverage for one competition. # 17 competitions in the catalogue are named "Premier League" (and several # share the slug), so pin the query to competition id 1 — England's. # Filtering on the name would blend all seventeen. # no foot.io key needed. FOOTIO_ANON is the public project key printed in # the quickstart at https://foot.io/docs#quickstart — copy it from there. export FOOTIO_ANON=... curl -s "https://amidfjrgsztslrpeaiec.supabase.co/rest/v1/competition_season_coverage\ ?competition_id=eq.1&order=season_name.desc&limit=10\ &select=competition_name,season_name,played_count,pct_lineups,pct_events,pct_player_stats" \ -H "apikey: $FOOTIO_ANON"

We ran that exact query while writing this page, on 6 August 2026: the 2025-2026 row came back with 403 played and lineups, events and player stats each at 95.8%. One caveat on what it measures: these are fill rates of what we hold. The licence gate then decides how much of that any key reads — for top-five-league events and lineups, including England's Premier League, that is currently none (see the redistribution row above).

Swap the competition id for whichever one your product actually needs — /rest/v1/competitions?select=id,name,slug with the same key gives you the map. If it comes back thin, we would rather you found out now than after paying us — and if it matters to you, tell us and it goes up the ingestion queue.

API-Football details are summarised from their publicly published pricing and documentation as checked on 28 Jul 2026; their product changes and this page will lag it. We have tried to state their advantages as plainly as our own. If anything here is wrong or out of date — theirs or ours — email hello@foot.io and we will correct it and log the change in our public erratum.
Join the closed beta waitlist → See pricing