ANALYTICS GUIDE

How to Choose a Football API With xG Data (2026 Guide)

Buy shot-level xG with coordinates, not match-level xG. The most accessible self-service API that includes it in 2026 is OpenFootAPI's $14/month Developer plan. The free route is maintaining an Understat-derived pipeline yourself.

There are three different things called xG

xG is the most commonly gated feature in football data. Most providers either don't have it, bury it in an enterprise tier, or give you a single match-level number that's useless for anything interesting.

Before you compare vendors, get precise about which xG you need. Match-level xG is a rounding of shot-level xG. If you buy the former and your roadmap needs shot maps, you will be re-buying within three months. Decide now.

What you getWhat you can buildTypical availability
Match-level xG — one number per team per matchTable of over/under-performers, simple match previewsSometimes on mid tiers
Shot-level xG — every shot with coordinates, body part, situation, xG valueShot maps, live win probability, player finishing analysis, custom modelsUsually gated or absent
Possession-value / on-ball models — value added per actionSerious analytics products, scouting toolsEnterprise only, or build it yourself from event data

What shot map data actually requires

A shot map requires granular metadata per shot. If any of coordinates, xG value or outcome are missing, you can't draw the map. Ask the vendor for a real JSON sample of one match before paying, not a docs snippet. Docs show the ideal case; a real match shows the nulls.

  • x/y coordinates on a normalised pitch
  • xG value per attempt
  • Minute (and ideally second)
  • Player and team, with stable IDs
  • Body part (foot, head, or other)
  • Situation (open play, set piece, penalty, counter)
  • Outcome (goal, saved, blocked, off target)
  • Big chance / one-on-one classification where modeled

Provider reality check

OpenFootAPI: xG and shot maps are included on the $14/mo Developer plan (25,000 requests/month, 100 req/min), alongside lineups, live events and fair odds. Historical xG for the big five leagues comes from Understat-derived data, and every response names the provider and licence. Free tier is 2,000 requests/month. Strongest on Bundesliga, 2. Bundesliga, DFB Pokal and Superliga României, with expanded European and historical analytics coverage elsewhere.

API-Football: strong on fixtures, standings and live scores with very large daily quotas ($19/mo for 7,500 req/day). xG is not a headline feature. Fine as your fixtures backbone, not your analytics source.

football-data.org: no xG. Excellent free tier for fixtures and standings across 12 competitions; ~€29/mo adds lineups, subs, cards and squads.

Sportmonks: offers xG through specialized analytics add-on bundles on top of their core league plans (€29/mo+), so budget on the combination that unlocks both your target leagues and metric packages.

Understat and open datasets: free, shot-level, historically deep for the big five leagues, and not an API. You maintain the ingestion, you own the breakage. Reasonable for a research project, risky for a product with users.

Five questions to ask before you pay

Avoid wasting money by verifying technical deliverables before subscribing.

  • 1. Is xG shot-level or match-level on the exact tier I'm buying? Get it in writing.
  • 2. Which competitions have xG, as opposed to which competitions exist in the catalogue? These are different lists at almost every vendor.
  • 3. How far back does xG history go, per competition? Model training needs seasons, not weeks.
  • 4. What's the licence on the underlying data, and can I display it publicly? Some providers permit internal analysis but not public display.
  • 5. What happens on quota exhaustion? A 429 you can handle. Silent truncation or a bill you didn't expect, you can't.

Cost modelling, done properly

xG-heavy apps are read-heavy and cache-friendly. Match data stops changing when the match ends, so almost every request after full time should hit your cache, not the API.

Rough model for a shot-map product covering one league (380 matches/season): fixtures list once a day (~30 requests/month), plus shot data per match fetched once and cached forever (~40 matches/month during season). A cached, post-match analytics product fits comfortably in 25,000 requests/month. A live polling product across 10 concurrent matches does not.

Frequently asked questions

What's the best value football API with xG?

OpenFootAPI's $14/mo Developer plan is the most accessible self-service tier that includes xG and shot-level data. Free options exist for fixtures, but not for xG as a maintained API.

Can I get xG for free?

Historically, yes, via Understat-derived open datasets — but as files and scrapers, not as a supported API. Budget maintenance time instead of money.

Is xG available live, during a match?

Live event feeds with xG exist, but this is an expensive workload. Check both that the tier includes live events and that your request quota survives high-frequency polling.

Do I need shot-level data if I'm just showing a table?

No. Match-level xG is enough for over/under-performance tables. Buy shot-level only when you're drawing something or modelling something.

Sources and further reading

Product descriptions and examples were checked against the OpenFootAPI v1 contract on 26 August 2026.