State of Play
Chelsea's estimated squad cost ratio is 76.5% against the Premier League's 85% limit for clubs outside Europe, leaving roughly £55.9m/yr of cost headroom. The summer 2026 window stands at £393.8m banked from sales against £394.8m committed on signings. Every figure here is this tracker's own estimate, built from published accounts and media reporting, as reported 3 Sept 2026.
The Clock — What’s Counting Down
6 SEP
~2 SEP · PREMIER LEAGUE
OCT 2026
30 JUN 2027 · ~ZERO-LOSS TARGET
The Six Regulations — Pass / Fail / Room Left
Quick Answers — Chelsea’s Finances in Plain English
Are Chelsea in trouble with FFP in 2026?
Domestically no, in Europe yes. Chelsea passed the Premier League’s PSR — helped by £275m of asset sales to sister companies — but breached UEFA’s football earnings and squad cost rules, paying ~£27.6m in fines to date under a four-year settlement with up to ~£53m more hanging. The hard part starts now: a near-zero-loss target for 2026/27 with no European revenue after finishing 10th.
What is Chelsea’s squad cost ratio right now?
Roughly 83% on this tracker’s estimates. Missing Europe means the Premier League’s softer 85% green line applies in 2026/27 rather than UEFA’s 70% — a cushion of only a couple of points, and the same cost base would sit ~13 points over the 70% wall if Chelsea return to Europe in 2027/28.
How much have Chelsea been fined by UEFA?
About £27.6m paid: the £26.7m (€31m) settlement of July 2025 for breaching both the football earnings rule and the squad cost ratio, plus £0.9m of July 2026’s £2.6m squad-cost fine (£1.7m suspended). Up to £51.8m more is conditional on hitting settlement targets through 2028/29.
Why did Chelsea sell players in June?
The settlement set a maximum UEFA-basis loss of €80m for the year to 30 June 2026, and analysts put Chelsea’s deficit at ~£140m before June. Sales landing inside FY26 — Andrey Santos (£50m, ~£40m profit), academy graduate Tyrique George (£18m, pure profit), Cucurella (£51.8m) — existed to close that gap.
Why did Garnacho leave for Villa on a loan?
Structure. UEFA treats opposite-direction transfers between the same clubs as a swap if concluded within 45 days on similar payment terms — which would poison the accounting around the record £117m Rogers purchase from Villa. A season loan with a £42.5m conditional obligation triggering next season sits outside the window. UEFA has reportedly issued both clubs a formal warning over inflated swaps.
Could Chelsea actually be banned from Europe?
It’s been reported as a live risk, not a certainty. The settlement demands ~break-even football earnings by FY27 and full FER compliance by 2028/29. Missing Europe removes £80m+ of annual revenue while the £214m amortisation bill keeps running — 2026 reporting described Chelsea as at “serious risk” of breaching the settlement, with a ban among UEFA’s available sanctions.
Incomings & Outgoings
Summer 2026 window (opened 15 June, closes 1 September — delayed by the World Cup). A deal enters this table at a medical and not before: ADVANCED means terms agreed and the medical taken or booked, DONE means a club has announced it. Anything short of that is interest, however well sourced, and interest lives on the Rumours tab. Fees per media reports; several deals were pre-agreed months or years in advance — the Chelsea way — and are flagged.
Summer 2026 — Out
| Player | To | Fee £m | Wage £k/wk | Cost freed £m/yr | Profit £m | Status |
|---|---|---|---|---|---|---|
Summer 2026 — In
| Player | From | Fee £m | Wage £k/wk | SCR cost £m/yr | Status |
|---|---|---|---|---|---|
2025/26 Season — In (Summer 25 + Jan 26)
| Player | From | Fee £m | Window |
|---|
2025/26 Season — Out
| Player | To | Fee £m | Window |
|---|
Spending Headroom
"Room" means three different things for Chelsea: the PL squad cost ratio (85% green line, season basis — the operative cap in 2026/27), UEFA's 76% ratio (dormant while out of Europe, instantly binding on return), and the FER settlement's near-zero-loss target (the real constraint, tested on the accounts). The model below is adjustable — the defaults are my estimates, so put your own numbers in.
The dormant gate — settlement transfer balance
The Fined Four — July 2026's CFCB Round, Compared
Four English clubs were fined in UEFA's July 2026 decisions. Same rulebook, very different situations — and very different exit routes.
| Club | 2026 Fine | Suspended | Breach | Settlement | Exit Route |
|---|---|---|---|---|---|
| Chelsea | £2.6m | £1.7m | SCR 2025 · repeat | 4-yr to 2028/29 · £26.7m paid 2025 · up to £51.8m conditional · FY27 target ~ZERO loss | Academy sales (pure profit) + the £758m trading machine — and now the Rogers/Garnacho tightrope with Villa |
| Aston Villa | £19.4m | £12.9m | SCR 2025 ("significant") · 2nd straight | 4-yr to 2028/29 · £9.5m paid 2025 · trend formally ENDORSED | £144m of player-sale profits incl. the £117m Rogers sale — to Chelsea |
| Newcastle | £2.6m + £8.6m | — | BOTH SCR and FER — the double | Obligations continue despite missing Europe | Isak to Liverpool for £125m — one sale to rule the FY25 accounts |
| Nottingham Forest | £2.2m | — | SCR | — | Anderson to City for £116m weeks later — fine dwarfed 53:1 by one transfer |
Annual constraint — squad cost ratio model
Squad cost = player & coach wages + transfer amortisation + agent fees. Denominator = football revenue + player-trading profit (3-yr average smoothing). Edit any figure:
What-if: add a signing
Rumour Mill
The window shut at 11pm on 1 September 2026, and this tab is now mostly history. Nothing below can become an incoming transfer until January: a registration cannot be lodged outside the window, so every inbound link here is closed rather than pending, however well sourced it was. Three things the deadline does not close, which is why the cards are kept live rather than swept away. Free agents — a player already out of contract can be signed and registered outside the window. Outgoing moves abroad — several leagues closed later than England, so a player could still leave after English clubs had stopped buying: the Saudi Pro League runs to 6 September, the Süper Lig closed on 4 September and MLS on 2 September. Seven cards on this site point at one of those and are still live; every other card is now marked JANUARY and priced as a January deal rather than one that can happen today. Academy moves — an under-18 joining on training compensation is not moving a professional registration and is not bound by this deadline. Cards are left in place because a rumour that died at the deadline is a record of what was reported and what it was worth, and deleting them would quietly improve this site’s hit rate. The tick-box model still works: a JANUARY card prices what the deal would cost when the window reopens, which is the question actually worth asking about a link that survived the summer.
Everything on this tab is short of a medical. That is the line: a deal that has reached one sits in the Ins & Outs table, and everything below it — an offer, an agreement in principle, personal terms with no fee agreed, a bid lodged — is here, counting towards nothing until it moves. Tick any combination of live rumours (fees and wages are my estimates of reported figures) and the panel at the bottom recalculates the effect on every rule: window transfer balance, the PL 76% ratio, the dormant UEFA 70%, FER earnings and settlement optics. Uses the same base assumptions as the Headroom tab, so tweaks there flow through here. Alonso has told BlueCo he wants "two or three smart signings rather than ten speculative ones", and has said he only wants four or five centre-backs. The Jackson exit he described on 5 August as "going day by day checking options" completed on 28 August and has moved to the Ins & Outs tab. Deals that have reached agreement or medical stage are NOT here — they sit on the Ins & Outs tab at their proper rung.
Incoming rumours
Outgoing rumours
Squad · Book Value & Amortisation
Senior squad after this summer's confirmed/advanced exits. Book value is computed live: straight-line amortisation of the reported fee from signing date to current contract end (extensions re-spread the remaining value — this is the standard treatment, and Chelsea's famous long contracts are why the book runs so deep). Wages are third-party estimates (Capology-style databases, cross-checked against contract reporting) — not official. Tap a column to sort.
| Player | Pos | Fee £m | Signed | Contract End | Yrs Left | Amort £m/yr | Book Value £m | Mkt Val £m | Profit If Sold £m | Est Wage £k/wk |
|---|---|---|---|---|---|---|---|---|---|---|
Amortisation Runway — What's Already Committed
Transfer-fee amortisation locked into future seasons from today's contracts (straight-line on remaining book value), plus the pending £34m Barco fee from FY27. This is spending that's already eaten before Chelsea buy anyone else — the long-contract strategy means the bars stay tall deep into the 2030s.
Premier League homegrown quota — 2026/27
Two ceilings, not one. A club may register 25 senior players, and no more than 17 of them may be non-homegrown. The familiar “eight homegrown” line is what falls out of those two numbers — but only if you fill all 25. A club with six qualifiers is not breaking any rule; it simply cannot name a squad bigger than 23. Under-21s sit outside the list altogether and play regardless: for 2026/27, born on or after 1 January 2005. Players out on loan are not registered.
Homegrown is a registration test, not a passport test. Three entire seasons, or 36 months, at any club affiliated to the FA or the FAW before the end of the season in which the player turns 21. That is why Robert Sánchez and Emiliano Martínez both qualify — a Spaniard from the Brighton academy and an Argentine who spent three seasons at Arsenal from 17 — while Moisés Caicedo, who arrived at Brighton at 19, does not.
That is the cost of the model rather than an accident of one window. The under-21 exemption is doing enormous work here — nine players, from Estêvão and Quenda to Satpayev and Denner, play free of the list entirely — and the moment any of them turns 21 they need a place in a squad that is already one over. Alejandro Garnacho is the illustration: homegrown, five seasons in the Manchester United academy, and currently at Villa on loan, so the one player who would ease both counts is not here to be counted.
Premier League Squad List — 2026/27
No UEFA List A this season — finishing 10th means the only registration battle is the Premier League's 25-man squad list, due on 2 September, the day after the window closes. The rules: max 25 players over 21, of whom no more than 17 can be non-homegrown ("HG" = registered in England/Wales for three seasons before their 21st birthday). Under-21s (born on or after 1 Jan 2005 for 2026/27) are exempt and unlimited — which, given Chelsea's buying model, is half the squad.
Squad List Transition · 2025/26 → Alonso's 2026/27
Each position: who's gone off last season's list, who stays, and who fills the hole — with deal status. Only advanced deals are classed in/out — loose links stay dimmed or in the Rumour Mill.
Goalkeepers
Defenders
Midfielders
Forwards
UEFA Sanction Tracker
The SCR Glidepath
The Abramovich-era files — €10m to settle the past
Chelsea proactively disclosed incomplete financial information filed between 2012 and 2019 under the previous ownership — payments routed around the books. UEFA settled it for a €10m (~£8.6m) fine. The new owners' first lesson in how long football accounting shadows last.
Settlement agreement — £26.7m paid, up to £51.8m conditional
Breach of both the Football Earnings Rule and the 80% Squad Cost Ratio for 2024. Sanction: €31m (£26.7m) unconditional — the largest of that CFCB round — plus up to €60m (£51.8m) conditional over a four-year settlement to 2028/29. Conditions: annual football-earnings targets (FY26 max €80m loss, FY27 ~zero, full compliance by the end), no hotel/women's-team/swap profits counted, and the List A positive-transfer-balance restriction. The rule against intra-group profit is aimed squarely at the PSR playbook that worked domestically.
The machine sells — then the season collapses
~£273m recouped across Madueke (£52m), João Félix, Nkunku, Veiga, Petrović, Dewsbury-Hall and more, against ~£292m spent. On the pitch: Maresca leaves in December for the vacant Man City job, Rosenior lasts 104 days, and a five-defeat winless run drops Chelsea to 10th — out of Europe for the first time in the BlueCo era. Sterling exits in January by mutual consent: a book loss plus reported compensation, pure subtraction. In April the FY25 accounts land: a record £262.4m pre-tax loss.
Second SCR strike — £2.6m, mostly suspended
Above the 70% SCR limit for calendar 2025, alongside Aston Villa (£19.4m), Newcastle (£2.6m + £8.6m FER) and Forest (£2.2m). Chelsea's fine: £2.6m with £1.7m suspended under the settlement. Small money — but a second strike on the record of a club whose suspended exposure runs to eight figures, in the same month UEFA reportedly issued Chelsea and Villa a formal warning over inflated swap deals as £117m and £42.5m crossed between them in opposite directions.
The FA joins in — £10m, and a suspended two-window ban
A third regulator, and a separate matter from everything above. The FA sanctioned Chelsea over 74 admitted breaches of its rules on agents, intermediaries and third-party investment in players — secret payments to agents between 2011 and 2018, spanning 2009–2022 but concentrated in the Abramovich years. The breaches were self-reported by Boehly and Clearlake during the 2022 takeover due diligence, which is why the outcome is as soft as it is.
The penalty came in two parts. The £10m fine is final — not subject to appeal, and payable into grassroots football. The original sanction also carried a suspended six-point deduction; on appeal that was replaced by a suspended two-window registration ban, suspended until 30 June 2027, which the FA can apply to activate if Chelsea commit similar breaches before then. In bean-counting terms Chelsea traded a points risk for a transfer-market risk — a good trade for a club whose season depends on the table, and a bad one for a club whose model depends on trading players.
The hard target
≈£27.6m paid to date (plus the 2023 €10m); up to ~£53m hanging. FY26's audit (CWC winnings + the June sales) is expected to clear the €80m bar — but FY27's target is roughly zero loss with no European revenue, which analysts have called a serious breach risk with a potential European ban among UEFA's sanctions. Meanwhile the Barco fee joins every BlueCo↔Strasbourg deal in front of the independent fair-value assessors, and the Rogers/Garnacho structure sits one adverse CFCB reading away from becoming Annex G's next test case. The settlement ends 2028/29; everything until then is bean-counting under supervision.
UEFA — the settlement agreement (~£27.6m paid, up to ~£53m still conditional) plus the early-July SCR fine, with the money contingent on continuing to cut the ratio.
Premier League — March 2026: £10.75m, a nine-month academy transfer ban and a suspended one-year first-team ban, over financial reporting and third-party investment. The league found no counterfactual PSR breach — properly disclosed, the payments would not have broken PSR.
The FA — July 2026: £10m and a suspended two-window registration ban to 30 June 2027, over agents and intermediaries.
The number that matters is not the ~£48m of disclosed fines, which a club this size absorbs. It is that two suspended transfer bans now overlap, from two different bodies, each activatable on a further breach. For a club whose entire PSR strategy runs on buying young, amortising long and selling academy players at pure profit, a registration ban is not a fine — it is the model switched off. That is the real compliance exposure in the 2026/27 season, and it does not appear in any ratio on this page.
Last Accounts — FY2024/25 (y/e 30 June 2025)
The season of the Conference League trophy and a top-four Premier League finish — and, in the books, the largest pre-tax loss in English football history. Filed at Companies House and announced 1 April 2026. Every headline number below is from the accounts or contemporaneous analysis of them.
Revenue mix
How −£308m became −£262.4m
| Operating loss (after £214m amortisation, £12m impairment) | −£308m |
| Profit on player sales (Gallagher-era book, academy exits) | +£58m |
| Net interest & other → BlueCo facility at SONIA +3.25% | −£12.4m |
| Pre-tax loss | −£262.4m |
Rules & Compliance Status
Every regime that applies to Chelsea, the limit in pounds, and where the club stands. "FFP" itself no longer exists as a single rule — it's the old umbrella name, now split into UEFA's FER + SCR and the Premier League's PSR (becoming SCR + SSR).
Compliance calendar
PSR — Profitability & Sustainability
SCR — Squad Cost Ratio (UEFA)
FER — Football Earnings Rule
SCR — Squad Cost Ratio (PL)
SSR — Sustainability & Systemic Resilience
List A transfer-balance rule
Swap-Deal / Player-Exchange Rule
FFP → what it means now
Amortisation & "pure profit"
The Whole League — Bean Counted
All 20 clubs for 2026/27: which SCR tier they're in, their latest published accounts (FY2024/25, y/e mid-2025), and their compliance baggage. Nine clubs in Europe carry the 70% green / 100% red caps; the other eleven get 85% / 115%. Notes researched 27 Jul, reviewed 4 Aug and re-verified against live reporting on 5 Aug — officially announced deals and appointments only; pursuits and links stay in the Rumour Mill. Figures marked ~ are estimates from league-wide analyses rather than confirmed line items — FY25 league totals: £6.8bn revenue, £4.4bn wages, £2.0bn amortisation, £948m aggregate pre-tax losses.
| Club | Europe 26/27 | Green cap | Rev £m | Wages £m | W/R | Compliance notes |
|---|---|---|---|---|---|---|
Arsenal | CL · CHAMPIONS | 70% | ~617 | ~328 | ~53% | Comfortable on both ratios; CL runners-up 25/26. Amortisation £170m+ the main cost line. |
Manchester City | CL | 70% | ~715 | 408 | ~57% | New era: Maresca replaces Guardiola. Broke the British record for Forest’s Anderson (£116m, fixed fee) — absorbed inside 70% by a £715m revenue base. |
Manchester United | CL | 70% | ~666 | ~313 | ~47% | Carrick made permanent manager; ~£85m midfield rebuild (Santos £50m, Tielemans £35m from Villa). £196m amortisation, but a £666m denominator makes 70% easy. |
Aston Villa | CL · EL HOLDERS | 70% | 378 | 273 | 72% | Mid-settlement, fined £19.4m (2/3 suspended, trend endorsed) — funded by selling Rogers to Chelsea for the British-record £117m and taking Garnacho back on loan. The other end of Chelsea's two biggest deals. |
Liverpool | CL | 70% | ~614 | ~386 | ~63% | Iraola officially appointed (4 Jun, 2-yr deal) after Slot was sacked a year on from the title. FY25 wages inflated by title bonuses after £241m on Isak (£125m) & Wirtz. Squad cost £545m, big denominator. |
AFC Bournemouth | EUROPA | 70% | ~175 | ~140 | ~80% | Flagged spending near capacity in FY25 — and first-ever Europe now drags them from 85% to the 70% cap just as Iraola officially left for Liverpool. The squeeze case, squeezed further. |
Sunderland | EUROPA | 70% | ~180* | ~95* | ~53% | *FY25 = first PL season back. Europe two seasons after League One — the 70% cap lands on a still-growing revenue base. |
Crystal Palace | EUROPA · CONF WINNERS | 70% | ~190 | ~135 | ~71% | Conference League winners — then Glasner officially departed for Forest. Second straight European season keeps them on the 70% cap, right on the line like Villa. |
Brighton & Hove Albion | CONFERENCE | 70% | ~222 | ~165 | ~74% | FY25 costs rose sharply on amortisation; historically balanced by elite player trading profits. |
CHELSEA | — | 85% | 490.9 | 353 | 72% | The subject of this tracker: record £262.4m loss, record £214m amortisation, UEFA settlement with a zero-loss target — and a record £117m signing anyway. Jackson sold back to Villa for £47.5m on 28 Aug, five weeks after Rogers came the other way, booking ~£35.7m of profit and cutting the ratio by four points — then Emi Martínez arrived from Villa on 30 Aug, a third deal between the two clubs in six weeks, and took most of it back. See every other tab. |
Newcastle United | — | 85% | ~350 | ~220 | ~63% | Fined Jul 2026 for BOTH SCR and FER breaches; FY25 leaned on selling Isak to Liverpool for £125m. Settlement obligations continue despite missing Europe. |
Tottenham Hotspur | — | 85% | ~526 | ~222 | ~42% | Lowest wage ratio among the big-revenue clubs — the league's most comfortable bean-counting position. |
Nottingham Forest | — | 85% | ~190 | ~155 | ~82% | Fined £2.2m in Jul 2026 — then banked £116m selling Anderson to City, transforming the FER/PSR picture overnight. Glasner confirmed as head coach 6 Jul (reported club-record ~£13m/yr salary) — their FIFTH boss in 12 months. |
Everton | — | 85% | ~187 | ~160 | ~86% | Two PSR deductions in 23/24; new stadium revenue is the plan for growing under the 85% cap. |
Fulham | — | 85% | ~180 | ~145 | ~81% | Small-revenue cohort where 85% barely funds a competitive XI — the other side of the SCR squeeze. |
Brentford | — | 85% | ~195 | ~125 | ~64% | The sustainability model club — comfortable margin on every metric. |
Leeds United | — | 85% | ~150* | ~110* | ~73% | *FY25 = promotion season. Second PL season consolidating. |
Coventry City | PROMOTED · CHAMPIONS | 85% | ~45* | ~35* | ~78% | *Championship-era accounts. PL broadcast money transforms the denominator overnight — big headroom if they spend sensibly. |
Ipswich Town | PROMOTED | 85% | ~145* | ~115* | ~79% | *FY25 reflects their last PL season. Straight back up at the first attempt. |
Hull City | PROMOTED · PLAY-OFFS | 85% | ~30* | ~28* | ~93% | *Championship accounts. The biggest financial step-up in the division — SSR liquidity tests bite hardest here. In: Butland, ex-Villa Targett, Zambrano & Morita. |
Who's Selling to Survive — Net Transfer Balance
Sorted by net balance — the top of this table is where the selling pressure lives, the bottom is where the money goes.
Does Money Still Buy the Table?
The question underneath every number in this tracker — asked from the other side. Chelsea are the club the new rules were largely written about: the £1.5bn gross spend, the eight-year contracts, the sister-company sales, the loan army. Each one now has a rule named after it.
The loopholes, closed in order
Eight-year amortisation → capped at five (2023), grandfathering ~£1bn of existing book. Hotel & women's-team sales → accepted by PSR, rejected by FER, and the PL has now closed the sister-company route for future cycles. The loan army → FIFA capped senior international loans at six. Academy swaps → Annex G's 45-day exchange rule, plus a formal warning this month. Multi-club fee-setting → independent fair-value review on every Strasbourg deal. The scoreboard: five signature Chelsea mechanisms, five rules. What remains legal is the one thing that always was — buying young, developing well, and selling at a profit. Which, inconveniently for the sceptics, Chelsea are genuinely good at: £758m of sales in five years, most of it academy and young-asset trading.
Why the project can still work
1 · The squad is young and the book is long. The £214m/yr amortisation bill is fixed, but the assets underneath it (Palmer, Caicedo, Estêvão, Rogers at 24) are appreciating — SSR even counts 40% of squad value as liquidity. 2 · The trading engine is real. ~£115m/yr of average sale profit sits in the SCR denominator; no other club generates it at that scale. 3 · The revenue upside is unusually cheap. A front-of-shirt sponsor (~£50m/yr, currently £0) and one season of Champions League football (~£80m+) would swing the FER line by ~£130m without selling anyone. 4 · The rules punish stasis, not size. Chelsea's problem isn't the model — it's a 10th-place finish that removed the denominator the model was priced against. On the pitch is where the accounts get fixed.
Changelog
Every update to the Bean Counter's data, newest first. Maintained manually with each rebuild.
Twenty-six sold players were sitting in “Retained” columns across fifteen clubs SITE-WIDE CORRECTION
Villa’s board was not the exception. It was the one somebody happened to be looking at. After Emiliano Martínez was found under “Retained” four days after his sale to Chelsea, the same pattern was checked across the other nineteen pages. Every club page carries these position boards — three columns each, who left, who stayed, who arrived — and at roughly forty-five chips a page that is about nine hundred hand-written claims, none of which any gate on this site could read, because they name players in free HTML rather than through a data array.
Twenty-six of them said a player had stayed when the club’s own deal table said he had been sold. The list is not marginal. Rodri sat under Manchester City’s “Retained · 6” tagged “REAL MADRID TALKS”; he had gone to Barcelona for £51m. Tijjani Reijnders (£52m, Al Qadsiah) and Nico González (£50m, Newcastle) were beside him. Carlos Baleba was retained at Brighton after a £65m move to Manchester United. Liam Delap was retained at Chelsea after £45m to Forest. Everton had five in one page — Ndiaye, McNeil, Beto, Iroegbunam and Patterson. Arsenal had Gabriel Jesus, Ipswich three, Hull two, Palace two, and so on across fifteen clubs.
Each one is now in the column it belongs in, with the destination and fee taken from the deal table rather than retyped. Column counts were recomputed from the chips actually present, so the headings match their own contents for the first time in a while. “Out · 0 — Nobody” placeholders were removed where a real departure now fills the column.
Worth recording how nearly this went wrong, because it is the second time today. The first script moved the chips and reported twenty-two successes. It had in fact deleted all twenty-two players: the insertion point never matched, the removal did, and the counts were recomputed afterwards so every column looked internally consistent. Nothing in the output said anything was missing. It was caught by reading one board back rather than by trusting the tally, and reverted. The rewrite asserts the set of names in a board before and after the edit and refuses to write when they differ — which then immediately caught a second, smaller error, and later a third: the pattern used to find a column was swallowing the last chip’s closing tag, so the final name in every column was invisible, which is why four clubs looked clean on the first pass and were not.
And a gate, the twenty-fifth. tools/check-flowboards.js asserts two things about every chip on every board: a name in a retained column must not be a completed permanent sale in that page’s OUT26, and a name in a retained column must exist in that page’s data at all. It says nothing about incoming or outgoing columns, where naming a target from another club is correct, and it exempts chips whose own tag places them outside the squad table — a third-choice keeper in contract talks, a U21 needing no registration. Its first run reported seventy-one problems, of which twenty-four were its own fault: typographic apostrophes it could not match to straight ones, and editorial labels like “Third keeper slot” that are not players. Tested against the pre-fix pages, where it finds exactly twenty-six.
The reason this sat unseen is worth stating plainly. The deal arrays are gated. The ratio inputs are gated. The squad table is gated. The answer block, the league tables and the share cards are all derived. These boards were the one substantial thing on every club page that was neither derived nor checked — prose in the shape of a table, in a heavily-read tab — and they had been drifting for as long as they have existed. It took a reader with the live page open to find the first one.
Two academy loans missing and three recorded as permanent sales when they are loans CORRECTION
Missing: Mamadou Sarr to Real Sociedad and Reggie Walsh to Wigan Athletic, both season loans. Walsh is seventeen and already has four senior Chelsea appearances, some of them as a sixteen-year-old.
Wrong, and this is the more serious half. Three rows were carried as done — permanent sales — when they are loans: Harrison Murray-Campbell (KV Kortrijk), Kaiden Wilson (Rochdale) and Ishe Samuels-Smith, whose row also named the wrong club: it said Swansea City, which is where he was on loan last season. He is at Notts County for this one.
The distinction is not cosmetic. A permanent stops the amortisation and books a profit or a loss; a loan stops neither and books nothing. On academy players with no book value the money happens to be the same, which is exactly why the error survived — it was invisible in the totals. On a player with a fee attached it would not have been, and the same mis-flagging on Mamadou Sarr would have booked a sale that never happened.
The Sarr rumour card had it wrong in both directions and the invariant caught it the moment the row landed: it expected a permanent back to Strasbourg at £10m booking ~£1m of profit. It was a loan, to a third club, for no fee — a materially worse outcome for these numbers than the card was modelling, because the amortisation stays. Wages go £249m → £246m and the ratio to 76.5%.
Tosin to Spurs, Guiu to Leipzig, Washington to Strasbourg — and a free transfer becomes £7m of pure profit OFFICIAL
Tosin Adarabioyo joined Tottenham permanently on deadline day at about £7m, with add-ons to ~£10m. He arrived from Fulham on a free transfer in 2024, so there is no book value at all and every penny of the fee is player-trading profit. For a club whose compliance case rests on trading, that is the cleanest transaction on the page. ~£5.2m/yr of cost leaves, all of it wages, because there was never any amortisation to stop.
Marc Guiu to RB Leipzig for €17m (~£14.6m) — a £5m release clause paid to Barcelona in 2024, resold for three times that inside two years, booking ~£11.8m. Deivid Washington to Strasbourg, officially undisclosed: the fee is carried at zero and the profit is left null rather than assumed, because a null means “not known” here and typing a guess would put it into a compliance denominator.
One reporting conflict, named rather than resolved silently: a single outlet called the Tosin move a loan. The detailed reporting and both clubs say permanent, and the row follows the weight of sourcing — if it is a loan, the £7m of profit comes out and nothing else changes.
The ratio moves 79.6% → 76.9%. Inputs: wages £261m → £249m, amortisation £230m → £229m, player-trading £153m → £159m. A near-miss worth recording: Pep Chavarría was about to be added as a missing signing — a search for “Chavarria” without the accent found nothing on this page. He was already here, spelled properly. The duplicate-deal invariant caught it within a minute of the row being written.
The Saudi deadline was five weeks out, and it is four days CORRECTION
This morning’s work put the Saudi Pro League window at 12 October and built a countdown, a gate and seven card tags on it. A reader said that sounded wrong — they had read it was days away. They were right.
The sources disagree. Wikipedia and Goal put the registration period at 22 July to 6 September; one tracker says 11 September; Sports Mole and AgentFlow say 12 October. The tell is arithmetic: 22 July to 12 October is 11.7 weeks, essentially FIFA’s twelve-week maximum for a registration period. That reads like somebody published the longest period permissible rather than the date actually announced. 6 September is 6.6 weeks, an ordinary window.
It is now carried at 6 September — the earliest credible date, chosen deliberately. The conservative error here is the early one: saying a shut window is open invents deals, which is the exact failure the window gate was written this morning to prevent. The countdown now reads four days rather than forty.
What is still unresolved: no source reachable from here separates Saudi domestic registration from international, so no such split is modelled. If one exists it is the international deadline that governs a sale out of England, and 12 October may well be a domestic-only extension rather than simply wrong. The date is flagged as contested on the deadline page rather than asserted.
Worth naming the pattern: the 12 October figure came from a single search result, and the source family it came from has now been wrong four times in this project — Hincapié’s fee, Trafford’s club, Fofana’s club, and this. A date that anchors a gate deserved a second source before it was written into twenty-one pages.
The window is shut, and the site now says so — except where it isn’t CORRECTION
The Premier League window closed at 11pm on 1 September, so from the 2nd no rumour card here can describe a signing as something still pending: a registration cannot be lodged outside the window, however well sourced the link was. 139 cards are now marked JANUARY and priced as January deals rather than deals that can be done today.
But “the window” is not one thing, and flattening it would be the opposite error. A club that cannot buy can still sell: the Saudi Pro League runs to 6 September and the Süper Lig to the 4th; MLS closed on the 2nd. Bundesliga clubs finished earliest, on 31 August; Serie A, LaLiga and the Premier League all shut on the 1st. Six cards survive because they point at a league that outlasted England’s, and each has had its destination narrowed to the club that can actually still act. The seventh has already gone. Leon Bailey, whose card read “Al Diriyah” after Sevilla and Hull ran out of time, signed for Olympiacos on 2 September for £3.4m — which is the point of this section in one transfer. The English window shutting does not stop an English club selling, and it did not stop this one. It also proves a window this table does not list: Greece was still open on 2 September, and no closing date for it could be sourced, so none is stored rather than guessed.
The first countdown clock had been reading DONE against a label saying “days to window close”. It now counts to the Saudi deadline on 6 September — the one transfer deadline that still constrains these clubs, because they can still sell into it.
tools/check-window-state.js holds it: a card with no jan flag is asserting the deal can happen now, so its destination must sit in a window open today. It is date-driven rather than a one-off sweep — on 5 September the Türkiye cards stop being live and the gate says so without anyone remembering. It found six on Fulham that the first pass missed, because those rows are written with double quotes where the rest of the site uses single.
The countdown gate had a matching blind spot: it skipped any page without a club nav and only knew one label shape, so deadline/ was invisible to it — and was still counting to 1am on 1 October, the exact GMT-versus-BST bug that gate was written for, fixed on twenty pages and left on the twenty-first. It now reads both shapes, both const and var, and every page that carries a clock.
An eighteenth gate: no transfer recorded on only one page METHOD
The two worst misses of this window were both one-sided. Liam Delap’s £45m move from Chelsea to Nottingham Forest was on neither club’s page, and Daniel Muñoz’s £20m move from Crystal Palace to Forest was absent from both too. Between them that is £65m of Forest’s spending, and their absence had Forest reading as comfortably compliant when the club is in fact over the 85% limit.
Nothing on this site could see either. The counterpart check compares fees for a player who appears on both pages — a different question, and one that is silent when a row is simply missing. There is no contradiction to detect in an absence, only the absence itself, which is the same reason a completed deal can sit undisturbed in the Rumour Mill.
The new check asks the absence question directly: for every completed Premier League to Premier League deal, is there a matching row on the other club’s page? Loans are excluded, because the borrowing club may carry one as a squad row rather than an incoming deal, and academy moves are excluded, because a selling club has no book value in a youth player to record.
It found one live defect immediately. Robertson was “Andy” on Liverpool’s page and “Andrew” on Tottenham’s, and a name mismatch defeats the fee check exactly as it defeats this one — both gates were blind to him. The names are now standardised. Verified by deleting the Delap row and watching the gate name it, and both check.sh and CI run all eighteen.
A live rumour card for a deal this page had already done CORRECTION
Enzo Fernández, whose £125m sale to Manchester City had a card whose own tag already read “DONE · SEE THE OUTS TABLE” while the card stayed live, and Mudryk, whose loan to Spurs was recorded here this morning.
Why it matters: a live card is priced by the scenario modeller. With the completed row in the table and the card still on the board, ticking it charged the same deal twice — once as history, once as a hypothetical.
Why nothing caught it: the rumour-already-gone check only compared a card against deals completed at other clubs. If the player had landed at this club, the check skipped him, and outgoing cards were never examined at all. So the one case guaranteed to double-count — a card for your own completed deal — was the one case invisible to the gate. Six cards were in that state across five clubs.
The check now also reads each page’s own Ins and Outs tables, in both directions, and fails on any live card for a deal already recorded there. Verified by reviving one of the six: the gate fails, and passes again once the card is dead. Marking a card dead does not move the headline ratio — the completed row was always counted — it only removes the card from the modeller.
Delap was in the Rumour Mill while he was already a Forest player CORRECTION
This page carried Liam Delap as the most advanced exit lever on the board — an Everton bid against a £40m ask — when he had in fact joined Nottingham Forest on 25 August for £45m guaranteed. The sale is now in the Outs table, he is out of the squad, and the rumour card is marked dead.
The £5m of add-ons taking the package to £50m is not counted, in line with the guaranteed-fee convention applied to every other figure here. Profit ~£22.4m against a book of about £22.6m; £6m of amortisation and £65k/wk come off the numerator.
Mykhailo Mudryk’s deadline-day loan to Tottenham was also missing, from both pages. Spurs hold a £75m option, which is not modelled until somebody exercises it. The loan frees £100k/wk and none of the book: his £62m predates the five-year amortisation cap, so it spreads across the full contract at ~£7.3m/yr and all of that stays here.
Net effect: sales banked £327.2m → £372.2m and the ratio falls 82.5% → 79.6%, with headroom more than doubling to £34.8m. Chelsea were already compliant; they are now comfortably so.
Enzo Fernández goes to City for £125m, and Chelsea end the window compliant OFFICIAL
Announced on deadline day: £125m, a five-year deal at the Etihad, equalling the British record Liverpool set for Isak twelve months ago. Promoted here from advanced to done, which is the only rung that moves a headline number.
It takes Chelsea from the worst ratio in the league to a compliant one, in a single transaction. The squad cost ratio goes 89.5% → 82.5% against the 85% limit — from roughly £28m/yr over the line to £15.9m/yr under it. Those were the figures on the day. Selling Delap to Forest for £45m, recorded here on 2 September, has since taken the page to 79.6% and £34.8m of headroom. £11.35m of amortisation and £9.4m of basic wage come off the numerator, and the accounting profit enters the denominator at a third, because player-trading profit is smoothed over three years rather than banked in one.
The reporting has not moved, and the gap is the whole point of this page. Sky and the rest wrote the deal up on the day as an £18m profit — £125m against the £106.8m Chelsea paid Benfica in February 2023. That is cash over cost, and no rule counts it. He was signed to June 2032 on a nine-and-a-half-year deal struck before the five-year amortisation cap, so the fee has been writing down slowly and his book value is £66.1m. The accounting profit is £58.8m, more than three times the figure in the headlines, and it is the one that reaches PSR and the squad-cost denominator. The long contracts Chelsea were criticised for are doing exactly what they were built to do.
Swept across the page rather than patched in one place: the deal row, the answer block, the squad table, the midfield position flow (he moves from Retained to Out, and both column counts with him), the squad-list headcount — non-homegrown 13 to 12, so five clear of the seventeen ceiling rather than four — the rumour card that had tracked the saga since 8 August, the league net-spend row, and the share card. The rumour card is kept rather than deleted: it called the ratio at 83.2% and the answer came in at 82.5%.
Enzo at £125m, and the £18m profit everyone is reporting is the wrong number ADVANCED
City and Chelsea agreed £125m on deadline day, and Enzo has permission to travel to Manchester for a medical and to sign. That is the medical rung, so he enters the Outs table at advanced and no further — nothing announced, nothing in the headline ratio.
Chelsea paid £106.8m in February 2023, so the sale is being written up as an £18m gain. That is cash over cost and no rule counts it. He signed to June 2032, a nine-and-a-half-year deal struck months before the five-year amortisation cap applied, so the fee has been writing down at £11.35m a year and his book value is now £66.1m. At £125m the accounting profit is £58.8m — more than three times the headline, and it is the accounting figure that reaches PSR and the squad-cost denominator.
The long contracts Chelsea were mocked for are doing exactly what they were built to do. A slower write-down leaves a lower book value later, and a lower book value turns an ordinary resale into a large book profit. It is a domestic sale, so no FIFA solidarity comes off the fee.
What moves today and what does not. Booked profit on the page goes to £207m and the window swing to +£41.6m/yr, because committed spend and the swing both count advanced deals. The ratio does not move and stays at 89.5%: the wage bridge counts announced deals only, and the £58.8m would enter the denominator at a third when it lands, since player-trading profit is a three-year average.
The agent-fee input was the one field nothing was reading CORRECTION
Chelsea carried £22m of annual agent cost against a squad whose own fees imply £24.2m at the 10% rate. The input was below the floor it cannot go below, by £2.2m, and the ratio goes 89.0% → 89.5% — roughly £28.1m over the 85% limit rather than £25.1m.
Why it survived. Amortisation has had a floor check since the invariants gate was written: the club-wide charge covers departed and academy registrations too, so it can never sit below the listed squad’s own total. Agent fees are the same shape — capitalised with the transfer, spread over the same contract — and had no check at all. Sixteen gates, and the one input none of them touched was the one that was wrong.
The check now mirrors the amortisation floor, reads the rate off the page rather than restating it (that rate has already moved once), and was broken on purpose in both directions before being trusted: planted below a floor it fails and names the club, planted above it passes. It found Chelsea and nothing else, which is the answer worth having either way.
£25m is a floor, not an estimate. Chelsea have six loaned-out players with no squad row, so their true charge is higher by an amount nobody here has established. The correction moves them from one understatement to a smaller one.
Three pages had the window shutting four hours early CORRECTION
Hull, Coventry and Newcastle counted down to 7pm on 1 September. The window shuts at 11pm, which is what the other seventeen pages said and what their clocks ran to. On the eve of deadline day, three club pages were telling readers they had four hours less than they did.
Both halves were wrong together, which is why nothing looked odd on those pages: the label said 7PM and the clock counted to 19:00, so they agreed with each other and disagreed with the rest of the site. The first fix here only corrected the labels, and the new gate immediately failed for the right reason, catching a symptom fixed without its cause.
Also tidied: a squad-list deadline written as “after the window closes (~2 September)”, where the date belongs to the list and the parenthetical made it read as hedging on the window itself. And the Premier League checkpoint countdown was set to midnight UTC on 1 October, which is one o’clock in the morning here, because it was stored as though Britain were on GMT in October rather than BST.
tools/check-countdowns.js now renders each stored target through Europe/London and compares it to the label written beside it. Timezone is the whole difficulty: 22:00 UTC is 11pm in September and would not be in December, so the two can only be compared after conversion. Broken on purpose in both directions before being trusted, once with a wrong label against a right clock and once the other way about.
This was found because a reader corrected something said in conversation, not by anything that runs. Sixteen gates check this site and none of them read a clock.
The bolding was doing too much work — 2,316 signposts dropped EDITORIAL
A reader said the site reads as though a machine wrote it. That is worth measuring rather than arguing with, so it was measured.
The design came out fine. Claret and blue are the club’s own rather than the cream-and-terracotta that generated pages default to, the display face is Barlow Condensed rather than Inter, corners are three or four pixels rather than fully rounded, and there are five emoji on a 530KB page. Nothing there needed changing.
The prose was the problem, and one habit dominated: a bolded editorial sentence opening almost every paragraph. There were 2,612 of them, roughly one bold span every 62 words across half a million words of text. Bold is for things a reader scans for — a fee, a name, a date, a verdict. Used on the thesis of every paragraph it stops marking anything at all, and it is one of the most recognisable tells there is.
2,316 of those have gone. Figures, names, labels and short verdicts keep theirs. No wording changed anywhere, only tags, so nothing about the analysis moved and the whole pass reverts with one command. Density goes from one bold every 62 words to one every 85.
Two things this does not fix, stated plainly because the difference matters. The em-dash rate is 17.3 per thousand words against one to three in edited prose, and that needs a slower pass: a blanket substitution produces comma splices. And underneath both is a rhetorical habit no script reaches — signpost, then aphorism, then antithesis, three times a paragraph. That is the thing the reader actually noticed, and it has to be rewritten by hand.
One note on method: the first attempt stripped the bold from the two sentences that state the medical rule, which tools/check-deal-stage.js holds byte-identical across all twenty pages. The gate failed and the sentences are excluded now. It was written to guard a transfer convention and it caught a typography change, which is the argument for gating wording as well as arithmetic.
Agent fees to 10%, the wage gross-up to 1.55x — both were too low, and the FA publishes the proof MODEL CHANGE
Two constants underneath every figure on this site have moved, at a reader’s prompting. The agent fee charged on a signing goes from 5% of the transfer fee to 10%, and the wage gross-up from 1.45x to 1.55x. Both were estimates that had never been checked against a published source. Both now have one.
The agent rate was checkable all along. The FA publishes what every club pays intermediaries. Between 4 February 2025 and 2 February 2026, Premier League clubs paid £460.3m — against the £3,137m of incoming fees this site records for that window, an implied rate of 14.7%, nearly three times the 5% being charged. Chelsea alone paid £65.1m, Aston Villa £38.4m. 10% is the figure taken, deliberately below the implied ceiling: the FA total also covers sales, loans and contract renewals, and only the buy-side portion is capitalised into a transfer’s cost. It is a floor with evidence under it rather than a rule of thumb.
The gross-up was missing a whole category of pay. It covered employer NI, bonuses and image rights — but not signing-on fees, and UEFA is explicit that they count. Annex G.3 of the Club Licensing and Financial Sustainability Regulations: all forms of consideration to and/or benefit of players, such as sign-on fees, must be treated as employee benefit expenses and not costs of a player’s registration. So they belong in the numerator, they sit with the wage rather than the amortisation, and they spread across the contract as a prepayment for services. Employer NI alone is 15%, so of the old 45% only about 30 points were doing the work of bonuses, image rights and signing-on fees together. 55% gives that last item somewhere to live.
What actually moved. League-wide, the annual cost this window adds rises from £1,257m to £1,330m. Twelve clubs’ wage inputs were re-derived by the bridge and reset to it; no club crossed a limit, and headline ratios moved by at most 0.9 of a point — mostly downwards, which is worth understanding rather than glossing: the gross-up applies to the net wage movement, and most clubs sold more wage than they bought, so a bigger multiplier makes a negative movement more negative. Every projection built on an old baseline was recomputed too, not just the baselines.
One piece of tidying that mattered more than it looks. The gross-up existed as a named constant and then as five hard-coded copies of 1.45 in the same file, on all twenty pages. They all now read the constant. A number duplicated a hundred times across a site is not a convention, it is a hundred chances to change ninety-nine of them.
Nothing below a medical belongs in the Ins & Outs tables RULE CHANGE
No row on this page had to move — every deal in the tables here was already at a medical or announced. The rule and its gate apply the same way, and the wording on both tabs now states it.
The status ladder ran done → advanced → in talks → offer, and all four rungs were rendered as rows in the deal tables. The bottom two contributed nothing to any figure — every total on this site filters to done and advanced — which made them arithmetically harmless and editorially loud. A reader scanning the Ins table saw rows the club had never agreed to, in the same table, in the same shape, as business that is done. Being excluded from the totals is not visible; being in the table is.
The threshold is now a medical. A deal enters at advanced — terms agreed and the medical taken or booked, awaiting only an announcement — and moves to done when a club announces it. A loan row is an agreed loan. Everything short of that is interest, however well sourced, and interest lives in the Rumour Mill, where it can still be ticked and modelled against the ratio. Nothing has been deleted. A row that counted towards nothing still counts towards nothing; it is just no longer sitting where settled business sits.
Four figures did move, and they moved because they had been wrong. The headline ratios, the swing and the window balance all filter to done and advanced and were untouched. But the amortisation column added to the deal tables sums every row in the table with no filter at all, and writes its total into a footer labelled “TOTALS IN (confirmed/advanced)” — a total that named a filter it did not apply. The same total feeds the “Added by this window’s deals” and “Net change” lines under the run-off chart. So unagreed deals were being amortised into figures that said they excluded them:
- Crystal Palace — added by this window’s deals +£12.4m/yr → +£6.6m/yr, nearly halved, because Le Guen (£12m) and Njie (£16m) were being amortised though neither fee exists; freed −£18.3m/yr → −£12.3m/yr; net −£5.9m → −£5.7m/yr.
- Sunderland — added +£11.2m/yr → +£6.7m/yr and net change +£9.2m → +£4.8m/yr, on an asking price for Poku that no one had agreed to pay.
- Brentford — added +£16.9m/yr → +£16.1m/yr, net +£16.5m → +£15.6m/yr.
- Liverpool — totals out, wage ~£735k/wk → ~£725k/wk and cost freed £61m → £60.2m/yr, for a loan with no agreed destination.
The amortisation code has deliberately not been changed. Its filter is now the whole table, because the whole table is now business at a medical or beyond — and the fix belongs at the input, in one gate, rather than as a twenty-first copy of the same rule pasted into twenty pages of inline script. That is also the answer to why this survived: nothing compared a table’s footer against the label printed on it, and the rows doing the damage were invisible in every figure a reader would have checked.
Twelve rows moved across eight clubs, and the wording moved on all twenty. The ledes described the threshold nine different ways — “medical/verbal”, “option/verbal”, “talks/verbal”, “medical or negotiating” — and three of those promised a table that now excludes what they promised. One sentence states the rule on the Ins & Outs tab and its counterpart on the Rumours tab, identical on every page, and tools/check-deal-stage.js holds both to the letter as well as failing any deal row below the threshold. The gate was broken on purpose twice before being trusted: once by dropping a row’s stage entirely, which is the obvious way round a stage check, and once by adding a season array no hard-coded list would have known about.
The Ins & Outs tab scrolled sideways on a phone, and so did every other tab CORRECTION
One table on this site sat outside a scroll container. The amortisation runoff — Season, Already here, This window, Combined — is 560px wide and had nothing but a margin on its wrapper, while every other table on the page sits inside .twrap with overflow-x:auto. At phone width it stretched the whole document about 200px past the viewport, and because it was the document scrolling rather than a box inside it, every tab slid sideways, not just the one containing the table. All twenty club pages, identically.
It is not new and it was not the Read more button. The version of this page from before that change overflows by exactly the same 597 pixels against a 390-pixel viewport, which is worth stating plainly rather than letting the newest change take the blame for the oldest bug.
Why it went unseen is the more useful part. The browser check that runs against every page loaded it at desktop width and never clicked a tab, so it could not have seen either half of this: not the narrow viewport, and not the tab the table lives on. It now runs at 390px and walks all twelve tabs on all twenty pages, failing on any page whose document scrolls horizontally. That costs real time on each run, which is the honest price of catching a class of fault that only exists on the device most readers use.
The deal notes now fold away behind a button LAYOUT
The note under a player’s name is where the reasoning for a deal lives, and on the busiest rows it runs to several hundred words. Read end to end that is the point of the table; scrolled past on a phone it buries the row underneath and everything after it. Long notes now clamp to two lines with a Read more button, and short ones are left exactly as they were — a note that fits gets no furniture around it. The full text stays in the page whether or not it is open, so it is still searchable, copyable and printable.
It did not work the first time, and the reason is worth writing down. The clamp was styled on a single class, and the table already carried a td .glide-cap rule setting the notes to display as blocks — a more specific selector, so it won. The result was a button that toggled its own label and changed nothing else: the line-clamp property applied, the display property it depends on did not, and the note stayed full height. Checked in a browser at phone width rather than by reading the stylesheet, which is the only way that particular failure shows up.
A sell-on reduces the profit, not just the cash — and the gate that should have said so was reading a different page CORRECTION
Asked whether everything a transfer actually contains was applied to the deals on this site, and one thing was not. A sell-on owed to a former club is a cost of the disposal: it comes off the profit booked, not only off the cash banked. This site deducted it from the window balance and the List A test and then left it out of profit entirely — and profit is what feeds the squad-cost denominator through the three-year average. It now comes off booked profit, so the only quantified clause on the site, Villa’s £15m to Middlesbrough on the £117m Rogers fee, is handled by the model rather than by hand.
The gate was passing green on a £15m disagreement, and the reason is worth recording. The trading bridge’s check pulls the profit function out of the page and runs it — but that function reaches outside its own block for the sell-on data, which the extract did not include. Undefined dependency, guard returns zero, and the checker quietly computed a different profit from the one the page computes. A checker that does not mirror the page is not checking the page. It now pulls its dependencies across too, and it failed immediately when it did.
No figure moves today. The £15m had already been taken off this club’s denominator by hand when the sell-on was first noticed; the anchor gives that third back so the arithmetic lands in the same place, and from here it flows automatically. The three other clauses on the site — Baleba, Reijnders and Chérif — are recorded as unquantified and still contribute nothing, which is honest rather than convenient: the exposure is real and the percentage has never been reported.
Chelsea cannot register their own squad — 26 senior players for 25 places NEW
Strip out the nine under-21s and the two out on loan and 26 players are left for 25 places. Somebody has to be left out of the list entirely: not sold, not loaned, simply unregistered and unable to play. The homegrown quota is not what bites — at 12 homegrown and 11 non-homegrown Chelsea sit five clear of the seventeen ceiling, the most comfortable margin of any club on this tracker. It is total places, and only total places.
That is the model, not an accident of one window. The under-21 exemption is doing enormous work here: nine players, Estêvão, Quenda, Satpayev, Denner and the rest, play free of the list. Each one that turns 21 needs a place in a squad already one over. Alejandro Garnacho is the illustration — homegrown through five seasons at Manchester United, and out on loan at Villa, so the player who would ease both counts is not here to be counted.
Why it was missing until now. This page carried UEFA’s List A and never the domestic quota — a different rule with different arithmetic. It was built for one club eleven months ago and the commit that shipped it said the other nineteen would follow. They did not, because a missing feature breaks no gate. Every player now carries a date of birth and a stated qualifying basis, so the counts derive from the squad table and the headcount gate holds the prose.
The sale-profit input now derives itself, like the wage input above it METHOD
in-psp is the three-year average player-trading profit in the squad-cost denominator, and it was hand-set on all twenty pages. The failure mode is the one the wage bridge was built to stop, one input along: a sale completes, its profit is booked in the table, and the figure meant to carry a third of it stays where somebody last typed it. It only ever moved when whoever booked the deal remembered — which is the definition of a number that will eventually be wrong.
The page now shows its working beside the input: the earlier years’ contribution, plus this window’s booked profit divided by three, because UEFA smooths player-trading profit over three years so one window enters at roughly a third. Booked means done and not a loan — an advanced deal has not completed and its profit is not in the accounts, which is also the convention this page was already kept on. The profit is net of the FIFA solidarity taken out of a foreign sale.
One thing about the anchor is worth stating rather than glossing. The earlier years’ figure is carried forward from the number this page already used, not sourced from published accounts, so the bridge agrees with today’s input by construction. It earns its keep from here on, by moving when a deal lands. Tested by planting a completed sale into the tables and leaving the input alone: the gate said the denominator was £20m short, which is exactly the silence it exists to break.
A sale can lose money once FIFA has taken its 5%, and the formatter could not write it down CORRECTION
Modelling solidarity produced the site’s first negative profit on a completed sale. Villa banked ~£8.08m of Lucas Digne’s £8.5m fee against a book value of £8.5m, so that deal is a small loss rather than a break-even — which is the correct answer, and one the gross-fee basis could never produce.
The money formatter could not render it. It put the pound sign first and the minus wherever the number happened to start, so the cell read “£-0.4m” against a site that writes −£0.4m everywhere else. Nineteen pages had that version. Bournemouth had the correct one, negative-aware, written when its own trading profit went below zero — so the fix was to adopt the version already in the codebase rather than invent a twentieth. All twenty now share one formatter.
Checked in a browser rather than by inspection, because the failure this could introduce is a doubled sign where a caller already prepends its own minus: no malformed negative on any of the twenty, and no JavaScript error.
FIFA takes 5% of every fee sold abroad, and this site had been booking 100% of it CORRECTION
Asked what else is inside a completed deal that these numbers miss, and the answer was the solidarity contribution. 5% of any international transfer fee is deducted from the fee and shared among the clubs that trained the player between 12 and 23. The mechanics decide who pays: the buying club hands over the headline number and distributes the 5% out of it, so a purchase costs exactly the fee already capitalised here — nothing was wrong on that side. The selling club banks 95%. Every profit booked on a sale abroad was therefore 5% too high, across all twenty pages, from launch. Around £28m league-wide.
On this page it is £4.13m, from the foreign sales of Omari Kellyman, Marc Cucurella, Trevoh Chalobah. That comes off booked profit, and a third of it off the denominator, because sale profit feeds the squad-cost ratio through a three-year average.
The glossary had been claiming this was modelled the whole time. It said the 4% Premier League levy and FIFA’s 5% solidarity contribution both capitalise into registration cost — true of the levy, true of solidarity for a buyer, and quietly untrue of the thing that actually matters, which is what a seller keeps. Documentation that describes a calculation the code does not perform is worse than no documentation, because it stops anyone looking.
It is derived, not typed. The deduction comes from where the player went, which puts all the weight on classifying a destination — and getting that wrong is silent: an English club missing from the list costs its seller 5% of a fee it actually keeps, and no total looks odd. So tools/check-solidarity.js refuses to classify by default. Every fee-carrying destination must be a club one of the two lists already knows; a name in neither fails until a human decides which it is. The gate also holds the twenty inline copies of the classifier to being identical, for the same reason the wage gross-up is a single constant.
One assumption is recorded rather than hidden: Cardiff, Newport, Swansea and Wrexham are Welsh clubs inside the English pyramid, and are treated here as domestic because their registrations run through the English system.
Also documented, deliberately not changed: add-ons are modelled all-in on a purchase and guaranteed-only on a sale. That asymmetry makes the buy column a best case and the sell column a conservative one, and it now says so on the page instead of being visible only to whoever recomputes the fees.
Wages in the deal tables were understated by 45%, and the sentence describing the fix was wrong on nine other pages CORRECTION
The site grosses wages by 1.45 to cover employer NI, bonuses and image rights — everywhere except the two columns readers actually look at. The cost of an arrival and the relief from a departure in the Incomings and Outgoings tables were built from raw weekly wages, so every one of them understated the real charge. Both columns are now grossed through a single GROSS constant, so they cannot come apart again. The headline ratio does not move: it is computed from the wage, amortisation and agent inputs, which were already on the grossed basis. What moves is the Net SCR Swing card and the two columns feeding it.
Which is where the second problem was. The swing is derived from the deal arrays and was therefore right the moment the gross-up landed — but the same figure is also typed into the overview callout, and typed figures do not move. The sale-profit figure beside it said £120m+ where the page computes £148m. Palace’s was the clearest case: it read “still negative” where the page computed a positive swing, so the sentence was not stale but inverted.
Nothing showed this in a browser. A small script copies the derived card into the overview span at load, so the screen self-healed while the file stayed wrong — the same failure as the share card that displayed correctly and shipped a stale number to anyone who read the source. tools/check-overview-figures.js now runs the page’s own formulas against the page’s own arrays and fails on any stated swing or profit that disagrees, in the callout or in prose. The changelog is excluded, because a dated entry is a record.
Two more holes closed while the gate was being written. The baseline gate knew five ways of phrasing a ratio and not the one in the most-read sentence on every page, which is how City carried “~65% ratio vs the 70% wall” against a computed 57.1%; it now reads that shape too. And tools/check-parity.js checks that CI runs every gate the local suite runs — twice a gate had been wired into one and not the other, and both times it was caught by eye rather than by anything.
Ten answer blocks disagreed with their own pages — and the rule that lets that happen is now written down CORRECTION
The answer block is the first paragraph on every club page and the one a search engine quotes. It states four things that are all derivable — the ratio, the headroom or overshoot, what the club has banked from sales, what it has committed on signings — and only the ratio had a gate. Ten of the twenty disagreed with their own data. Brighton said £91.9m banked against £156.9m of completed sales; Manchester United £89m committed against £154m; Sunderland £0m against £32.6m; Forest was wrong on all three. Every answer block is now written from the deal tables and the ratio inputs rather than typed, and a gate holds them there.
One of the ten was two days old and mine. Manchester City’s said “£338m banked from sales”, which came from reading a total that includes advanced deals into a sentence that says banked. It is £288m. Advanced business is committed, not banked, and the gate now applies that distinction rather than trusting whoever writes the sentence to remember it.
Chelsea, Fulham and Ipswich stated no headroom at all, because they are over their line and the sentence had been written for clubs that are under it. They now say by how much: −£23.3m, −£19.2m and −£17.7m per year.
And the underlying rule is now recorded in the repo rather than relied on. A club page is twelve sections plus the head, the same quantity is stated in several of them, and every significant error here has had one shape: a figure corrected where somebody noticed it and left standing everywhere else. tools/echoes.js reports which sections state a given figure before it is edited, and the gates that exist because of this rule are listed alongside it. Anything derivable gets derived; anything typed gets a gate.
No gate had ever read a headcount CORRECTION
Ten gates run on every build and not one of them counted players. They read percentages, deal statuses, transfer rows, bar widths and card images — so a sentence saying “nineteen senior players, six places unused” could sit beside a card correctly showing 22 and 3, indefinitely, with everything green.
There is now a gate that recounts from the squad table, using the page’s own registration rule rather than a second copy of it: a player is on the list unless he is loaned out or under 21 on the season’s cut-off, and the cut-off is read from the page rather than assumed. It checks the registered total, the homegrown and non-homegrown split, the free places and the under-21 count, in both digits and words.
It missed one of its own test cases on the first run. “Six more players are under 21” begins a sentence, so the word is capitalised, and a lowercase-only pattern walked straight past it — found only by planting each stale figure back and checking the build failed. Four claim types, four confirmed failures, then green. A check you have not watched fail is a guess about what it catches.
The hero stat cards were three-across on a phone, and four of them left an orphan LAYOUT
Reported on Villa: three columns on a 430px screen squeezed the longest card into a ribbon, and because that page carries four cards rather than three, the fourth dropped alone onto a second row beside two empty cells. Below 760px the grid is now two columns, which gives Villa a clean 2×2.
The other nineteen pages carry three cards, so two columns would have left an orphan there instead. A lone last card now spans the full row rather than sitting beside a hole — so three reads as two-then-one and four reads as two-and-two, without a special case for either.
Desktop had the same orphan and nobody had mentioned it. Four cards in a fixed three-column grid is unbalanced at every width, not just on a phone. The grid fits its own content now, so Villa gets four across on a wide screen and the three-card pages are unchanged. Measured at 390, 430 and 1400px rather than eyeballed.
And the card that caused it got shorter. Villa’s List A churn description had just been lengthened to fix an arrival count, which is what made it tower over its neighbour. The names moved out — they are on the Ins & Outs tab — and every figure in it stayed.
A stale ratio phrased one way slipped a gate built for another CORRECTION
The prose-baseline gate catches “roughly N% of football revenue”. It did not catch “sit at roughly N%”, which is how the glossary phrases the same claim — so a stale ratio could sit in a definition indefinitely while the identical statement in the FAQ was checked on every build. Found on Villa, where the glossary was two revisions behind the page.
Extending the rule found the same fault on three more pages nobody had asked about. Arsenal’s glossary said 64% against 66.1% computed; Fulham’s said 90% against 94.0%; Ipswich’s said the ratio “sits at roughly 85% — on the line” when it is 94.6%, about ten points over. Ipswich’s sentence also quoted a “~£106m gross window” that the deal table puts at ~£147m. That one was wrong twice and read as reassurance both times.
A gate that matches one phrasing of a claim is a gate against that phrasing, not against the claim. Both forms are checked now, and the extension was tested by planting the old figure back and confirming the build fails.
Both loan bars read as full when only one quota was used CORRECTION
Reported by a reader looking at Villa on a phone, and right. The card showed two full amber bars, so both ceilings looked hit — when the line under the second one said 6 of 6 international slots still free. Only the domestic quota was used. The bar was hard-coded to 100% and had nothing to do with the sentence beneath it.
Every one of these bars was a literal width typed in beside the text it was meant to summarise. That is the same fault as the headline reading “1 + 6 Left” above a body saying none left, which already had a gate; the bar had simply never been looked at. They are derived now — “N of M remaining” means M−N used, and the width and the colour come from that, so the picture and the sentence cannot disagree. Amber only when nothing is left, which is the point at which a quota starts deciding what a club can do.
Writing the check found four more pages the report had not mentioned. Fulham, Ipswich, Tottenham and Coventry each had a quota line with no bar above it at all, so the international ceiling was invisible on those cards. And Chelsea’s international bar sat at 33% beside a sentence that stated no count whatsoever — nothing could have derived it and nobody could have checked it. That line now says 5 of 6 senior slots remaining and shows its working: Badiashile at Napoli is the one senior non-club-trained loan abroad, with Antwi and Murray-Campbell treated as academy and therefore exempt. Disagree with that classification if you like — the point is that it is now possible to.
The gate checks the source, not just the screen. Villa’s rendered card was fixed by the derivation the moment it was added, while the hard-coded 100% was still sitting in the file — correct in the browser, wrong in the thing a checker reads and the thing that renders before any script runs. Both are right now, and the gate compares the typed width against the stated numbers so a hand edit cannot quietly reintroduce it.
Deep audit of the rules and the inputs: the wage figure had drifted from its own derivation on five clubs CORRECTION
The rule constants are unanimous across all twenty pages and all correct — the £105m PSR cap, the €60m earnings limit, the five-year amortisation cap and its 1 July 2023 start, the 4% Premier League levy, the 1 January 2005 under-21 cut-off, 17 non-homegrown of 25, two concurrent domestic loans and six international. Thirty-nine separate statements of the five-year cap; not one disagreed with another. That is the half of this audit with nothing to report, and it is worth reporting that it has nothing to report.
Every club’s cap now agrees with its European status. In Europe the UEFA line is 70%, outside it the Premier League’s is 85% — fifteen points of headroom turning on a single yes/no, asserted in three places at once and checked in none. All twenty agree: nine in Europe at 70%, eleven outside at 85%. A gate now enforces it, because a club’s European status is exactly what changes between seasons.
The real finding is the wage input. This site’s stated convention is that the wage figure IS the wage bridge’s own derivation on every accounts-basis club — that is what makes the league table comparable, and what makes the input track the window instead of sitting at a pre-window figure nobody updates. It had decayed on five clubs, because deals get booked by hand and the input gets nudged by hand with them, and a nudge drifts from the derivation the moment the arithmetic differs by a rounding. Tottenham were £22m adrift. All five are now set to the derivation and a gate holds them there. Promoted clubs are correctly exempt and the bridge explains why in its own text: a wage bill roughly doubles on going up, so last season’s accounts are the wrong anchor in both directions at once.
One club changes compliance status as a result. Bournemouth go from 69.8% to 71.2% — from just inside the 70% cap to about £3.4m/yr over it, in their first European season, on the tighter cap that European qualification brings. Tottenham move 64.6% to 68.3%, Forest 81.9% to 82.7%, Manchester City 57.7% to 57.1%, Villa 64.0% to 63.8%.
And two more pages were flooring their headroom at zero. Ipswich read “£0m of room” while sitting £17.8m/yr over the 85% line; Bournemouth would have done the same on crossing it. The same defect was fixed on Palace four days ago and not looked for elsewhere — which is the lesson, not the bug. Both now state the overshoot.
What the audit could not do. Every football site and reference database is blocked from this environment, so the transfer tables were reconciled internally — squad rows against deal rows, amortisation floors against inputs, both sides of every intra-league move — and checked externally only as far as search summaries allow. Internally they reconcile on all twenty clubs. That is a real guarantee about consistency and not a guarantee about completeness, and the £50m signing found missing yesterday is what the difference looks like.
The share card is now checked like everything else — and two gates had never run in CI at all CORRECTION
Rebuilding the cards fixed today’s figures and fixed nothing about tomorrow’s. A generator someone has to remember to run is exactly what produced a card reading 60.2% four days out of date, so the question is not whether the cards are right now but whether they can go wrong again quietly. A gate now recomputes the card’s figures from the page and compares them against the token the builder stamped into the meta tag. Move any input — a wage, a fee, a sale — and the build fails until the card is rebuilt. It was tested by nudging Villa’s wage input and confirming the failure, and by stripping the token to confirm that fails too.
The builder and the gate read the figures through one shared module. Two copies of the same calculation drifting apart is the failure this site has hit more than any other, and it would be absurd to reintroduce it in the check designed to prevent it.
And checking the CI list against the local one turned up a real gap. Two gates — the one that catches stale ratio figures in prose, and the loan-quota headline check — existed, worked, and had never run in CI. They only ran when someone ran the full suite by hand, which means a direct push could have deployed stale numbers with a green tick. Both now run on every push, and the two lists are asserted to match. The prose-baseline gate is the one that has caught the most this week, and it was the one running least often.
The share cards were showing a ratio four days and six deals out of date CORRECTION
The squad cost ratio is printed into the card image itself, which is fine until the ratio moves. Villa’s card said 60.2% against a page saying 64.0% — the figure from before the Goretzka wage correction, and before Jackson, Martínez, Suzuki, Ruggeri and the rest. Anyone sharing the link was posting a number this site had stopped believing on 27 August. Chelsea’s said 83% against 88.7%; Manchester City’s said ~65% against 57.7%.
There was no generator. The cards were made once, by hand, on 26 August and left, so nothing could have kept them current. There is one now: tools/build-og-cards.js reads every figure from the page it belongs to and rebuilds all twenty, and it runs like any other build step.
Cache-busting is the part that actually matters for sharing. X and Facebook cache a card image against its URL for days, so replacing the file in place does nothing for a link anyone has already posted. Each card’s meta tag now carries a version token derived from the figures on it, so the URL changes exactly when the picture changes and not otherwise.
The number is now coloured the way the page colours it — green three points clear of the limit, amber up to it, red past it. A card showing Ipswich at 94.6% against an 85% line in the same neutral cream as one showing Manchester United at 56.9% throws away the only thing a reader takes from a shared image.
And a gate now checks the alt text against the computed ratio, because that was stale too and in a way nobody would ever notice: six pages carried figures in the card’s alt attribute that no longer matched, including one that had never matched any published base. It was tested by planting the old 60.2% and confirming the build fails.
Full pre-deadline audit of all 20 clubs — one £50m transfer was missing entirely SWEEP
Nico González, Manchester City to Newcastle, ~£50m, completed and announced. Medical taken, presented to supporters before the West Brom cup tie, No.6 shirt issued — and absent from both pages. It is the largest single omission this site has had to correct, and it moved two ratios materially: City 60.4% → 57.7% with headroom out to £100.2m, Newcastle 70.8% → 74.7% with headroom down to £46.8m against their 85% line. The fee is reported as reaching £50m after add-ons, so the guaranteed portion is lower and unpublished; £50m is carried on both sides because a counterpart has to agree, and it is flagged. The same number cannot be conservative for both clubs at once — it flatters City’s profit while overstating Newcastle’s charge — and that is stated rather than smoothed over.
Everything else checked out, which is the more useful result. Forty-odd names drawn from external reporting were tested against the pages one by one and every single one was already there. Where the reporting and this site disagreed, this site was right: one summary placed Detourbet, Monga and Rulli at Nottingham Forest when all three are Manchester City signings, and another had Bouaddi at Forest when City announced him.
Two numeric errors found by audit rather than by reading. Manchester City’s Kalvin Phillips loan credited £11.3m of relief when a loan frees the wage and none of the amortisation — the registration stays, and so does the charge. Corrected to £7.8m. Nottingham Forest’s Gustavo Sá loan freed nothing at all when Olympiacos pay his wages; corrected to £1.8m. Two more outgoing loans, at Leeds and Liverpool, carried no loan flag, so the amortisation book and the List A gate were treating them as permanent sales.
Eight new checks, and they were run against real data before being trusted. A completed permanent signing must have a squad row; a sold player must not still be in one; a destination reading “loan” must carry a loan flag; no duplicate squad rows; no fee without contract dates; no end date before the signing date; no signing dated in the future; no expired contract still in the squad. All eight are clean across all twenty clubs, and two were deliberately broken to confirm they fail. Three earlier checks this week passed on their first run because they were wrong, not because the data was right, so nothing goes in now without being made to fail first.
What this sweep cannot claim. Every football site, news aggregator and reference database is blocked from this environment, so external checking is search summaries only — and those summaries mixed up clubs twice in this pass alone. The internal consistency of these pages is now verified exhaustively and mechanically. Their completeness against the real world is verified as far as search allows, which is not the same thing, and the González miss is what that gap looks like.
The stale-rumour gate could only see half the market — two more boards were selling players who had left CORRECTION
Yesterday’s gate checked live rumours against completed incomings at other clubs. That catches a player who moved between Premier League clubs and nothing else. Two whole classes of exit were invisible to it, and both had live cards sitting on boards.
A player sold abroad appears in no incoming table anywhere. Spurs sold Cristian Romero to Atlético Madrid and announced it on 15 August; Arsenal’s board went on offering him to the scenario modeller for a fortnight. The gate now reads completed outgoing rows as well, taking the destination from the row itself — which is derivable, and should have been there first time.
And a move between two non-Premier-League clubs is recorded on no page at all. Bayern sold João Palhinha to Benfica on 26 August — €14m plus up to €5m, contract to 2030 — and Newcastle’s card still read “door ajar again”. Nothing structural could ever have caught that, so there is now a small list at tools/gone.json for exactly this case, and the gate fails against it. Two names so far: Palhinha, and Leão to Galatasaray.
One false positive, worth recording because it nearly shipped. The first version read Jadon Sancho’s outgoing row — destination “Free agent” — as him having joined a club called Free agent, and would have killed two perfectly live cards. A released player has left a club and joined nobody: he is more signable, not less. Release destinations are now excluded, while a row naming an onward club after an arrow still counts. All three arms were then tested by un-flagging a closed card and checking the gate fired, because a check nobody has seen fail is not yet a check.
Cards closed: Romero (Arsenal), Palhinha (Newcastle), Cho (Hull, where Hull themselves ended the talks on 10 August). Each keeps its note as the record and leaves the modeller.
Dead rumours were still tickable — three players could be “signed” on boards they had already left CORRECTION
The scenario modeller priced any card you ticked, including cards whose own tag said the player was gone. Newcastle’s board offered Nicolas Jackson after he had joined Villa; the tag read “DEAD — JOINED ASTON VILLA” and ticking it still moved the ratio. Liverpool’s offered Ezri Konsa, an Arsenal player since 20 August. Chelsea’s offered Ousmane Diomande, who is at Forest. This site has named that exact contradiction in its own changelog — “a completed deal and a live rumour for the same player” — and then kept shipping it, because nothing was looking for it.
Now something looks. A gate fails any live incoming rumour naming a player who has completed a move to another club, which is derivable from the transfer tables rather than from a tag somebody remembered to type. Only incoming cards are checked: an outgoing rumour naming a player another club has signed is the same move seen from the selling side, and that is correct. It found all three on its first run.
Dead cards now stay on the board and leave the model. They keep their note as the record of what a club looked at, greyed, with the tick removed and the impact line replaced by “no longer available”. Deleting them would lose the history; leaving them live was worse.
Emi Martínez in, two loans out — and a £7.5m fee that costs £4.2m a year OFFICIAL
£7.5m for a 33-year-old on a two-year deal, and the annual charge is the story. A fee amortises over the contract, so two years means ~£4.2m/yr with the levy where five years would have meant £1.6m. The five-year cap is a ceiling, not a target, and a short contract for an older player is the one case where a small fee still bites hard. With £150k/wk grossed he is ~£15.5m/yr — more than either goalkeeper already here.
What it buys structurally is a registration slot, not just a keeper. He is homegrown for Premier League purposes — Arsenal from age 17 — so he does not consume one of the 17 non-homegrown senior places that have been the binding constraint on this squad all window. A non-homegrown keeper at the same price would have cost a slot Chelsea do not have.
Badiashile (Napoli, 22 Aug) and Disasi (Crystal Palace, 26 Aug) are both announced and now booked. Both are loans, so both free the wage and neither frees the amortisation — between them ~£17.3m/yr of grossed pay leaves and not a penny of the charge. That is what kept the ratio at 88.7% rather than the 91.5% Martínez alone would have produced. Still over the 85% line; Enzo would take it to 82.4%.
The wage on Martínez is an estimate and it moves the ratio by more than two points, so it is flagged as one on his squad row rather than presented as fact. £150k/wk is what he earned at Villa; no Chelsea figure has been reported.
Deadline-week sweep: four announced deals the tables had missed, and a gate that was crying wolf SWEEP
Four deals were sitting at “advanced” after their clubs had announced them. Bouaddi to Manchester City — announced on the club’s own site on 26 August, and carried here as unannounced for four days, with the prose quoting “~£95m/€110m… agreed in principle” when the real deal is £81.3m fixed plus £4.3m of add-ons on a contract to 2031. Badiashile to Napoli, announced 22 August. Disasi to Crystal Palace, announced 26 August by both clubs. And Emi Martínez to Chelsea, announced by Villa on 30 August. All four are now booked, with the ratios on five pages moving as a result.
The Disasi loan is the one with a consequence nobody was watching. Palace were sitting a whisker inside the 70% cap that their European qualification imposes. Taking a £120k/wk centre-back on loan added ~£9.0m/yr of grossed wages and put them over it — a loan, with no fee, no amortisation and no transfer to report, moving a compliance position that a £30m signing would have been scrutinised for. This page has argued all summer that loans are treated as free when they are not; this is the arithmetic saying it.
And the prose-baseline gate was flagging a correct sentence. It reads any “roughly N% of football revenue” as a claim about the club’s own ratio — but “capped at roughly 70% of football revenue” describes the LIMIT, and Palace’s page says exactly that, twice. A gate that fails on correct text is worse than one that stays quiet, because the next person learns to skim past it. It now ignores the phrase when cap or limit wording precedes it, and it still fails on a genuinely stale figure — checked by planting one before shipping.
Jackson sold — 93.1% → 89.1%, and one sale away from compliance for the first time OFFICIAL
£47.5m guaranteed, £17.5m of add-ons, completed 28 August. Only the guaranteed fee is counted here. Profit ~£35.7m against a book of about £11.8m: he cost £32m from Villarreal in July 2023 on a contract to 2033, and the five-year cap meant that fee was being written off by 2028 rather than 2033, so most of it had already gone. The cap raised the profit on this sale, which is the mirror image of the point this page made about Enzo yesterday.
What leaves: £6.4m/yr of amortisation and £100k/wk. The ratio moves 93.1% → 89.1% — still over the 85% line, but Enzo on top of it would reach 83.0%, under the limit for the first time this window. That is now the whole question rather than half of it.
It also frees a registration slot that mattered more than the money. The non-homegrown senior count was 17 of 17 allowed; it is now 16, so the quota has stopped being an absolute block on further signings. Badiashile and Disasi are the two exits still being worked on.
And the 45-day exchange rule cuts both ways, which is worth stating from this side. Chelsea bought Rogers from Villa on 24 July and sold Jackson back 35 days later — inside the window. If UEFA read the two as one exchange it is Chelsea’s Rogers cost that gets re-valued, not only Villa’s profit. The Athletic reported on 26 August that the guideline would not bite. Both clubs are relying on the same reading, and this page has flagged that reading as arguable rather than settled.
The league window table was wrong on 19 of its 20 rows — and an edit ate two deal rows without a single gate noticing CORRECTION
The “Who’s Selling to Survive” table is a derivation and had stopped being one. Its own caption defines it exactly — disclosed fees on officially completed 2026 deals, loans and frees excluded — so every figure in it can be recomputed from the transfer tables it summarises. Nineteen of the twenty rows disagreed with those tables. Six clubs were shown as having spent nothing at all, including Newcastle at £0 against £174.9m of completed incomings and Manchester City at £0 of sales against £238m. The rows were hand-maintained, the pages moved on, and nothing compared the two. All twenty are now derived from the pages, with the hand-written notes kept, and a gate recomputes them so the table cannot drift from the deals again.
The second fault is worse, because it was self-inflicted and invisible. Promoting Jackson spliced his row out of one array and into another by matching the next }, — and deal rows share source lines, so the edit swallowed whatever followed on the same line. Goretzka’s incoming row vanished from Villa and Kellyman’s outgoing row from Chelsea. All eight gates passed. A missing row breaks no parse, satisfies every invariant, and simply makes the totals smaller — and nothing on the page knew what they should have been.
Two things now catch it. A squad player signed inside the window must also appear in the incoming table, which is a real structural invariant: the squad row survives when the deal row dies, so it is the witness. That check found a third case immediately, one nobody had touched today — Forest’s Gustavo Sá has had a squad row since July, with a book value and an amortisation charge, and his incoming row was never written. A changelog entry from that sweep claims he was added “both halves of him”. One half was missing. And for outgoing rows, which leave no trace on the page once the player has gone, there is now tools/diff-rows.js: it reports every deal row added or removed against a git ref, to be read before committing rather than after.
Badiashile was in the outgoing table twice, and every window total was adding him twice CORRECTION
Two rows, same player, same club, same move. One sweep added the Napoli loan and a later sweep added it again with updated wording, and nothing on this site was looking for a duplicate in a deal table. His relief was therefore double-counted in the window sums, in the amortisation book and in the transfer-balance figures — roughly £10m/yr of savings Chelsea were being credited with twice. The two rows are merged into the newer one. A gate now fails any player appearing twice in the same deal array; the check for duplicates already existed for rumour cards, where it is a cosmetic mess, and did not exist for the tables where it is money.
Badiashile and Disasi were also priced as sales. Both are loans out — Badiashile to Napoli with an option, Disasi to Palace with neither option nor obligation — and both carried a relief figure crediting the amortisation as though the registration had left. It has not. Their notes said so in prose while their numbers said otherwise. Both are now flagged as loans and relieve the wage only, which is what this site has said about loans all along.
And the List A gate now computes. The settlement’s transfer-balance condition is cost-based — savings from every exit against the cost of every arrival, priced on the same footing as the squad cost ratio — and the figure here was typed. Completed business runs −£83.9m/yr, or −£52.6m/yr with the advanced exits included. The card stays amber rather than red for one reason only: with no European football there is no 26/27 List A to file, so the gate guards an empty doorway. That is precisely why the net spend is happening this summer, and it is a debt to 2027/28 rather than a reprieve.
A free transfer was costing the window totals nothing at all — £35.7m/yr across six pages CORRECTION
The cost-per-arrival calculation returned zero for any signing without a fee unless the row also carried a loan flag. So a free signing’s wages vanished from “cost added by this window” entirely. Goretzka was showing as costing Villa £0.0m. On the very page whose card argues that “the free one is the expensive one — a fee buys an asset that amortises and can be sold, a wage buys nothing and recurs”. The card was right and the arithmetic underneath it dropped the wage.
£35.7m/yr was missing across six pages: Villa £13.6m (Goretzka, Özcan, Guessand), Palace £8.1m (McNeil, Guessand), Liverpool £7.8m (Araújo), Everton £4.9m (Johnson), Coventry £1.1m, Fulham £0.2m. Villa’s window swing moves from +£12.4m/yr to +£26.0m/yr.
There were seven different versions of that one line across twenty pages, each special-casing frees and loans slightly differently, and the differences were exactly what caused this. They are now one formula — the one Hull already used: amortisation and the agent fee when there is a fee, and the wage on every arrival, fee or not.
And it exposes something this card cannot fix by itself. The List A gate carried a hand-typed margin of “Villa pass by ~£3.5m/yr” on the cost-based test. The page’s own sums now put the window at adding ~£26m/yr. That figure predates Jackson and Watkins, and the window totals count wages ungrossed while the ratio grosses them, so the two were never on one basis. The cost-based margin is now marked UNVERIFIED rather than passing — the fee-based balance above it is sound, that one is not, and saying so beats printing a number that cannot be reproduced.
Jackson goes back to ADVANCED — this page promoted him too early REVERSED
He was moved to done on the tier-1 exception — Romano reporting the deal complete, documents finished, medical passed, contract signed, with Tanswell adding the five-year term. That exception is documented here and Konsa went through it. It should not have been used for this. No club has announced him.
The argument against was already on the page, twice over. In the same week this site held Savinho for five weeks through a “here we go” and a reported medical, held Bouaddi with every document reported signed, and held Baleba until Manchester United actually posted. And the card itself printed the tension: The Athletic’s headline said the move “nears completion” while its reporter’s text said signed. The right response to a split like that is to wait, not to take the stronger half.
So he comes out of the numbers entirely — the squad row, the £9.8m/yr of amortisation, the £130k/wk, and Chelsea’s £35.7m of profit. Villa 66.5% → 62.7%, headroom out to £38.6m. Chelsea 89.1% → 93.1%, their overshoot back to £49.5m. Both wage bridges re-derived their inputs and agreed once set, and every projection on both pages has been rebased.
One conclusion changes with it, and it is worth being explicit. Leão was reported yesterday as taking Villa past the 70% limit. Without Jackson in the base he does not: 62.7% → 67.1%, with £15.2m still to spare. That finding depended entirely on a signing this page should not have counted — which is the practical cost of promoting early, rather than an abstract one.
A headline that contradicted its own paragraph — and nine more stale ratios behind it CORRECTION
Villa’s loan-quota card said “1 + 6 Left” in green, directly above a paragraph reading “0 of 2 concurrent remaining” and “ROOM: none left domestically”. Wan-Bissaka’s loan on 18 August took the second slot. The body was updated; the big number at the top was not. So the figure a reader sees first said a slot was free while the text underneath called the same thing a binding constraint. The bar sat at 50% with nothing left, and the card was still green. Crystal Palace had the same shape — “2 + 6” above “1 of 2”, left over from before the Guessand loan.
The failure runs one way every time: the prose gets edited and the summary above it does not. tools/check-quotas.js now fails when a loan-quota headline disagrees with its own body, including when the room note says “none left” and the headline disagrees. Verified by sabotage — put the wrong number back and it fails on exactly that.
Then the baseline gate was widened and found nine more. It was matching “ratio is X%” and “X% → Y%” but not the Quick Answers phrasing, “roughly 63% of football revenue” — which is the plain-English answer a reader or a search engine is most likely to lift. Brentford were claiming 75% while computing 84.9%. Manchester City 65% against 57.3%. Newcastle 74% against 70.8%. Ten pages rebased from their own inputs.
Two gates, two days, and both found more than the bug that prompted them. That is the argument for writing the check rather than the fix: the fix closes one hole, the check tells you how many others there were.
The baseline gate had a hole in it and was passing on what it could not see CORRECTION
The gate shipped this morning excluded the changelog by truncating each page at <section id="log">. The data arrays holding every rumour card sit in a script block after that point. So it was scanning 167KB of a 422KB page, never saw a single card’s projection, and reported green.
It now removes only that section and keeps the rest. On the first honest run it immediately found eleven stale figures across three pages — every Villa projection still quoting a baseline two changes old, and two on Chelsea. All recomputed.
A gate with a hole in it is worse than no gate, because no gate makes you check and a green one stops you looking. This one was written, tested against the case that prompted it, and shipped — and the case that prompted it happened to sit in the part of the file it could still see.
One rule came out of it. A live rumour card may state a projection, because the gate now keeps it honest against the current base. A completed deal may not: “60.2% → 63.4%” was true the day it was written and decays the moment anything else moves, and the effect is already in the headline. Those now state what the deal costs instead.
A new gate: does the prose still quote the ratio the page computes? CORRECTION
Twelve of the twenty pages were asserting a squad cost ratio their own inputs no longer produced. Manchester City claimed 63.0% while computing 57.3%. Manchester United said 53.9% against 56.9%, Sunderland 60.9% against 63.2%, Coventry 69.7% against 71.0%. Every one has been rebased from the page’s own figures.
Most of it sat in the answer paragraph and its structured-data twin — the text search engines and AI crawlers read before anything else, which makes it the worst place on the page to be stale. The headroom figures beside them were rebased too.
Nothing was catching this. The status gate reads deal status; the invariants gate reads the arrays; neither reads a percentage in a sentence. It surfaced only because a single free transfer moved one club’s baseline and the knock-on was visible. tools/check-baselines.js now recomputes every page’s ratio from its inputs and fails on prose asserting a different one, and it runs with the rest on every change.
Two things it deliberately does not flag. A sentence reading “68.6% → 62.0%” where 62.0% is the current ratio is a completed move being described, not a stale claim, so a done deal can still say what it did. And the changelog is excluded entirely: a dated entry recording August’s number is the record, and rewriting it to match today would be the opposite of what this tab is for.
The amortisation graph now splits the squad you had from the squad you bought FEATURE
One bar was hiding the more interesting number. The run-off now stacks two series — the squad that was already here in blue, and everyone signed this window in amber — with both totals and a combined figure above it, and a per-season split beside each bar.
It changes what the chart says about a club. A settled squad shows a thin amber band on a thick blue one; a rebuild inverts it. Coventry carry £14.0m already here against £28.9m signed this window, so two-thirds of their amortisation arrived in ten weeks, and their inherited book runs out entirely by 2028/29 while the new one still has three years to run. Liverpool are the other extreme at £143.6m against £18.4m. Same chart, opposite stories, and neither was visible when it was one bar.
Who counts as “this window” is taken from the signing date, not from the flag the squad rows carry. The two disagree: the date catches six players the flag had missed — Garnacho and Cissé here at Villa, Bentley at Coventry, Charles at Fulham, Sá and Diomande at Forest — and never disagrees the other way. A derived test cannot be forgotten the way a hand-set one can, which is the same reasoning that put the sell-ons and the outgoing amortisation on derivations.
Two rows of figures now sit above the chart and they will not always agree, so the panel says which is which rather than leaving a reader to spot it. The first row and the graph are the SQUAD, split by arrival date. The second row is the DEALS, including advanced ones whose players are not in the squad table yet. Where they differ the panel names the gap and what it is — agreed business that has not completed.
Every deal now shows what it costs per year — and the agent fee was being charged five times over FEATURE + FIX
A fee only means something against the charge it creates. £47.5m is a headline; £9.9m a year for five years is the thing that reaches the squad cost ratio. Until now this page printed the fee on every row and the amortisation on none of them. Both tables now carry an AMORT £m/yr column, and a panel underneath gives the number those rows add up into: the squad’s total annual amortisation, what this window has added and freed, and how the charge runs off over the next five seasons as existing deals finish.
None of it is newly typed data, which is the point. Incoming charges come from the player’s own squad row where one exists — real contract dates, five-year cap applied where it bites — and from fee over five years where a deal is advanced and the player is not in the squad yet, flagged est when that happens. Outgoing charges are derived rather than stored: a row’s cost-freed figure is the ungrossed wage plus the amortisation, so subtracting the wage leaves the charge that stops. They cannot drift from the totals above them because they are computed from them.
Loans show a zero, and that is the correct answer rather than a missing one. A loan moves the wage and leaves the registration here, so the amortisation stays too — the point this site has made about loans since the wage bridge, now visible as a column entry instead of a paragraph.
And a bug the new column sat straight on top of. The cost-per-year calculation behind these tables charged the agent fee in full every single year instead of capitalising it and spreading it over five — the same error corrected in the scenario modeller last week and missed here. On a £47.5m signing it overstated the annual cost by £1.9m. Every SCR-cost figure in the Ins and Outs tables, and the window’s cost-added total, move down accordingly.
One thing the new column makes visible and this page is not hiding: the SCR cost figures in these tables count wages at face value, while the rumour cards, the scenario panel and the wage bridge gross them up 1.45x for employer NI, bonuses and image rights. The same signing can therefore read £17.1m in the table and £20.2m on its card. The grossed figure is this site’s convention and the table is the odd one out. It is stated in the panel rather than quietly reconciled, because restating it moves every published window total on all twenty pages and deserves its own pass.
Enzo Fernández at £120m would put Chelsea under 85% for the first time NEW
Revived 26 August — the card has been on this page as DORMANT since City missed Chelsea’s own 5pm deadline on 14 August. Manchester City are now reported ready to bid around £120m, meeting the valuation. This is the single most consequential number on the page.
The amortisation cap is why. The £106.8m paid to Benfica was signed in January 2023 — before 1 July 2023 — so the five-year cap does NOT apply and the fee spreads over nine and a half years to 2032 at ~£11.3m/yr. That leaves a book near £66.3m and a £120m sale books ~£54m of profit. Had he been signed six months later the cap would have halved the book and raised the profit — the mirror image of the Jackson point made on this page yesterday.
Alone it takes Chelsea 93.4% → 86.8%, still over the line but £11.4m short of it. With the Jackson sale as well: 83.0%, and under the 85% limit for the first time this window, with £12.7m of headroom. Two sales inside a fortnight and the worst ratio in the league becomes a compliant one.
The obstacle is reported to be Chelsea’s own. They will only sell if they identify and secure a replacement before the deadline, and that is described as the principal barrier with six days left. Graded as a bid not yet lodged — City had already missed Chelsea’s 14 August deadline to bid for him once.
Jackson agreed at £47.5m + £17.5m — and the book value everyone is quoting is wrong AGREED
Ornstein, 26 Aug: agreement struck with Aston Villa. £47.5m guaranteed plus £17.5m in add-ons, maximum package £65m, personal terms being finalised.
The book value is the interesting number, and the figure circulating publicly is the uncapped one. A £32m fee in July 2023 on a contract to 2033 reads as £3.2m/yr and a ~£22m book — which is where the widely-shared ~£20m comes from. But the deal was signed on 1 July 2023, the exact date the five-year amortisation cap bites. This page charges £6.4m/yr and carries him at ~£11.8m. The cap roughly halves the book and therefore raises the profit: ~£35.7m on the guaranteed fee, not the ~£27m the uncapped reading gives.
It moves Chelsea further than anything else available to them this week: 93.4% → 89.4%, and the overshoot against the 85% limit falls from £51.5m to £27.4m. Still over the line, still the worst ratio in the league, but a quarter of the gap closed in one sale.
And Martínez has been offered to them by his representatives, which would make it three transfers with Villa in one window — Rogers in, Jackson out, Martínez in. Chelsea already carry two senior keepers on £45.7m of combined fees to 2030 and 2031; a third at 33 adds a wage without removing either amortisation charge, at the club least able to absorb one.
Kellyman to Strasbourg: a ~£6m write-off, and another BlueCo move DONE
Announced 25 August. Permanent to Strasbourg for a reported €6m (~£5.2m) on a five-year deal, with Chelsea retaining a buyback.
This is a loss and the page should say so. £19m from Aston Villa in July 2024, two years into a five-year spread under the amortisation cap, leaves a book around £11.4m against £5.2m received — roughly £6m written off. Flagged as derived: he was not carried in this page’s squad table, so the book comes from the reported 2024 fee and the cap rather than from stored data.
And it is another intra-network move. BlueCo selling to BlueCo at a fee neither side negotiated at arm’s length is precisely the fact pattern the Premier League’s fair-market-value test in Handbook App 19 exists for. At 93.4% against an 85% limit, Chelsea are the club with the most to gain from a generous valuation and the most scrutiny on getting one.
The “last updated” notice is gone — it had stopped telling the truth REMOVED
There were two of them. A line under the header reading “DEALS & FEES AS REPORTED [date] · BOOK VALUES & CALCS RECOMPUTE DAILY”, and a script that read that date and, once it was four days old, pushed an amber banner above the header warning that the page had last been checked N days ago.
The second one was firing on all twenty pages. The date it keyed off was hand-typed and ranged from 9 to 19 August across the site — while the deals underneath had in fact been swept on the 24th and 25th. So the site was leading with a warning about itself, generated from the one number on the page that nobody was maintaining. A staleness notice that is itself stale is worse than none: it tells readers to distrust figures that are current.
Both are removed, with their CSS. Nothing else changes — every ratio, book value and window total is unaffected, and the dated entries in this changelog remain the honest record of when each page was actually worked on.
You can now change the numbers — and the card line beside them was still wrong FEATURE + FIX
Every fee on the rumour board is somebody’s estimate. Brugge “value him around €45m”. Al-Hilal’s bid reached this site in the wrong currency and had to be chased down. Marmoush’s fee is arithmetic off a reported two-player budget rather than a figure anyone published. Readers were being asked to take those guesses as given.
So the amounts are editable now. Every card carries a fee box, and incoming cards a wage box too. Type your own number and the card’s cost line and the scenario panel both follow it immediately. Reset puts the reported figure back — overrides are held separately and the underlying data is never overwritten, so there is always something true to return to. Outgoing cards expose the fee but not the wage, because an outgoing player’s relief is derived from his squad row rather than typed, and the fee is the part that actually moves the profit on the sale.
And a fix that should have landed with the modeller rebuild. The card’s own “ADDS £Xm/yr” line was still running the OLD formula — ungrossed wages, and the agent fee charged in full every year. The calculation underneath was corrected; the display beside it was not, so every card showed one number while the panel below computed another. On this site’s own worked example the card said £10.1m and the panel used £10.7m — the exact discrepancy that rebuild was written to explain, sitting in the markup the whole time. Both now call the same helper, and that is checked on all twenty pages: tick a card, and its figure and the panel’s agree.
The 22 August sweep, and a modeller that was wrong three ways DATA + METHOD
Disasi is a plain season loan, not the loan-with-obligation this page recorded. The agreed deal has no option and no obligation to buy, so the £25m estimated fee and the committed-purchase treatment both come off. The amortisation stays here; the relief is wages only. The same correction has been made on Palace's page, from the same reporting.
The scenario modeller was wrong in three ways at once, on every page on this site. An incoming signing's wage was charged with no gross-up, while the wage bridge, the ratio inputs and every note here gross wages by 1.45x for employer NI and image rights — so every modelled signing was 45% cheaper on the wage line than the same player would be in the ratio directly above it. The agent fee was charged in full every year instead of being capitalised with the fee and amortised, so a £60m signing carried £3m/yr of agent cost rather than £0.6m. And sale profit never reached the denominator: nineteen pages let a sale relieve the numerator and stop, when the profit also lands in the denominator through the three-year average, and the twentieth added the whole window's profit when one window belongs at roughly a third.
Why none of it showed up. The first two faults pull in opposite directions and roughly cancel at a typical fee-to-wage ratio — for a £25m signing on £70k/wk the old code gave £10.09m/yr against a true £10.73m, close enough to look right. They do not cancel at the edges: a free transfer on big wages was understated by 45%, a big fee on modest wages overstated by about 9%. Two errors that hide each other are worse than one that does not.
Outgoing relief is now derived, not typed. The hand-set relief on all eighty outgoing rumour cards carried the same ungrossed wage — checked against the squad, the stated figures reproduced the ungrossed derivation almost exactly. Relief and profit now come from the squad row, on the same gross-up and the same five-year cap as everything else, with the typed figure kept as a fallback for the handful of names with no squad row. Profit is allowed to be negative, because some of these sales are losses and the page should say so.
Two method changes: the five-year cap, and the wage input becomes the derivation METHOD
The ratio moves from 83.1% to 93.6% (wages 295→305, amortisation 190→244).
The five-year cap, finally applied. This site's glossary has always described the rule that fees must be amortised over a maximum of five years however long the contract — and the code did not do it, spreading every fee across the whole contract instead. An eight-year deal was therefore charged at five-eighths of its true annual cost. The cap now applies to contracts signed from 1 July 2023, when it took effect; earlier deals are left alone, which correctly grandfathers the January 2023 contracts that prompted the rule and avoids capping long spans that are really a record of extensions rather than of one contract.
Chelsea are the club this rule was written for, and the effect is the largest in the league. The squad carries roughly £1.3bn of gross fees. João Pedro, Estêvão, Páez and Essugo are all on eight-year deals signed in 2025, well after the cap; this page had been spreading each of them over eight years rather than five. Squad amortisation rises from £187m to £244m and the input follows it. The ratio crosses the 85% line to ~93.6%.
One caveat stated plainly: Mudryk and Enzo Fernández signed in January and February 2023, before the cap, so their eight-and-a-half-year deals are correctly left uncapped. The loophole was real and it was legal, and it is still running on those two contracts.
And the wage input is now the derivation. The wage bridge has been showing a derived figure beside a hand-set input since it was built, and on most pages the two disagreed. The hand-set number was anchored to a pre-window figure and never tracked the window, which is why the inputs sat high at clubs that sold heavily and low at clubs that bought. The input is now the derivation on all fourteen accounts-basis clubs, so it updates itself as deals land and the same method produces every club's number. That is what makes the league table comparable, which was the point of building the bridge.
What has not changed is how good the number is. It still rests on two assumptions — 80% of staff cost being players and coaches, and a 1.45x gross-up — and the bridge still shows both. Agreement between input and derivation means they are consistent, not that they are right.
Badiashile added at ADVANCED — a loan the page carried only in prose SWEEP
Benoît Badiashile to Napoli. Mentioned in three places in this page’s commentary and present in none of its tables. Now a row: €3m loan fee plus €1m in add-ons, with a €27m OPTION — not an obligation — to buy next summer, one later report having the bonus dropped for a flat €30m. Napoli have agreed five-year personal terms at €2.5m net conditional on the option firing, and cover his salary during the loan.
Status and treatment. Medical completed at Villa Stuart on 18 August; neither club has announced, so it sits at ADVANCED and contributes nothing to the announced-only ratio. When it does land, only the wages leave — the amortisation stays with Chelsea until somebody exercises the option.
Chavarría announced — and the contract is a year shorter than reported PROMOTED TO DONE
What happened. Chelsea have confirmed Pep Chavarría from Rayo Vallecano, €19m fixed plus €2m in add-ons, the tenth signing of the summer. This page held him at ADVANCED for ten days on the correct grounds: medical done, no club announcement. The announcement has now come.
The detail that moves a number. Reporting had the contract running to 2032; the club give it as 2031. A £16.3m fee over five years rather than six is ~£3.3m/yr instead of ~£2.7m — about £0.6m a year more of squad cost, from a fact that looks like trivia. It is the single most common way transfer arithmetic goes wrong on this site, so it is corrected in the squad row as well as the deal row.
Enzo Fernández stays — City miss the 5pm deadline RUMOUR CLOSED
Enzo Fernández. Chelsea set a hard 5pm Friday (14 Aug) deadline for anyone meeting the £120m ask. Manchester City’s ~£102.5m bid on the 13th fell short, no qualifying offer followed, and the deadline passed. Chelsea have withdrawn the sale terms agreed with his representatives in May and he is now expected to stay for 2026/27. The card stays on the page as dormant — a late City return on different terms is not fully excluded — but the £120m sale and its ~£53m of profit come out of any live modelling assumptions.
Sunday-evening sweep — Xhaka ends it, Zubimendi becomes the reunion target, and Mudryk's road points to Strasbourg
Nothing completed, again. A second full sweep of Sunday's reporting found no new officially announced Chelsea business in either direction, so every counted total still stands: £149.5m of sales, £347.3m committed, −£197.8m window balance, ~£92.5m/yr net cost swing, and the ~82.6% PL SCR estimate. Chavarría remains at advanced — medical done, signatures reported, and still no official Chelsea announcement by Sunday evening. The ladder holds him one rung below done until a club says so.
A rumour died. Granit Xhaka is REMOVED from the Rumour Mill: Sky's Sunday reporting says the Sunderland captain is staying at the Stadium of Light — after the £8m bid was rejected, Xhaka held talks with the club and reaffirmed his commitment, with leading Sunderland into the Europa League reported as decisive; Chelsea are now said to be looking at alternatives. One outlet still frames Chelsea as "refusing to give up", but the player's decision is the newest and firmest word, so the second-bid storyline logged yesterday is superseded and the entry comes off the board.
A rumour born. Martín Zubimendi (Arsenal, 27) enters the Mill in Xhaka's place: Mundo Deportivo (8 Aug, widely relayed) reports Alonso is pushing Chelsea to explore his former Real Sociedad B midfielder, with Arsenal's Bruno Guimarães arrival feeding the speculation. Logged at the reported facts and no further: Arsenal want £77m+, are expected to rebuff offers, and there is no indication Chelsea are ready to seriously pursue it — a want, not a negotiation, and a direct cross-club thread with the Arsenal page.
Re-graded within the Mill. Mudryk: Foot Mercato (via GFFN) reports Chelsea now PREFER a season loan to BlueCo stablemate Strasbourg over Coventry's formal approach — fitness and market value rebuilt away from domestic pressure, playing-time assurances demanded, and (if it happens) a fourteenth intra-network transaction for UEFA's fair-value desk. Delap: Everton have now OFFERED HIM A CONTRACT while preparing their ~£25m bid against the firm £40m ask — personal-terms progress, no club-to-club agreement.
Checked and not changed. Jackson: Villa are still described as weighing/preparing the club-record bid — none submitted, Spurs still in at £65m, so he stays in the Mill. Disasi: Palace negotiations over the loan-with-obligation terms remain ongoing, including a meeting with the player's representatives — still talks, still £0 counted. Badiashile: conflicting framings (Italian reports have Napoli closing on a loan with a ~€30m option; Friday's "long way off" line has not been formally walked back) — stays at talks, counted at zero. Osimhen (Spurs' £50–55m approach leads), Diogo Costa, Diomande, Gusto, Enzo, Sarr and Acheampong: no material movement found. No sanction, settlement or sponsor development. No completed deal carries a countable fee, so amortisation stays derived from the SQUAD contracts, the 3-yr smoothed sale-profit input stays at £115m, and wages stay at £295m. Everything on this page remains an unofficial estimate.
A weekend of bids, not announcements — Palace move for Disasi, Villa ready a record for Jackson, and Chavarría is still unannounced
Nothing completed. A full sweep of the 8–9 Aug window found no new officially announced Chelsea business in either direction, so every counted total stands: £149.5m of sales, £347.3m committed, −£197.8m window balance, ~£92.5m/yr net cost swing, and the ~82.6% PL SCR estimate. Pep Chavarría stays at advanced — the medical was completed in London and Marca briefed the announcement as due "in the coming hours", but the weekend closed with no official Chelsea confirmation, so he remains one rung below done, exactly where the ladder says an examined-but-unannounced player belongs. He would be the tenth signing of the summer.
Status movement — out, all still talks. Disasi: Crystal Palace have now formally SUBMITTED their loan-with-obligation offer (per Fabrice Hawkins, 8 Aug) — he is their priority Lacroix replacement and negotiations over the conditional terms are ongoing; still nothing agreed, still £0 in the ledger. Badiashile: re-worded DOWN within talks — 8 Aug reporting describes Chelsea and Napoli as "a long way off", stuck on formula (Napoli want a loan with an option, Chelsea ~€30m guaranteed) even though the player's personal terms to 2031 are done; Thursday's fresh direct talks did not unlock it. Jackson: firmed but unagreed — weekend reporting has Villa preparing a club-record bid with personal terms not expected to be a problem and the player keen, while Spurs stay in at the same £65m; no club has confirmed anything, so he stays in the Mill.
Rumour Mill re-graded. Delap: Everton now reported preparing a ~£25m bid against Chelsea's firm £40m ask — a gap, not a deal. Xhaka: Chelsea preparing an improved second bid (£10–12.5m plus add-ons range) after the £8m rejection, with Sunderland holding firm that their captain is not for sale. Mudryk: Coventry have made a formal loan approach; Chelsea will let pre-season decide. Gusto: Manchester City join PSG on the interested list but are reported to have backed away at the €80m+ valuation. Enzo: softened from "City advancing" to City EXPLORING as Rodri eyes Barcelona — Chelsea want to keep him, no bid exists, and City's more concrete route is reported to be Lille's Bouaddi. Osimhen and Diomande: no movement found; unchanged.
Figures deliberately not moved. No completed deal carries a countable fee, so amortisation stays derived from the SQUAD contracts, the 3-yr smoothed sale-profit input stays at £115m, wages stay at £295m, and the hero ratio still reads ~82.6% vs the 85% green line. Chelsea beat Milan 3-0 in Saturday's friendly, for the record — the first fixture this page tracks remains Real Sociedad on 15 Aug (Chavarría's earliest possible bow).
Checked and not changed. No official announcement of Chavarría, no confirmed Jackson agreement, no Badiashile signing, no sanction, settlement or sponsor development in the 8–9 Aug window. Everything on this page remains an unofficial estimate.
Chalobah completes, Chavarría signs on, and the exit queue grows two blockbuster names
Graduated to done. Trevoh Chalobah's Como move is complete: medical on the 5th, formalities finished on the 6th, and the player posted his farewell after nearly two decades at the club. Fee unchanged at £25.7m (€30m) plus up to £5.1m (€6m) in add-ons with a sell-on retained; a five-year deal under Fàbregas. Because the ledger already counted the deal at advanced stage, no total moves — the £149.5m of sales, £347.3m committed, −£197.8m window balance and ~£92.5m/yr net cost swing all stand. His row, the list board and the transition chips now read done rather than pending.
Corrected en route. Pep Chavarría stays at advanced — and the 5 Aug claim that he had already taken his medical was premature, which this page had repeated from the briefing of the day. What actually happened: Romano's here-we-go and club-to-club signatures landed on the 6th, and he flew to London on the 7th for the medical and contract signing, announcement expected imminently. The fee reporting has firmed around €19m + €2m add-ons (£16.3m initial per Sky, £18m rising to ~£19.7m in 8 Aug framing); the £16.3m initial figure stays in the ledger with the balance in add-ons. Contract reported to 2032; a first appearance is briefed for the Real Sociedad friendly on 15 Aug at the earliest.
Status changes — out. Badiashile is out of "stand-by": 6–7 Aug reporting has Napoli nearing agreement on a season loan with an option now quoted ~€30m and personal terms framed to 2031 — with Juventus attempting a late hijack. Still talks; still counted at zero. Disasi stays at talks: Palace are preparing an official bid after their loan-with-obligation approach, West Ham's stalled ~£25m agreement lingers, Serie A clubs monitor, and Alonso's comments treat the exit as inevitable. Jackson stays in the Mill despite another week of "agreement" claims — Villa remain in direct talks exploring permanent AND loan with no breakthrough, and Spurs have made him a priority at the same £65m.
Rumour Mill re-graded and expanded. Two heavyweight exit links added, both new since the last build: Malo Gusto (PSG contact, Chelsea valuing him at ~£75m — ~£60m of FER profit on a ~£15m book if it ever happened) and Enzo Fernández (Man City advancing, Maresca reunion, £120m ask against a ~£67m grandfathered book, conditional on a Rodri exit — Real Madrid still circling). Xhaka up a grade within the Mill: full verbal agreement with the player, but Sunderland rejected an £8m bid, so the fee estimate moves to ~£10m and it remains unagreed. Delap firmed: Everton working on the deal and personal terms at a £40m ask, with a loan-plus-obligation floated as the late-window fallback. Mudryk: Chelsea now reported planning a season loan after pre-season assessment, Coventry leading. Diogo Costa: talks reported advancing but the link stays disputed. Jackson's suitor list corrected from "Villa / Newcastle" to "Villa / Tottenham".
Figures deliberately not moved. Nothing new completed carries a countable fee, so the hero numbers are untouched: amortisation stays derived from the squad contracts (Chalobah left the SQUAD array at advanced stage), the 3-yr smoothed sale-profit input stays at £115m (Chalobah's £25.7m was already in the picture and does not materially shift a 3-year average), and the wages input is unchanged (his estimated wage was excluded when the exit reached advanced). The PL SCR estimate therefore still reads ~82.6% against the 85% green line.
Checked and not changed. No official Chelsea announcement of Chavarría had landed by Saturday morning, so he is not done. No club has confirmed any Jackson agreement. No sanction, settlement or sponsor development was found in the 5–8 Aug window — the fourth season without a front-of-shirt sponsor begins as previously logged. Everything on this page remains an unofficial estimate.
Live re-verification — a buy up a rung, a sale down one, and Mudryk is eligible again
The correction that mattered most. Mykhailo Mudryk's four-year meldonium ban was resolved on 1 August by agreement between the FA and WADA — a change in WADA procedure meant an identical result would not be charged today — and he is free to play with immediate effect. The page was still carrying "four-year ban, CAS appeal pending" from launch. The Squad tab's £62m-ghost callout has been rewritten, the BANNED flag removed, his market value marked up from a nominal £5m to ~£10m, and he is added to the Rumour Mill as a loan lever (frees ~£5.2m/yr of wages; a sale at anything realistic books a book LOSS against ~£36m of residual value, which is the opposite of what the settlement needs). Alonso said on 5 Aug that no decision has been taken and that Mudryk could feature in pre-season; three Premier League clubs, Coventry reportedly among them, have enquired.
Added — in. Pep Chavarría (Rayo Vallecano, 28, left-back) enters at advanced: he was in London for his medical on 5 Aug with the announcement briefed as imminent. Fee logged at the Sky figure of an initial £16.3m plus add-ons and flagged as an estimate, because Spanish outlets put the package nearer €25m (~£21.4m) — reported, not fact, and not "done" until a club says so.
Status changes — out. Trevoh Chalobah stays advanced but has moved within the rung: the Como medical was taken on 5 Aug ahead of a five-year deal, so only the announcement is outstanding. Axel Disasi has been demoted from advanced to talks — the ~£25m West Ham agreement stalled while he weighed top-flight interest (and West Ham are a Championship club now), and Crystal Palace are reported on 5 Aug to have submitted a loan-with-obligation instead, which Chelsea did not want. He is therefore back in the squad table and out of the sales total. Benoît Badiashile moves the other way, from the Rumour Mill into the ledger at talks: a €3m loan with a ~€20m option is agreed in principle with Napoli but was described as "in stand-by" on 4 Aug, with Napoli pushing for a plain loan.
Rumour Mill re-graded. Delap up — Everton are working on a deal at a £35–40m ask, with Coventry and Newcastle also credited with interest. Jackson unchanged at talks but Spurs have joined Villa at the same £65m price, and Alonso's 5 Aug wording is logged verbatim rather than paraphrased. Osimhen down — Chelsea have made contact but Tottenham are now in front (a ~€60m bid rejected) with Man Utd also in. Fofana down — reporting now has Chelsea keeping him as depth. Acheampong re-shaped as a loan, which is what the BBC reports Chelsea are prepared to sanction. Diogo Costa added as a new but explicitly contested link (€60m clause, Chelsea valuing him nearer €40m, and The Athletic downplaying it). Badiashile removed from the Mill, having graduated to the ledger.
Consequences carried through. Counted sales fall to £149.5m (Disasi's £25m no longer counts) while committed fees rise to £347.3m, so the window balance deepens from about −£157m to −£197.8m and the net annual squad-cost swing rises from ~£72m to ~£92.5m/yr. Disasi returns to the squad table (~£19m book, ~£6.6m/yr amortisation) and Chavarría joins it, which lifts the derived amortisation and moves the estimated PL squad cost ratio to about 82.6% against the 85% green line — roughly £14.5m/yr of cost headroom left. The 25-man list board is the sharpest change: with Chavarría in, Disasi unresolved and Mudryk registrable again, the non-homegrown senior count reaches 17 of 17.
Method note. The Ins & Outs totals now exclude talks rows entirely — previously every row in the outgoing table fed the sales figure regardless of stage, which would have credited Chelsea with £25m for a Disasi deal nobody has agreed. Confirmed and advanced deals count; negotiations are displayed and not counted.
Checked and not changed. No official Chelsea announcement was found on 5 Aug for Chavarría or Chalobah, so both stay advanced. No agreement was found for Jackson despite one outlet claiming Villa had reached one, so he stays in the Mill. Everything on this page remains an unofficial estimate.
Methodology: squad-cost amortisation now derives from the squad contracts
The headroom model's amortisation input used to be a hand-maintained estimate, while the Squad tab computed the same thing bottom-up from every player's fee and contract dates. The two had drifted apart — by up to £29m across the league, which is several points of squad cost ratio on pages whose whole purpose is showing how close a club sits to a compliance line. The hero model now takes its amortisation straight from the squad contracts, so the headline ratio and the squad table can no longer disagree, and the figure updates itself whenever the squad data changes. The field is still editable: type over it and the what-if model responds as before. Wages remain a stated estimate — clubs publish total staff costs, not the players-plus-head-coach slice the rule needs, so that split is still this tracker's assumption and is labelled as one.
Transfer ledger rebuilt from source — seven deals added, four corrected
Method changed. Rather than looking for news since the last update, both 2026 ledgers were rebuilt from a full source list of Chelsea's summer business and then reconciled against what the page already held. That is how the gaps below survived two previous passes.
Added — in. Danny Welbeck from Brighton, completed 1 Aug on a 2-yr deal, fee undisclosed and logged at ~£5m as an estimate. Jordan Henderson, free from Brentford after a mutual-consent exit, confirmed 3 Aug on a 2-yr deal — the counterpart Brentford's page already carried. Harrison Bettoni, 18, free from Wigan on 13 Jul with FA training compensation (undisclosed, and not a transfer fee).
Added — out. Trevoh Chalobah to Como, agreed 3 Aug at £25.7m + £5.1m with the medical outstanding, logged as advanced — £0 book, so the entire fee is FER profit. Jimmy-Jay Morgan to West Bromwich Albion, permanent in June for ~£4m, another pure-profit Cobham sale inside FY26. Four academy loans and three contract expiries that were missing entirely: Ishe Samuels-Smith (Swansea), Kaiden Wilson (Rochdale, 17 Jul), Max Merrick (Hartlepool, 25 Jul), Harrison Murray-Campbell (KV Kortrijk), and Brodi Hughes, Richard Olise and Sam Rak-Sakyi, released on 30 June. The loans and releases carry no fee and no cost relief — academy wages sit outside the senior SCR numerator.
Corrected. (1) Valentín Barco was still logged "signed per Romano — unannounced"; both clubs announced it on 2 August, so it is now done, and he has been added to the squad table, the runway and the list board. (2) Alejandro Garnacho's Villa loan was flagged with a provisional status while Villa's page recorded it as complete; it was official on 23 July and is now marked done, with the loan nature kept in the fee column. (3) Axel Disasi's destination was "TBC"; West Ham have agreed terms in the ~£25m region, though the player has asked for time, so it stays advanced with the fee updated from the old ~£15m placeholder. (4) Maxence Lacroix was in the ledger but was still sitting in the Rumour Mill as a live target and was missing from the squad table and the list board — the rumour is deleted and he now appears as the £52m signing he is.
Consequences carried through. Window fees now run £174.5m of sales against £331m committed — a net of about £157m, up from ~£140m — with ~£72m/yr of net squad cost added and ~£119m of sale profit booked or agreed. Squad table, book values and amortisation, the runway, the 25-man list board and the homegrown/non-homegrown counts were all re-derived; Chalobah moves out of the retained column, and the non-HG senior count rises to 14–15 of 17 with Lacroix and Barco on the list.
Checked and rejected. Everton's page records an Armando Broja move to Chelsea; Broja joined Burnley permanently in August 2025 and is still there, so no entry was created here. Facundo Buonanotte's Brighton loan is correctly logged in the 2025/26 ledger, not this window — he returned to Brighton in January 2026 and spent the rest of the season at Leeds. A Mamadou Sarr return to Strasbourg remains a rumour and stays in the Rumour Mill.
FA sanction added (31 Jul) · accuracy review · refresh deferred
New — the FA's ruling, 31 July. A third regulator lands on the file. Chelsea were fined £10m and given a suspended two-window registration ban (to 30 June 2027) over 74 admitted breaches of FA rules on agents, intermediaries and third-party investment — secret payments to agents 2011–2018, self-reported by the current ownership during the 2022 takeover. An original suspended six-point deduction was replaced by the transfer ban on appeal; the fine itself was not appealable and goes to grassroots football. Added to the Sanctions tab with a new summary of all three threads — the headline being that Chelsea now carry two suspended transfer bans at once, from the Premier League and the FA, which for a club built on player trading is a larger exposure than the ~£48m of fines.
Line-by-line review of every named person on this page: 57 players across the squad table, both 2026 transfer ledgers, the 2025/26 ledgers, the Rumour Mill and the squad-list board, plus some 50 more players, managers and reporters named in the prose, sanctions timeline and 20-club league notes. Nothing was found of the class this review exists to catch: no player attributed to a club he has already left, no long-completed transfer dressed up as a live rumour, no departed manager still listed in post. Internal arithmetic was re-checked and holds — the fine ledger (£26.7m + £0.9m payable = £27.6m paid), the window balance (£134.8m of sales against £274m committed), the nine-in-Europe / eleven-domestic tier split, and the sales and purchase totals behind every club row.
Two corrections applied. (1) The 20-club league table now carries full official club names — Brighton & Hove Albion, AFC Bournemouth, Newcastle United, Tottenham Hotspur, Leeds United, Coventry City, Ipswich Town and Hull City — matching the net-spend tables, which already used them. (2) The homegrown-senior count in the Squad List tab said "about 8"; this page's own squad data adds up to nine (James, Colwill, Chalobah, Adarabioyo, Lavia, Palmer, Gittens, Delap, Rogers), and it now says so.
What this update is not, stated plainly: external sources were unreachable throughout this review, so nothing here has been re-verified against live reporting, and no developments between 27 July and 4 August have been added. Every deal, fee, rumour and squad-list placement below still carries exactly its 27 July status — including the ones most likely to have moved since: the Jackson sale talks, the Disasi exit, the unannounced Barco deal, and Alonso's promised further sales before the 1 September deadline. Treat the transfer data as a week stale, and the compliance modelling — which recomputes from the underlying figures daily — as unaffected. The next rebuild restores live verification.
Page launched
The Bean Counter's Chelsea tracker goes live at bean-counter.co.uk/chelsea. Launch data: the FY2024/25 accounts (record £262.4m pre-tax loss, £490.9m revenue, £214m amortisation, £1.38bn net liabilities); the UEFA settlement ledger (£26.7m paid 2025, £2.6m fine with £1.7m suspended Jul 2026, up to £51.8m conditional, FY27 ~zero-loss target); the full summer 2026 window — Rogers £117m (British record), Palestra £48.5m, Quenda £42.5m, Emegha ~£21.5m, Denner £8.5m, Satpayev £2m in; Cucurella £51.8m, Santos £50m, George £18m out, Garnacho to Villa on loan with a £42.5m obligation; Barco (£34m via Strasbourg) logged as signed-but-unannounced pending UEFA's fair-value review. Squad book values, the PL 25-man list board, the 85% PL SCR model, the Rumour Mill (Jackson £65m, Osimhen, Xhaka, Diomande, Lacroix and the exit list) and the league-wide tables all ship in this build.
Glossary
Every rule in this tracker, in plain English — each with a real Chelsea example. For the group chat member who just asked "what's SCR?"
Arsenal
Manchester City
Manchester United
Aston Villa
Liverpool
AFC Bournemouth
Sunderland
Crystal Palace
Brighton & Hove Albion
CHELSEA
Newcastle United
Tottenham Hotspur
Nottingham Forest
Everton
Fulham
Brentford
Leeds United
Coventry City
Ipswich Town
Hull City