History back to 2011
1,090,118 matches from 2011 to this week, the finished ones carrying half-time and full-time scores. Backfill a stats page or a model in one pass instead of scraping season by season.
1M+ soccer matches since 2011 — fixtures with half-time and full-time scores across 3,742 competitions in 158 countries, each one the same clean JSON object. A plain REST API, and a free key to start.
halftime and fulltime, as integers or null. Never an empty string.
Hover or tap the scoreboard. Each field is one key.
Read from GET /stats · refreshed every 6 hours · last sync 22 min ago
One archive, one schema, one key. What follows is what it does for you — and, just as plainly, what it does not.
1,090,118 matches from 2011 to this week, the finished ones carrying half-time and full-time scores. Backfill a stats page or a model in one pass instead of scraping season by season.
Lower tiers, cups, youth and women's football as well as the leagues everyone covers. Check how deep a competition goes before you build on it.
The same match object from every endpoint that returns one. Match ids never change, scores are integers or null — never an empty string standing in for a number.
Every kickoff is ISO-8601 in UTC, and date filters are UTC days. No guessing which timezone a feed meant.
GET and JSON. One header carries your key, page and per_page walk a list, and the docs have curl, JavaScript and Python to paste.
Updated several times a day and run best-effort, with no SLA dressed up as one. The docs say where coverage is thin.
Best-effort · several updates a day · no SLA
Four steps from sign-up to JSON. Call from your server — a key in browser code is a key anyone can read.
X-API-KeyEvery plan reaches the whole archive. Plans differ in how many requests you can make, and in support.
Anything else goes to contact@goalschema.com. The docs cover authentication, errors and where coverage is thin.
Football results: fixtures with half-time and full-time scores, plus the competitions and teams they belong to, from 2011 onward, compiled from third-party sources. No prices, lineups or player statistics.
Finished matches usually appear within a few hours of full time. Updates run several times a day, on a best-effort basis.
Yes. You can display it in your own products, commercial ones included. You can't resell, mirror or republish it as a dataset, feed or API.
No, on any plan. The service is best-effort, with no promised uptime.
You get a 429 with Retry-After, and an error code that says whether you hit the per-minute limit or the daily quota. The day resets at 00:00 UTC. Caching on your side means you'll rarely reach it.
Developer is self-serve: create a free account, confirm your email, then upgrade from Billing in the console. Polar, the merchant of record, takes payment and handles sales tax or VAT. Cancel anytime; the plan runs to the end of the paid month.
The full archive and every endpoint, 1,000 requests a day. Upgrade when it's in production.