The Justice Table
Each of Europe's top five league tables rebuilt on expected points over the last 12 months. A club's expected points are what its chances, and its opponents' chances, were worth match by match; the table sorts on them, with the rank on real points alongside. Gap is points minus expected points: positive means results have been kinder than the play. Biggest gaps: Rennes (+14.7, Ligue 1), Barcelona (+14.4, La Liga), Lazio (+13.3, Serie A). Furthest behind: Tottenham (-18.4, Premier League), Athletic Club (-13.9, La Liga), Osasuna (-13.6, La Liga).
Premier League justice table, last 12 months
| xPos | Club | Pos | P | W | D | L | GF | GA | Pts | xPts | Gap |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Arsenal | 1 | 36 | 25 | 6 | 5 | 66 | 29 | 81 | 74.9 | +6.1 |
| 2 | Manchester City | 2 | 36 | 24 | 8 | 4 | 76 | 34 | 80 | 69.9 | +10.1 |
| 3 | Manchester United | 3 | 37 | 18 | 13 | 6 | 69 | 48 | 67 | 61.5 | +5.5 |
| 4 | Liverpool | 7 | 37 | 14 | 12 | 11 | 57 | 51 | 54 | 58.8 | -4.8 |
| 5 | Brentford | 5 | 37 | 14 | 14 | 9 | 58 | 46 | 56 | 57.5 | -1.5 |
| 6 | Bournemouth | 13 | 36 | 9 | 18 | 9 | 51 | 56 | 45 | 57.0 | -12.0 |
| 7 | Brighton | 6 | 36 | 15 | 9 | 12 | 58 | 40 | 54 | 54.5 | -0.5 |
| 8 | Chelsea | 9 | 36 | 13 | 9 | 14 | 57 | 56 | 48 | 54.1 | -6.1 |
| 9 | Leeds | 8 | 36 | 11 | 15 | 10 | 50 | 48 | 48 | 51.8 | -3.8 |
| 10 | Aston Villa | 4 | 37 | 18 | 7 | 12 | 56 | 53 | 61 | 49.2 | +11.8 |
| 11 | Tottenham | 17 | 37 | 6 | 12 | 19 | 38 | 61 | 30 | 48.4 | -18.4 |
| 12 | Nottingham Forest | 14 | 36 | 11 | 11 | 14 | 48 | 44 | 44 | 46.9 | -2.9 |
| 13 | Everton | 10 | 36 | 12 | 12 | 12 | 46 | 46 | 48 | 45.8 | +2.2 |
| 14 | Newcastle United | 11 | 35 | 14 | 6 | 15 | 55 | 57 | 48 | 45.4 | +2.6 |
| 15 | Crystal Palace | 16 | 36 | 10 | 9 | 17 | 38 | 55 | 39 | 44.2 | -5.2 |
| 16 | Fulham | 12 | 36 | 13 | 7 | 16 | 45 | 49 | 46 | 43.5 | +2.4 |
| 17 | Sunderland | 15 | 36 | 11 | 11 | 14 | 39 | 54 | 44 | 40.5 | +3.5 |
La Liga justice table, last 12 months
| xPos | Club | Pos | P | W | D | L | GF | GA | Pts | xPts | Gap |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Barcelona | 1 | 37 | 32 | 0 | 5 | 105 | 33 | 96 | 81.6 | +14.4 |
| 2 | Real Madrid | 2 | 38 | 26 | 5 | 7 | 77 | 34 | 83 | 78.0 | +5.0 |
| 3 | Villarreal | 4 | 37 | 19 | 6 | 12 | 69 | 49 | 63 | 61.8 | +1.2 |
| 4 | Atletico Madrid | 3 | 37 | 23 | 3 | 11 | 64 | 42 | 72 | 59.1 | +12.9 |
| 5 | Real Betis | 5 | 37 | 17 | 12 | 8 | 58 | 47 | 63 | 57.5 | +5.5 |
| 6 | Athletic Club | 14 | 36 | 11 | 7 | 18 | 41 | 55 | 40 | 53.9 | -13.9 |
| 7 | Osasuna | 13 | 37 | 10 | 10 | 17 | 45 | 59 | 40 | 53.6 | -13.6 |
| 8 | Rayo Vallecano | 8 | 37 | 12 | 14 | 11 | 44 | 50 | 50 | 53.3 | -3.3 |
| 9 | Real Sociedad | 7 | 38 | 14 | 12 | 12 | 64 | 64 | 54 | 53.2 | +0.8 |
| 10 | Alaves | 11 | 38 | 11 | 10 | 17 | 47 | 56 | 43 | 53.0 | -10.0 |
| 11 | Celta Vigo | 6 | 38 | 15 | 11 | 12 | 54 | 44 | 56 | 50.4 | +5.6 |
| 12 | Valencia | 10 | 38 | 12 | 10 | 16 | 42 | 56 | 46 | 49.3 | -3.3 |
| 13 | Levante | 16 | 36 | 10 | 9 | 17 | 42 | 59 | 39 | 43.8 | -4.8 |
| 14 | Espanyol | 15 | 37 | 10 | 9 | 18 | 41 | 55 | 39 | 40.0 | -1.0 |
| 15 | Elche | 17 | 38 | 8 | 12 | 18 | 49 | 65 | 36 | 40.0 | -4.0 |
| 16 | Getafe | 9 | 38 | 14 | 6 | 18 | 27 | 37 | 48 | 40.0 | +8.0 |
| 17 | Sevilla | 12 | 36 | 12 | 7 | 17 | 40 | 55 | 43 | 38.7 | +4.3 |
| 18 | Deportivo La Coruna | 18 | 8 | 2 | 4 | 2 | 12 | 11 | 10 | 9.9 | +0.1 |
| 19 | Racing Santander | 19 | 8 | 2 | 2 | 4 | 13 | 23 | 8 | 9.1 | -1.1 |
| 20 | Malaga | 20 | 8 | 0 | 4 | 4 | 4 | 13 | 4 | 6.1 | -2.1 |
Bundesliga justice table, last 12 months
| xPos | Club | Pos | P | W | D | L | GF | GA | Pts | xPts | Gap |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Bayern Munich | 1 | 32 | 24 | 7 | 1 | 111 | 36 | 79 | 72.2 | +6.8 |
| 2 | Borussia Dortmund | 2 | 32 | 22 | 6 | 4 | 68 | 32 | 72 | 60.5 | +11.5 |
| 3 | RasenBallsport Leipzig | 3 | 32 | 18 | 4 | 10 | 71 | 43 | 58 | 59.8 | -1.8 |
| 4 | Bayer Leverkusen | 5 | 32 | 16 | 7 | 9 | 66 | 44 | 55 | 57.5 | -2.5 |
| 5 | Hoffenheim | 4 | 33 | 17 | 6 | 10 | 65 | 53 | 57 | 53.8 | +3.2 |
| 6 | Mainz 05 | 9 | 32 | 11 | 10 | 11 | 49 | 49 | 43 | 51.9 | -8.9 |
| 7 | VfB Stuttgart | 6 | 32 | 15 | 8 | 9 | 68 | 52 | 53 | 49.8 | +3.2 |
| 8 | Freiburg | 7 | 33 | 15 | 7 | 11 | 56 | 52 | 52 | 47.0 | +5.0 |
| 9 | Union Berlin | 13 | 32 | 8 | 9 | 15 | 38 | 61 | 33 | 42.3 | -9.3 |
| 10 | Eintracht Frankfurt | 10 | 33 | 9 | 13 | 11 | 53 | 65 | 40 | 42.2 | -2.2 |
| 11 | FC Cologne | 15 | 32 | 6 | 10 | 16 | 45 | 63 | 28 | 40.9 | -12.9 |
| 12 | Augsburg | 8 | 32 | 12 | 8 | 12 | 46 | 55 | 44 | 38.4 | +5.6 |
| 13 | Borussia M.Gladbach | 12 | 32 | 9 | 8 | 15 | 43 | 56 | 35 | 36.4 | -1.4 |
| 14 | Werder Bremen | 14 | 32 | 8 | 8 | 16 | 36 | 54 | 32 | 35.9 | -3.9 |
| 15 | Hamburger SV | 11 | 32 | 9 | 9 | 14 | 38 | 59 | 36 | 32.1 | +3.9 |
Serie A justice table, last 12 months
| xPos | Club | Pos | P | W | D | L | GF | GA | Pts | xPts | Gap |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Inter | 1 | 37 | 27 | 7 | 3 | 89 | 35 | 88 | 81.7 | +6.4 |
| 2 | Juventus | 6 | 38 | 19 | 11 | 8 | 61 | 34 | 68 | 81.2 | -13.2 |
| 3 | Como | 2 | 38 | 21 | 10 | 7 | 67 | 30 | 73 | 70.8 | +2.2 |
| 4 | Roma | 3 | 37 | 22 | 6 | 9 | 66 | 31 | 72 | 67.7 | +4.3 |
| 5 | AC Milan | 5 | 38 | 19 | 12 | 7 | 55 | 37 | 69 | 62.6 | +6.4 |
| 6 | Napoli | 4 | 37 | 21 | 8 | 8 | 56 | 35 | 71 | 61.4 | +9.6 |
| 7 | Atalanta | 8 | 37 | 15 | 10 | 12 | 45 | 38 | 55 | 56.0 | -1.0 |
| 8 | Bologna | 9 | 38 | 14 | 9 | 15 | 45 | 48 | 51 | 53.1 | -2.1 |
| 9 | Fiorentina | 15 | 38 | 10 | 13 | 15 | 44 | 56 | 43 | 49.8 | -6.8 |
| 10 | Lazio | 7 | 38 | 17 | 12 | 9 | 42 | 37 | 63 | 49.7 | +13.3 |
| 11 | Genoa | 14 | 38 | 11 | 10 | 17 | 43 | 53 | 43 | 47.5 | -4.5 |
| 12 | Sassuolo | 11 | 37 | 13 | 8 | 16 | 48 | 52 | 47 | 46.8 | +0.2 |
| 13 | Torino | 16 | 36 | 11 | 8 | 17 | 43 | 58 | 41 | 44.5 | -3.5 |
| 14 | Udinese | 12 | 37 | 13 | 7 | 17 | 47 | 50 | 46 | 43.8 | +2.2 |
| 15 | Cagliari | 10 | 38 | 13 | 9 | 16 | 40 | 50 | 48 | 42.2 | +5.8 |
| 16 | Lecce | 17 | 37 | 11 | 5 | 21 | 29 | 52 | 38 | 32.8 | +5.2 |
| 17 | Parma Calcio 1913 | 13 | 38 | 11 | 11 | 16 | 29 | 49 | 44 | 32.6 | +11.4 |
Ligue 1 justice table, last 12 months
| xPos | Club | Pos | P | W | D | L | GF | GA | Pts | xPts | Gap |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Paris Saint Germain | 1 | 32 | 22 | 4 | 6 | 67 | 27 | 70 | 70.3 | -0.3 |
| 2 | Lens | 2 | 33 | 20 | 4 | 9 | 67 | 39 | 64 | 64.7 | -0.7 |
| 3 | Lille | 3 | 33 | 19 | 6 | 8 | 47 | 31 | 63 | 53.3 | +9.7 |
| 4 | Toulouse | 11 | 33 | 10 | 11 | 12 | 45 | 45 | 41 | 50.8 | -9.8 |
| 5 | Lyon | 5 | 32 | 16 | 8 | 8 | 53 | 36 | 56 | 48.3 | +7.7 |
| 6 | Marseille | 7 | 32 | 14 | 5 | 13 | 51 | 46 | 47 | 48.2 | -1.2 |
| 7 | Monaco | 6 | 32 | 16 | 6 | 10 | 53 | 46 | 54 | 47.5 | +6.5 |
| 8 | Rennes | 4 | 33 | 19 | 5 | 9 | 60 | 48 | 62 | 47.3 | +14.7 |
| 9 | Paris FC | 9 | 33 | 11 | 12 | 10 | 43 | 41 | 45 | 46.7 | -1.7 |
| 10 | Brest | 12 | 33 | 10 | 9 | 14 | 44 | 53 | 39 | 45.7 | -6.7 |
| 11 | Strasbourg | 10 | 32 | 12 | 8 | 12 | 52 | 49 | 44 | 42.9 | +1.1 |
| 12 | Lorient | 8 | 33 | 11 | 13 | 9 | 45 | 41 | 46 | 42.5 | +3.5 |
| 13 | Auxerre | 14 | 33 | 8 | 10 | 15 | 37 | 50 | 34 | 38.9 | -4.8 |
| 14 | Nice | 16 | 32 | 6 | 11 | 15 | 30 | 53 | 29 | 35.3 | -6.3 |
| 15 | Le Havre | 15 | 32 | 6 | 13 | 13 | 26 | 36 | 31 | 33.4 | -2.4 |
| 16 | Angers | 13 | 32 | 10 | 7 | 15 | 32 | 46 | 37 | 31.3 | +5.7 |
How it is measured
Expected points come from Understat, which turns the xG of both sides in a match into win, draw and loss probabilities and scores them 3, 1 and 0. A match a side would win 60% of the time and draw 20% of the time is worth 2.0 expected points. Summed over the season they give the points a club's chances, and its opponents' chances, deserved. The window is a rolling 12 months of league matches, or 6 on the toggle, so it spans the end of last season and the start of this one; a club needs 8 matches in the window and a place in the division this season to appear. Each table is sorted on expected points, the justice order. Pos is the club's rank on real points over the same window, not its league position. Gap is points minus expected points. Data covers the Premier League, La Liga, Bundesliga, Serie A and Ligue 1 and refreshes every Monday; expected points count penalties, as xG does.
What the table means
The name comes from the clubs in Christoph Biermann's Football Hackers, Midtjylland and Brentford among them, which judged themselves on expected points because the real table lies for long stretches. It still does. In 2025/26, the average club finished 2.1 places from its expected-points position, 64 of 96 finished within two places of it, and the largest points gap was Pisa at -21.1. Read a large positive gap as results running ahead of the play, and a large negative one as the reverse. Whether the market has priced that in is a separate question; the closing prices for every match are in Closing Lines.
Questions
What is a justice table?
A league table sorted on expected points instead of points. It shows where each club would sit if its results matched the quality of the chances it created and allowed, with its real position alongside.
What are expected points (xPts)?
The points a club was likely to take from a match given the xG of both sides: the win, draw and loss probabilities scored 3, 1 and 0 and added up. Over a season they show what the play was worth, separate from what the results delivered.
Which teams are overachieving their expected points right now?
As of matches to 11 Oct 2026, the clubs furthest above their expected points over the last 12 months across the top five leagues are Rennes (+14.7, Ligue 1), Barcelona (+14.4, La Liga), Lazio (+13.3, Serie A). Their results have run ahead of their play.
Which teams are underachieving their expected points?
As of matches to 11 Oct 2026, the clubs furthest below their expected points over the last 12 months are Tottenham (-18.4, Premier League), Athletic Club (-13.9, La Liga), Osasuna (-13.6, La Liga). Their play has been worth more than their results.
Why a rolling 12 months rather than the league table?
Five or six matches into a season the gaps are mostly noise. Twelve months of league matches, about 34 to 38 per club, is enough for expected points to mean something, and the window moves on every week. A 6-month view is on the toggle.
How often is the justice table updated?
Every Monday at 03:30 UTC from Understat, covering the current and previous season so the 12-month window is always complete.