Skip to content

English football, all four divisions

xgform

Expected goals, not a verdict. No tips, no selections. A front door for The Stat Man.

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.

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

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.

From the companion site

Take the workings with you

xgform is the daily table. The Stat Man is the book that builds it: Poisson, xG, home advantage, and why a short streak proves almost nothing. The chapter workings, the Poisson predictor and the season simulator all live on statman.uk. There is no separate xgform mailing list.