FreeAPI.watch

Free Sports APIs in 2026 — Compared

Three usable free tiers. All of them are for fixtures and history, none of them for live.

Quick answer:

For football accuracy — tables, fixtures, scorers across 12 competitions: football-data.org. For multi-sport breadth and team badges: TheSportsDB. For NBA box scores back to 1946: balldontlie. For live in-play data: nothing free works, and it is worth saying plainly.

Sports data is the most gated of the media categories, for an obvious reason: the underlying rights are worth real money, so the free layer is whatever the rights holders do not mind you having. ESPN shut down its public API in 2014 and never replaced it — the undocumented endpoints powering its own front end are still reachable and widely abused, with no terms, no versioning and no notice before they change. stats.nba.com blocks datacenter IP ranges, so the NBA's own public stats work from your laptop and fail from every cloud host you would deploy to. That single fact is why balldontlie exists.

What survives is a small, honest set of free options for the parts of sports data that nobody sells at a premium: fixtures, standings, squads and historical results. Live status and 30-day uptime for all three are on the sports category page, measured the way we describe in our methodology.

Comparison

API Free tier Auth Rate limit Best for
TheSportsDB Shared test key; Patreon key for production Test key 3 (dev only) Shared and unpredictable Many sports, badges and imagery
football-data.org 12 competitions on a free key X-Auth-Token header 10 req/min Accurate football tables and fixtures
balldontlie Free account key since 2024 Free account key 5 req/min NBA box scores back to 1946

The providers

1. TheSportsDB

Free tier: A globally shared test key (the literal value 3) for development; a Patreon-backed key at a few dollars a month for anything real
Auth: Shared test key
Rate limit: Unpublished and shared — throughput depends on who else is using the test key that hour
Coverage: Leagues, teams, players, fixtures and results across football, basketball, American football, motorsport and dozens of smaller sports, plus badges, jerseys and stadium photography
Best for: Multi-sport breadth and imagery — the only free source of a usable badge for every club in a mid-table European league

The imagery is the real differentiator; free sports APIs that hand you a clean crest for an obscure club essentially do not exist otherwise. The access model is where people get burned. The test key 3 that appears in every tutorial is a single globally shared credential. Everyone's traffic lands in the same bucket, so latency swings wildly, 429s arrive at random times of day, and endpoints get disabled for the test key without notice. Fine while you build; shipping it makes your uptime a function of how many strangers are hitting it that hour. Two more things. v1 and v2 are different APIs rather than versions of one design — v2 moved the key into an X-API-KEY header, renamed endpoints and changed response envelopes, and search results still surface v1 examples heavily, so copy-pasted snippets fail confusingly against a v2 key. And naming is crowd-sourced: the same club appears as Manchester United, Man United and Manchester Utd depending on which league record you read, with no alias table. Join on the numeric idTeam, and mirror any badge you display to your own storage, because contributor-uploaded assets get replaced and 404.

Live status and 30-day uptime →  ·  TheSportsDB docs ↗

2. football-data.org

Free tier: Free key, issued instantly, covering 12 competitions including the Premier League, La Liga, Serie A, Bundesliga, Ligue 1, the Champions League and the World Cup
Auth: Free key
Rate limit: 10 requests/minute, with remaining budget in a response header
Coverage: Fixtures, results, standings, squads and scorer tables — properly maintained rather than crowd-sourced
Best for: League tables, fixture calendars, fantasy tools, and bots that post results

The most credible free football API, and the one to reach for anywhere correctness matters more than breadth. Authentication is the X-Auth-Token request header — there is no api_key query parameter, and passing one fails. That also means anything unable to set custom headers, such as an image tag, a bare browser URL or a webhook that only accepts a URL, needs a proxy. The pitfall that costs the most time: the free tier gates competitions, and the gate returns 403 rather than 404. Query the Eredivisie or the Championship with a free key and you get a permission error indistinguishable at the status-code level from a bad token, which sends people re-issuing keys that were never the problem. Read the message body — it names the restriction explicitly. Every response carries an X-Requests-Available-Minute header telling you exactly how many calls remain in the window, so read it rather than guessing; a page rendering standings plus fixtures plus scorers is three calls before you add a second competition. Cache tables for at least a minute — they do not change faster than that outside match hours, and in-play data is delayed on the free tier anyway.

Live status and 30-day uptime →  ·  football-data.org docs ↗

3. balldontlie (NBA)

Free tier: Free tier requires an account key since 2024 — the API was fully open before that and a lot of old tutorials still say so
Auth: Free account key
Rate limit: 5 requests/minute on the free tier
Coverage: NBA teams, players, games and box scores going back to the 1946 season, with season averages and per-game statistics
Best for: Historical NBA analysis, stat lookups, fantasy tools that can tolerate a slow refresh

balldontlie exists because stats.nba.com blocks datacenter IPs. The NBA's own stats endpoints are technically public and practically unusable from any cloud host: requests from AWS, Google Cloud, Fly or Vercel get dropped or fed captive responses, and the header-spoofing workarounds circulating on GitHub break every few months. balldontlie does that scraping and normalizing on its own infrastructure and serves clean JSON, which is worth a great deal even at five requests a minute. That limit is the binding constraint and it is genuinely tight — a page fanning out per-player stat requests is unusable, so pull game-level and season-average endpoints that return many rows at once, then cache. The 2024 move from fully open to account-key-required also gated the deepest statistical endpoints behind paid tiers, so check which fields your query actually returns on the free plan before building a UI around them. For anything beyond the NBA, this is not your API.

Live status and 30-day uptime →  ·  balldontlie (NBA) docs ↗

Live in-play sports data is essentially never free, and any product that promises live scores needs a paid feed — plan for that cost before you write a line of code. This is the single most common way a sports side project dies: the fixtures and standings come together in an afternoon on a free tier, the demo looks great, and then the live score requirement turns out to sit behind a subscription that costs more than the project was ever going to earn.

The reason is structural. Real-time event data comes from paid in-stadium collection — people and systems watching the match and emitting events within seconds — and that collection is what the commercial feeds sell. Free tiers get the derivative: the fixture list before, the result after. The self-serve paid answers are API-Sports, whose API-FOOTBALL product starts free at 100 requests a day and scales into plans covering 1,100+ competitions with live coverage and odds, and Sportmonks, which sells per-league packages with in-play events. Both are priced like the licensed data they are.

Two patterns worth copying

Pattern 1 — Cache the table, poll only the match

Ten requests a minute sounds tight until you notice almost nothing in football data changes minute to minute. Standings, squads, scorer tables and fixture lists are safely cacheable for the whole day outside match hours. Fetch them on a schedule into your own store and serve every user request from it, so your budget is a function of how many competitions you track rather than how many visitors you have. Read X-Requests-Available-Minute on every response and let it drive backoff rather than a hardcoded sleep — it tells you the truth about the window you are actually in.

Pattern 2 — football-data for truth, TheSportsDB for pixels

The most common working combination. Take fixtures, results and standings from football-data.org, where the data is maintained and correct. Take crests, jerseys and stadium photography from TheSportsDB, where nothing else free comes close. Join the two on team name once, by hand, into a small mapping table — a few dozen rows per league, and it permanently defuses the crowd-sourced naming inconsistency — then mirror every image you display into your own storage so a contributor replacing a badge upstream does not put a broken image in your UI.

Frequently Asked Questions

What is the best free sports API?

It depends on the sport. For football, football-data.org is the most accurate free option and covers 12 major competitions with a free key. For NBA data, balldontlie is effectively the only usable free source. For breadth across many sports plus team badges and imagery, TheSportsDB is the answer, provided you pay a few dollars a month for a real key rather than shipping the shared test key.

Is there a free API for live football scores?

Not a real-time one. football-data.org returns match status and scores on its free tier but in-play updates are delayed, so a bot posting goals will be visibly behind social media. Genuine minute-by-minute in-play data is a paid product everywhere — API-FOOTBALL, Sportmonks and the commercial feeds behind them. Free tiers are for fixtures, standings and post-match results.

Is there an ESPN API?

Not a supported one. ESPN shut down its public developer API in 2014. The undocumented site.api.espn.com endpoints that power its own front end are still reachable and widely used, but there is no documentation, no terms granting you access, no versioning and no notice before they change. Do not build anything you care about on them.

Can I use the NBA stats API directly?

In principle, and almost never in practice. stats.nba.com is public but blocks datacenter IP ranges, so requests from AWS, Google Cloud, Vercel or Fly get dropped or served captive responses even when the same request works from your laptop. The header-spoofing workarounds circulating on GitHub break every few months. balldontlie exists precisely to do that scraping on your behalf and serve clean JSON.

Which sports API works without an API key?

None of the good ones, any more. TheSportsDB's test key 3 is close, but it is a single credential shared globally, so it is a development convenience rather than keyless access. football-data.org and balldontlie both require a free key that arrives instantly. Compared with movie and music APIs, sports data is noticeably more gated, because the underlying rights are worth money.

When do I need a paid sports API?

The moment live in-play data, betting odds, deep historical seasons or the long tail of smaller leagues becomes load-bearing. API-Sports and its API-FOOTBALL product start free at 100 requests a day and scale into paid plans covering 1,100+ competitions with live coverage; Sportmonks sells per-league packages with in-play and detailed event data. If your product promises live scores, you are buying a feed.

Related on FreeAPI.watch

Last reviewed: August 2026. Free-tier terms verified against provider docs. Spotted a change? Tell us.