ON-DEMAND DATA EXTRACT

Historical xG for one competition — delivered in 48 hours

$89, one-off. No subscription, no API integration, no rate limits. You send the competition and the seasons; you get a CSV and a notebook back.

If the data isn't there, you get a full refund and I say so before delivery, not after.

What you get

  • Shot-level xG for every match in the chosen competition and seasons (coordinates, body part, situation, xG per shot)
  • A match-level table with xG for, xG against and over/under-performance vs actual goals
  • A CSV with stable IDs you can join to your own data
  • A Jupyter notebook that loads the CSV and reproduces the three most common tables
  • Provider and licence named in writing

How it works

  1. 1) Pay $89 and fill the short form with your competition and season requirements.
  2. 2) I extract, sanity-check and package it — if a season is thin or missing, I tell you before billing anything else.
  3. 3) Delivery within 48 hours by email, as a clean, ready-to-use zip file.

Coverage

Deepest coverage is Bundesliga, 2. Bundesliga, DFB Pokal and Superliga României. Historical xG is also available for the Premier League, La Liga, Serie A and Ligue 1 (Understat-derived).

Ask before you buy if your league isn't listed — the 75-competition catalogue is broader than the deep coverage.

This service is not for:

  • Live or in-play data
  • Anything you need refreshed daily (that's the $14/month API)
  • Leagues outside the list above
  • Anything requiring a signed data-licence agreement

If the data isn't there, you get a full refund and I say so before delivery, not after.