How we check
Every fact here comes from public pages. This is where they come from, what "verified" means, and how to tell us when we're wrong.
Where the facts come from
We read each provider's own public pages. No accounts, no private information, no paid access. Facts are grouped, and each group has its own sources and check date: prices, free plan, league coverage and data types.
For example, football-data.org:
- Pricing (the pricing page): football-data.org
- Free plan (the pricing or sign-up page): football-data.org
- League coverage (the coverage or league list): football-data.org
- Data types (the docs and feature pages): football-data.org/pricing football-data.org/coverage
Every provider page lists its sources the same way, under Sources.
What "verified" means
- Checked (with a date): we confirmed it on the vendor's own page that day.
- Partly verified: some of the group was confirmed, for example a league count, and the rest wasn't.
- Not re-verified: from our first research and not re-checked yet. In the compare table these prices carry a †.
In tables, ? (or "Not confirmed") means we couldn't find it on public pages. It doesn't mean "no". – means the vendor says it isn't offered.
Today: prices checked on the vendor's page for 8 of 17 providers, free plans for 8, league coverage for 2. Data types are from our first research for all 17.
A script flags when a vendor's source page changes. A person re-checks it before anything changes here, and every change goes in the changelog.
Two sources: how sure we are
Each group of facts also says who backs it up. There are three levels:
- Confirmed by vendor + 1 independent source: the vendor's own page states it, and so does a page run by a different party.
- Vendor page only: only the vendor's own pages state it.
- ? not confirmed: no vendor page backs it up, or the vendor's pages don't state it, even if another site does.
The vendor's own page is always required. What counts as independent:
- Never independent: anything on the vendor's own domains: docs, pricing page, blog, status page, its GitHub. Its docs agreeing with its pricing page is still "Vendor page only", and so is a comparison on its own blog.
- Marketplaces (such as RapidAPI): the vendor writes the listing, but the marketplace runs the billing. A listing counts for the prices and free plan it shows, never for leagues or data types.
- App stores, directories, comparisons and press count only if a different party runs them and they state the same fact.
- We only use pages we've already saved. If our saved copy doesn't contain the fact, it doesn't count. If an independent page disagrees with the vendor, we keep the vendor's figure, mark it "Vendor page only" and note the disagreement.
Today, across 17 providers × 4 groups: 0 of 68 confirmed by vendor + 1 independent source, 57 of 68 vendor page only, 11 of 68 not confirmed.
Each provider page shows the level next to each group's check date. The API and MCP server include it as confidence for each fact group.
Daily reachability checks
Once a day we request one public address per provider and record whether it answered and how fast. For most providers that's a public page (a status page, docs or homepage), so it shows the site is reachable, not that the API works. The 3 with a keyless API or open-data endpoint get no separate reachability request: the live API check below already calls them.
That's at most one request per provider per day for this check, plus each site's robots.txt at most once a week. We don't follow redirects, and a repeat run on the same day sends nothing.
Daily live API checks
For 7 providers we also make one real API call a day and check that the answer contains real football data, not just a 200. Four of them need a key: we use free-plan keys only. The other three are keyless.
- football-data.org: Primeira Liga standings (in the free tier) (free-plan key)
- Sportmonks: the Danish Superliga league record (in the free plan) (free-plan key)
- API-Football (API-Sports): Premier League 2024 standings (the free plan only allows older seasons) (free-plan key)
- Highlightly: the first 5 leagues in its league list (free-plan key)
- TheSportsDB: the current Premier League table, with the public test key (no key)
- OpenLigaDB: the current Bundesliga table (no key)
- StatsBomb Open Data (Hudl): the competitions index of its open data on GitHub (no key)
What it proves: that day, the free tier (or keyless endpoint) answered one request with real data for a competition it covers.
What it doesn't: paid-plan coverage, other leagues or endpoints, data freshness or accuracy, uptime, or the speed you'd get. It's one call from Cloudflare's network once a day, not monitoring.
The other 10 providers only get the page reachability check above: a real test would need a trial or a paid plan, and we don't use either.
API-Football's free plan currently shows an end date of 2027-10-19 on its account status. Results: provider pages ("Live API check: OK today"), checks.json (liveApi) and the MCP provider_health tool. Endpoints and fields
Spotted an error?
Email hello@footballapis.com with the page and what's wrong. We re-check it on the vendor's page, fix it and log it in the changelog.