Provenance
About the data
Checked 12 November 2026 at 13:38. Newest finished match in the tables: 8 November 2026 at 16:30. Season 2026/2027.
One publication, and why
The numbers come from FotMob. Chapter 19’s rule is the reason there is only one: providers disagree more on a single shot than on a season, and mixing them mid-season changes the definition of the thing being measured. xgform does not average FotMob with anyone else, and it does not fill a hole with a second model.
FotMob tags the underlying feed per competition. On the morning this pipeline was proved, 12 November 2026, that tag was opta for the Championship, League One and League Two, and enet for the Premier League. Those are different labels. Each league on this site is its own closed model. A League Two xG and a Premier League xG are not on a ruler you can lay across both divisions.
- Premier Leagueenet · 100 matches with xG · home 1.57 · away 1.36 · table check 0.008
- Championshipopta · 180 matches with xG · home 1.59 · away 1.34 · table check 0.011
- League Oneopta · 158 matches with xG · home 1.56 · away 1.41 · table check 0.004
- League Twoopta · 164 matches with xG · home 1.60 · away 1.22 · table check 0.005
The table check is the median absolute gap, in expected goals, between a club’s summed match xG and the season xG total FotMob prints on the league table. A small number means the match feed and the table are the same series.
What is a count, and what is a model
- Counts. Results, goals, dates, home and away, points, the league position. These come from the match that was played.
- FotMob’s model. xG for, xG against, and the match xG behind them. Shot locations exist on the same feed. This version does not publish a shot map, and it does not fit a private xG model on top. That would be a second series.
- This site’s model. xG difference, goals minus xG, home and away rates, the shrunk attack and defence ratings, lambda and mu, the 1X2 probabilities, over 2.5, both teams to score, the fair fractional odds, and the regression flags. Fair odds already have the margin off. They are not a bookmaker’s price.
How a price is made
League home xG and league away xG are the averages of the matches we have. A club’s home attack is its home xG for per match, divided by the league home average. Its home defence is home xG against per match, divided by the league away average. The same idea, swapped, gives the away ratings. Four phantom matches at the league average are mixed in first, so a tiny home sample cannot run away with the price. Lambda, the home goal expectancy, is league home xG times home attack times away defence. Mu is the away twin. Those two numbers go into an independent Poisson matrix, goals from 0 to 12, and the cells are added up into home, draw and away. Chapter 17’s low-score correction is not applied. The page says so.
Flags
From matchweek 8, and only for a club with at least eight matches, a flag appears when goals and xG differ by six or more and by at least 0.40 a match. The words are “ahead of xG” and “behind xG”. They are not a verdict, and they are not a bet.
If the morning pull fails
Each run checks the shape of the data: the right number of clubs, sane xG, and that the summed matches still agree with the league table. If a run fails those checks, or crashes, yesterday’s published file is left where it is. The site does not half-update. Repeated failures and stale tables can ping a webhook. The mechanism is in the README for whoever is pointing the domain.
A second source was not available for all four divisions from a server on 12 November 2026. FBref was behind a bot challenge, and its Opta xG had already been removed in January 2026. Understat was returning a holding page and has never covered the EFL. Sofascore answered 403. The fallback is therefore the same publication by its public league pages if the JSON route fails, and, if that fails too, yesterday’s file. Switching provider would be a decision for a new season, not a patch in November.