Manchester City crest
The Bean Counter
Manchester City · Financial Compliance · 2026/27

Don't forget: we have been already condemned. You know, in this country everybody is innocent until guilt is proven. We are lucky that we live in an incredible country where everyone is innocent until proven otherwise.

— Pep Guardiola · press conference · February 2023
Manchester City official crest

The Bean Counter · Manchester City

2026/27 PRE-SEASON
Superbia in Proelio
Football has become a game of bean counting — so here's the abacus. PSR · Squad Cost Ratio · the 115 verdict watch · transfer balance · book values · the Maresca rebuild

State of Play

Manchester City's estimated squad cost ratio is 60.8% against the 70% limit that applies to clubs in UEFA competition, leaving roughly £74.8m/yr of cost headroom. The summer 2026 window stands at £290.0m banked from sales against £460.6m committed on signings — Enzo Fernández at £125m on deadline day is the largest single commitment on the page. Every figure here is this tracker's own estimate, built from published accounts and media reporting, as reported 3 Sept 2026.

Squad Cost Ratio · Estimated
/ 70%
70% wall · 100% red line
One 70% wall, enforced twice — UEFA on calendar 2026, the Premier League on season 2026/27. City's ~£700m revenue base makes it the league's softest wall — the £116m Anderson record buy and the newly agreed-in-principle ~€110m Bouaddi deal fit with ~£40m/yr of estimated room still to spare.
Window Net Balance
net buyers — legal and comfortable; no registration gate applies to City
List A Churn
·
25/26 CL list → projected 26/27 list: Anderson, Monga, Charles & Detourbet in, Bouaddi agreed in principle; Stones, Bernardo, Aké, Savinho & Trafford off; Grealish back from loan; Mukasa & Braithwaite B→A candidates
The 115 — Verdict
PENDING
3½ yrs since the charges · hearing ended Dec 2024 · reportedly "imminent" since May

The Clock — What's Counting Down

DAYS TO SAUDI WINDOW CLOSE
6 SEP
DAYS TO LIST A DEADLINE
~2 SEP · UEFA
DAYS TO PL SCR CHECKPOINT
OCT 2026
DAYS TO UEFA RATIO FREEZE
31 DEC · CALENDAR 2026

The Six Constraints — Pass / Fail / Room Left

PL PSR
Passed
EST USAGE: £0 of the £105m 3-yr loss allowance — FY24's +£73.8m and FY26's estimated small profit swallow FY25's −£10m; the aggregate is a healthy PROFIT (est +£90m±).
ROOM: the entire allowance · one final test Jan 2027, then the rule retires. The 115 concerns EARLIER cycles, not this one.
UEFA SCR
Compliant
NOW: vs the 70% limit — never breached in the SCR era; no CFCB action against City in the July 2026 round that fined four English clubs.
ROOM: of cost/yr before the line — roughly a whole second Anderson-sized deal, every year. Ratio freezes 31 Dec 2026.
FER
Comfortable
UEFA's football-earnings test (~£52m max 3-yr loss): City's aggregate is positive on published accounts — FY25's −£10m is the only red year in a decade.
ROOM: this window's £76m of sale profits (Savinho ~£46m, Trafford ~£19m) lands in FY27 earnings · no settlement, no monitoring.
PL SCR
Not Yet Tested
PROJECTED: vs the 70% green line (red at 100%) — as a Champions League club City carry the 70% cap, not the domestic 85%.
ROOM: of cost/yr · first checkpoint Oct 2026, assessment 1 Mar 2027. Amber only because it has never been run.
Window Fee Balance
Net Buyers — By Choice
COMMITTED: of the sales-plus-balance pool · BALANCE: on confirmed/advanced fees.
ROOM: unlike settlement clubs (Villa, Chelsea), City face NO registration gate — a negative window balance is simply net spend. £125m of sales (Savinho, Trafford, Akanji, Aké) covers roughly half of the ~£254m committed since the ~£95m Bouaddi agreement in principle joined the Anderson record buy on the board.
The 115
Verdict Pending
CHARGED Feb 2023 over 2009/10–2017/18 (plus alleged non-cooperation) · 12-week hearing ended Dec 2024 · verdict reportedly "imminent" since the season ended — still nothing published as of 9 Aug.
RANGE: legal commentators span "cleared" to a 40–60-point deduction on the most serious counts. City deny all charges. Whatever lands, appeals are expected — this shadows everything on this page without touching the 2026/27 arithmetic.

Quick Answers — City's Finances in Plain English

Are Manchester City in trouble with FFP in 2026?

Not under the current rules. On this tracker's estimates City sit around 65% against the 70% squad cost ratio and passed the final PSR cycle with the entire £105m allowance unused. The open question is the past: the verdict on the Premier League's 115 charges (2009–18 era) is still awaited, three and a half years after they were brought. City deny all charges.

What is Manchester City's squad cost ratio right now?

Roughly 61% of football revenue plus net player-trading profit on this tracker's estimates, against a 70% limit — even after the British-record £116m Elliot Anderson signing. UEFA tests calendar year 2026 (freezing 31 December); the Premier League tests the 2026/27 season with an October checkpoint.

What's happening with the 115 charges?

Nothing public — which is the story. Charged February 2023, hearing concluded December 2024, and repeated reports had the verdict landing "within days" of the 2025/26 season ending, then before the World Cup. As of 9 August 2026 the independent commission has published nothing. Potential outcomes span clearance to a heavy points deduction; appeals would likely follow either way.

How did City afford £116m for Elliot Anderson?

Arithmetic. Amortised over five years the fee adds ~£24m/yr plus wages to the squad-cost numerator — against an estimated ~£40m/yr of headroom below the 70% line on a ~£700m revenue base. And the window's £125m of sales (Savinho ~£65m, Trafford £40m, Akanji, Aké) nearly covers the whole fee anyway.

Why did City let Stones and Bernardo Silva leave for free?

Their contracts expired — no fee was available, but ~£28m/yr of wages left the squad-cost numerator, relief that funded the record buy — and, since 8 August's Bouaddi agreement in principle, most of the rest of the rebuild too. In squad-cost accounting, wages off the book are as valuable as fees in.

Haven't City been punished for FFP before?

Yes — a 2014 UEFA settlement (€60m fine, most returned; squad capped at 21 in Europe), and a two-year UEFA ban imposed in February 2020 that CAS overturned five months later, with most alleged breaches "not established or time-barred" and a €10m fine for non-cooperation. The Premier League's 115 charges cover much of the same era under different rules — and are still undecided.

The whole thing in two sentences: under today's rules City are the league's most comfortable club — ~61% ratio vs the 70% wall, PSR passed with the full allowance unused, and a window that sold far harder than it bought: £165m of sale profits and £192m/yr of cost walking out of the door against £368.6m of buys, a net −£44.4m/yr cost swing. The only cloud is yesterday's weather: the 115 verdict, whenever it lands — the detail lives in the other tabs.

Incomings & Outgoings

Summer 2026 window (opened 15 June, closes 1 September — delayed by the World Cup). Fees per media reports. 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. The ladder worked this week: Trafford's £40m Leeds move, held here at ADVANCED for a fortnight, was announced by both clubs on 6 August, and Savinho's move to Tottenham — held here at ADVANCED for five weeks against reporting that twice named a fee this page did not use — was announced by both clubs on 25 August at £75m plus £10m — and the Bouaddi pursuit has climbed to a reported agreement in principle at ~€110m. This is Maresca's first window: a midfield rebuild around the British-record Anderson deal, part-funded by an out-tray of expiring contracts and fringe sales. The 2025/26 tables below now carry January 2026’s business too — Semenyo and Guéhi in, Bobb and the Ortega loan out — which is last season’s window, not this one.

Summer 2026 — Out

PlayerToFee £mWage £k/wkCost freed £m/yrProfit £mStatus

Summer 2026 — In

PlayerFromFee £mWage £k/wkSCR cost £m/yrStatus
Fees Out (sales)
Confirmed + advanced permanent deals
Fees Committed (buys)
Confirmed + advanced permanent deals
Net Window Balance
No gate applies — negative just means net spend
Annual Cost Freed (outs)
Wages + stopped amortisation leaving both SCR numerators
Annual Cost Added (ins)
Fee÷5 amortisation + wages + ~10% agent fee
Net SCR Swing
Change to the annual squad-cost numerator from this window
How the columns map to the rules: SCR cost / Cost freed hits the numerator of BOTH the UEFA 70% and PL 70% ratios (identical cost base, different clocks) · Profit feeds the FER earnings calculation AND both SCR denominators · Fee moves the cash net-spend picture. Wages are estimates.
The bean counter’s headline: the window that paid for itself twice over. The out-tray did the work: Reijnders (~£32m/yr), Rodri (~£28.5m/yr), Marmoush (~£23.9m/yr), Bernardo Silva and Stones walking out on expired £250k+/wk deals, and the earlier Savinho, Trafford, Akanji and Aké sales — twelve departures freeing an estimated ~£205.2m/yr between them. Against that the seven arrivals, the £116m Anderson record buy included, add ~£90.2m/yr: a net cost swing of −£44.4m/yr, £290m of sales against £460.6m committed, and ~£165m of sale profit booked. On a ~£700m revenue base the ratio sits ~61% against the 70% wall — City did not just stay comfortable, they spent a record fee and finished the window cheaper than they started it.

2025/26 Season — In (Summer 25 + Jan 26)

PlayerFromFee £mWindow

2025/26 Season — Out

PlayerToFee £mWindow
Last summer's ~£164m spend (Reijnders, Cherki, Aït-Nouri, Trafford, Donnarumma) was Guardiola's final refresh — and the quiet exits (McAtee to Forest for ~£30m, Ederson, Walker, Gündoğan, the Akanji and Grealish loans) stripped ~£45m/yr of legacy cost. Then January added an £82.5m second act of its own: Semenyo (£62.5m from Bournemouth) and Guéhi (£20m from Palace) in, Bobb (£27m to Fulham) and Ortega (loan to Forest) out. The 2026 window is Act Three of the same rebuild, under a new manager.

Spending Headroom

"Room" means two things for City: the 70% squad cost ratio (UEFA on calendar 2026, the Premier League on season 2026/27 — same wall, two clocks), and the cash net-spend optics of the window. There is no registration gate and no settlement: City's constraints are the ordinary ones, cushioned by the league's biggest revenue. The model below is adjustable — the defaults are my estimates, so put your own numbers in.

The window ledger — fees only

Sales banked / advanced
Savinho, Trafford, Akanji, Aké
Committed on signings
Anderson, Bouaddi (agreed in principle), Detourbet, Monga, Charles, Kilwa
Net window fee balance
Slightly negative — a near-self-funding record buy. No rule requires this to be positive for City; it's shown because it drives the scenario model below
Committed and pending: Bouaddi jumped from pursuit to a reported agreement in principle on 8 August — ~€110m plus ~€5m in bonuses (~£95m), a verbal agreement with the player on a six-year deal, and one open question: Lille want a season's loan-back, City want him now. His ~£31m/yr of amortisation-plus-wages now sits ON the committed board, which is what flipped the window's cost swing positive. The Rodri question cuts the other way: Real Madrid's first approach (hoping for ~€60m) against City's trimmed €75m price would book ~£57m of near-pure profit on a 2019 fee that has nearly fully amortised — though the talks are reported paused as Barcelona circle. The smaller files: Grealish's ~£10.4m Everton talks (player set on it, clubs yet to agree) are cost relief either way; the Savinho replacement hunt (Pedro Neto, Mbaye) is where the next fee lands. Bean counters call this "the window is not over."

The Fined Four — July 2026's CFCB Round, Viewed From The Etihad

Four English clubs were fined in UEFA's July 2026 decisions. City were not among them — the current-rules picture is clean. The comparison is the point: every exit route below runs through selling players, and two of them ran through Manchester.

Club2026 FineSuspendedBreachSettlementExit Route
Aston Villa£19.4m£12.9mSCR 2025 ("significant") · 2nd straight4-yr to 2028/29 · £9.5m paid 2025 · trend formally endorsed£144m of player-sale profits incl. the British-record £117m Rogers sale to Chelsea
Chelsea£2.6mSCR · repeat4-yr · £26.7m paid, up to £51m conditionalAcademy sales (pure profit) + intra-group hotel sales the PL accepted
Newcastle£2.6m + £8.6mBOTH SCR and FER — the doubleObligations continue despite missing EuropeIsak to Liverpool for £125m — one sale to rule the FY25 accounts
Nottingham Forest£2.2mSCRAnderson to CITY for £116m weeks later — the fine dwarfed 53:1 by one transfer, and the buyer is the subject of this page
The structural read: the compliance machinery transfers talent to the biggest revenue bases. Forest's exit route from a £2.2m fine was selling their best midfielder to City; Villa's was selling Rogers to Chelsea. City sit on the buying side of that machine — legally, under rules that price spending as a percentage of income. The 115 case asks a different question: how the income base itself was built.
Why City have no gate: registration restrictions (like Villa's positive-transfer-balance condition) are creatures of UEFA settlement agreements. City's 2014 settlement expired long ago and the 2020 CFCB case fell at CAS — so in 2026/27 City answer only to the standard tests: 70% SCR (both versions), FER, SSR liquidity, and the PL's fair-market-value protocols on any related-party revenue. The binding constraint isn't regulatory at all right now — it's the pending 115 verdict.

Annual constraint — squad cost ratio model

Squad cost = player & coach wages + transfer amortisation + agent fees. Denominator = football revenue + player-trading profit (3-yr average, per UEFA's smoothing). Edit any figure:

UEFA SCR · limit 70%
limit 70%
PL SCR (in Europe) · green 70% · red 100%
green 70%

What-if: add a signing

Added annual squad cost
amortisation (incl. 4% PL levy) + wages + est. agent fee
UEFA ratio after signing
vs 70% limit
Window balance after fee
Cash optics only — no gate for City
Rule of thumb: every £1m/yr of ratio headroom buys either ~£5m of transfer fee (5-yr amortisation) or ~£19k/week of wages. On the default assumptions the practical shape of the remaining window is roughly . The default what-if is the live one: a Pedro Neto-scale ~£50m winger at ~£140k/wk pushes the ratio toward 68% — still inside the wall, and a reminder of why the Savinho fee (and its £46m of profit into the denominator) matters to the sequencing.
Caveats: revenue projection assumes CL league phase money, a second-place PL merit payment and continued commercial growth on FY25's £694m (the record was £715m in FY24). The wages figure is the SCR-relevant slice (players + head coach, incl. estimated bonuses and image rights), not the £408m total staff bill; the amortisation estimate reflects the post-window book including Anderson's ~£24m/yr. On agent fees: UEFA counts them as their own SCR category; our accounts-based amortisation already contains an amortised slice of past capitalised agent fees, so pairing it with the separate £25m agents line double-counts a few £m — deliberately, as a conservative margin. UEFA's precise adjustments (qualifying income lines, FX, averaging mechanics) mean the true ratio will differ — treat this as a planning tool, not a compliance calculation. And none of it prices the one genuine tail risk: an adverse 115 verdict with a sporting sanction, which no spreadsheet on this page can model.

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 balance, UEFA 70%, PL SCR (also 70% for clubs in Europe) and FER earnings. Uses the same base assumptions as the Headroom tab, so tweaks there flow through here. Maresca's stated shopping list is a winger and a striker on top of the midfield rebuild — with Marmoush, Grealish and Phillips all still available to fund it on top of the now-completed £40m Trafford sale. Tracked but not modelled below: Everton have hardened their asking price for Iliman Ndiaye to around £75m and City are reported as unwilling to go there; the Al-Hilal talks have since stalled on the fee (personal terms agreed), but City remain out of it — a link, not a negotiation, so it stays out of the checkboxes.

Incoming rumours

Outgoing rumours

Window balance
Δ annual squad cost
UEFA SCR
PL SCR
Profit booked (FER)
Tick the rumours above to model a scenario — and change any fee or wage to model your own number instead of this tracker’s.
How each lever maps to the rules: an incoming deal adds (fee + the PL's 4% levy)÷5 + wages + ~10% agent fee to both SCR numerators and deepens the window's net spend. An outgoing deal does the opposite three times over — fee into the balance, wages + remaining amortisation out of the numerator, and the profit (fee − book value) into FER earnings and the SCR denominator. City's twist: the most profitable possible sale (Rodri) is a near-fully-amortised Guardiola-era fee, so almost every pound of any fee lands as bookable profit — while the loss-making ones (Phillips, and now Grealish at the ~£10.4m Everton are reported to be discussing, both carrying book values above any realistic fee) STILL help the ratio, because their wages leave the numerator. Selling at a loss can be good bean-counting.

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 it's why Dias's 2019 fee still carries value after his 2026 extension). Wages are third-party estimates (Capology/Spotrac/SalaryLeaks-style databases, cross-checked Jul 2026) — 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
💰 highlighted rows = est. profit if sold ≥£20m — where market value towers over book value. Rodri's 2019 fee is nearly amortised (book ~£8m), so a sale near City's €75m price for Real Madrid would be ~90% pure profit; Foden, Lewis and O'Reilly are the remaining academy products carrying £0 book value — the bean counter's favourite players and the football department's untouchables. Market values are Transfermarkt-style estimates — except Rodri (~£65m ask) and Grealish, which use the figures from live talks per the Rumour Mill. Grealish's line moved on 5 Aug: with Everton's permanent talks reported around ~£10.4m rather than City's earlier £40m ask, his realisable value now sits BELOW his ~£15m book value, so the row drops out of the profit highlight and a sale would book a small accounting loss. Mathys Detourbet (£21.5m est from Troyes, added 9 Aug) carries a LOAN flag — the fee amortises on City's books through his season at Monaco, while Monaco cover the wages. Not listed individually (academy/low book, mostly out on loan or List B): Mukasa, Braithwaite, Heskey, Simpson-Pusey, Mfuni — collectively immaterial to the amortisation picture but pure profit if ever sold. Free transfers & academy players carry £0 book value (that's why selling them is pure PSR/FER profit). Undisclosed fees estimated where flagged ~. Add-ons are treated differently on the two sides of the ledger, and this page says so rather than quietly netting it out: both an incoming and an outgoing fee are modelled at the guaranteed amount, with add-ons counted only when they trigger. This caption used to claim the opposite for incoming deals — that they were modelled all-in — and that was a description of a rule this site does not follow: every incoming row bar two was already on the guaranteed basis, and the two exceptions, Suzuki and Ruggeri, were brought into line on 2 September. Contingent money is not capitalised until it is owed, which is the conservative reading and the one the corrections here have consistently enforced. January 2026's signings (Semenyo £62.5m, Guéhi £20m) carry reported fees, but their contract end dates are ESTIMATES on City's usual January pattern of four-and-a-half years — book values and amortisation for those two rows move if the real terms differ. New-signing wages are estimates until the databases catch up with the window. Amortisation shown on remaining contract; UEFA and the PL both cap the amortisation schedule for new deals at 5 years even on longer contracts — which is why Haaland's 2034 contract is the interesting row: his 2022 fee amortises to term under the old rules, a tiny ~£2m/yr charge for a decade. FIFA’s 5% solidarity contribution is deducted from an international fee, not added to it: a buying club pays the headline number and distributes the 5% out of it, so a purchase costs the full fee; a club selling abroad banks 95% and books its profit on that. Domestic sales are untouched. Both sides are modelled here.
Squad Book Value
Sum of estimated carrying values
Annual Amortisation
Current squad only. Club-wide FY25 charge was ~£150m (est) on the accounts basis
Est. Squad Wages
Estimated senior squad base pay only. Total club FY25 wage bill: £408m (incl. staff, bonuses, image rights)
Rodri's back and the bean count — the £60m question: the club captain returned from the World Cup as a champion (he skippered Spain past Argentina in the final) needing back surgery, with one year left on his deal and Real Madrid at the door. The accounting is brutal in both directions. Sell now: his 2019 fee (~£63m) is nearly amortised (book ~£8m), so a sale at City's trimmed €75m price books ~£57m of profit into FER earnings and the SCR denominator — the single biggest compliance lever City hold (Real opened hoping for ~€60m, and the talks are reported paused as Barcelona circle). Keep him: he walks free in June 2027 and the bookable value evaporates to £0, while his ~£11m/yr wages stay in the numerator through an injury-shadowed season. Every week without a new contract, the beans argue louder for the sale the football side dreads. (An extension re-spreads nothing — there's no book value left to re-spread — but it would preserve the asset. This is the Bean Counter's definition of a hard decision.)

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 agreed-in-principle Bouaddi deal (~£95m over five years) shown as the committed-if-completed layer. This is spending that's already eaten before City buy anyone else.

Assumes current contracts run to term (sales remove their bars; extensions re-spread them). Bouaddi: £81.3m fixed plus £4.3m of add-ons (€95m + €5m) over a 5-year deal to 2031, announced by the club on 26 Aug — amber = committed-if-completed, not yet on the books. The striking feature vs most clubs: the bars FALL away fast, because so much of City's squad is academy (£0) or old, fully-amortised fees — the recurring charge is dominated by the 2025–26 buying (Anderson £23m/yr, Semenyo ~£14m/yr, Reijnders, Cherki, Marmoush, Khusanov, Aït-Nouri).

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 Antoine Semenyo qualifies through five years at Bristol City, while Erling Haaland — born in Leeds, where his father was playing — does not: he was raised and registered at Bryne from the age of three, and birthplace is not the test.

The most expensive squad in the league is the one the quota bites hardest. 20 of the 25 places are used, with five places unused — and City cannot fill them. 5 homegrown and 15 non-homegrown caps the squad at 23, because the seventeen non-homegrown ceiling runs out three places before the twenty-five does. Money cannot lift it: another £100m arrival takes a non-homegrown slot, and only a homegrown signing or an academy player crossing 21 raises the ceiling itself. Four more players are under 21 — Bouaddi, Kilwa, Nico O’Reilly and Jeremy Monga — and they play free of the list entirely, which is the whole reason a rebuild this size fits. O’Reilly is the one to watch: born 21 March 2005, he clears the 2026/27 under-21 line by ten weeks. Next season he needs a place, and because he is City-trained he brings a homegrown one with him. Kalvin Phillips is at Sheffield United and Mathys Detourbet at Monaco, so neither is registered here.

UEFA List A — Champions League

City's List A as registered for the 2025/26 knockout phase (Feb 2026) — the squad beaten 5–1 on aggregate by Real Madrid in the round of 16, in what became Guardiola's final European tie. Players who have since left, or are leaving this summer, are flagged. January’s business is reflected too: Guéhi and Semenyo joined mid-season and were registered for the knockout phase; Oscar Bobb had already gone to Fulham before it. The 2026/27 league-phase list is due ~2 September.

List A Transition · 2025/26 → 2026/27 Champions League

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

Out · 1
James TraffordLEEDS £40m · SOLD · OFFICIAL 6 AUG
Retained · 1
Gianluigi DonnarummaSTAYS · No.1
In · 1
Pierce CharlesSIGNED · SHEFF WED · UNDISCLOSED
NET: Charles arrives as the deputy-in-waiting — which is exactly why the Trafford–Leeds deal got done — announced by both clubs on 6 August at £40m plus £5m of add-ons, a Leeds club record. But don't mistake the fee for profit: his 2025 £27m fee is barely amortised (book ~£21m), so the gain is a modest ~£19m — the wages logic, not the profit logic, drove this one. It also costs City an association-trained name on the list.

Defenders

Out · 2
John StonesFREE AGENT · CONTRACT EXPIRED
Nathan AkéFENERBAHÇE £7m
Retained · 7
Rúben DiasSTAYS · extended to 2029
Marc GuéhiSTAYS · SIGNED JAN 26 · PALACE £20m
Joško GvardiolSTAYS
Abdukodir KhusanovSTAYS
Matheus NunesSTAYS · RB conversion complete
Rayan Aït-NouriSTAYS
Rico LewisSTAYS · CLUB-TRAINED
In · 2
Kaden BraithwaiteB → A CANDIDATE · CLUB-TRAINED
Heaven Kilwa16YO EX-VILLA ACADEMY — U18s, NOT LIST B ELIGIBLE YET
NET: 2 out → 1–2 in, and both incomers are quota-friendly. Losing Stones removes an association-trained name from the homegrown count — the quiet cost of a free exit — though January’s £20m Guéhi signing replaces it, association-trained and already on the books.

Midfielders — the rebuild

Out · 4
RodriGONE · BARCELONA · £51m
Tijjani ReijndersGONE · AL QADSIAH · £52m
Nico GonzálezGONE · NEWCASTLE UNITED · £50m
Bernardo SilvaREAL MADRID · FREE · CONTRACT EXPIRED
Retained · 3
Phil FodenSTAYS · CLUB-TRAINED
Mateo KovačićSTAYS · final contract year
Nico O'ReillySTAYS · CLUB-TRAINED · Wembley hero
In · 3 (+ target)
Elliot AndersonSIGNED · £116m BRITISH RECORD
Divine MukasaB → A CANDIDATE · ACADEMY
Ayyoub BouaddiTARGET — €10m APART ON FEE
NET: Maresca's engine room. Anderson replaces Bernardo's minutes and Bouaddi would insure the Rodri question — but the quota strain is now historic rather than current: McAtee left for Forest in summer 2025 and Bobb for Fulham last January, which between them cut the CLUB-TRAINED pool to three (Foden, Lewis, O'Reilly). One of Mukasa or Braithwaite has to make the B→A step just to reach the four UEFA requires.

Forwards

Out · 1
SavinhoTOTTENHAM £65m · AGREED · HELD FOR A REPLACEMENT
Retained · 5
Erling HaalandSTAYS · contract to 2034
Jérémy DokuSTAYS
Rayan CherkiSTAYS
Omar MarmoushSALE MOOTED — FUNDS THE REFRESH
Antoine SemenyoSTAYS · SIGNED JAN 26 · BOURNEMOUTH £62.5m
In · 2 (+ target)
Jeremy MongaSIGNED · LEICESTER £12.5m
Jack GrealishEVERTON PERMANENT TALKS ~£10.4m — NOT AGREED
Ibrahim MbayeOFFERED TO CITY & LIVERPOOL · PSG WANT €50m
NET: Savinho's £65m funds the refresh; Semenyo, signed for £62.5m last January, is already the senior wide answer; Monga is the development pick. The club is still linked with another winger and a striker before 1 September — the running switched again this week: Mbaye's camp has ruled out Villa and offered him to City and Liverpool (PSG want €50m), while Chelsea's Pedro Neto emerged on 8–9 Aug as the leading like-for-like name — exploratory, no bid yet. Grealish stays on the list unless Everton's newly accelerated permanent talks (~£10.4m reported, nothing agreed, and he is still rehabbing a stress fracture) turn into a deal — or a second loan does.
List A rules: max 25, min 8 homegrown (association-trained), of which min 4 CLUB-trained — shortfalls shrink the list. City's club-trained pool is now THREE: Foden, Lewis, O'Reilly — McAtee's summer-2025 sale removed the spare and Bobb's January move to Fulham took the fourth, so a B→A promotion is required, not optional. Association-trained cover: Anderson, Guéhi, Grealish — the Trafford sale, announced 6 Aug, has already taken his name off it. Monga (17) and Kilwa (16) are too new for List B — List B needs two uninterrupted years at the club since the 15th birthday — so Monga would need a full A spot; Mukasa and Braithwaite qualify for B→A moves having come through the academy.
The registration rule that shapes City's window: nothing exotic — no settlement gate, no transfer-balance condition. Just the ordinary quotas: 25 names, the homegrown minimums, and a club-trained count that has gone from four to three since McAtee and Bobb left — so Mukasa or Braithwaite has to be promoted from List B to fill it. The completed Trafford sale trims the association-trained cover as well, and a Grealish exit would trim it again; that, not money, is the list-building constraint for the ~2 September deadline.

Sanction Tracker — Past, Present & The 115

The SCR Glidepath — Never The Problem

100% 90% 80% 70% 60% UEFA LIMIT 90% 80% 70% FY2023FY2024FY2025FY2026 ~60% est ~56% est ~59% est ~65% est
City line is directional (UEFA does not publish exact club ratios; these are revenue-based estimates). The limit stepped 90% → 80% → 70% as UEFA phased the rule in — and City's ~£700m denominator has kept them a country mile inside it every year. The sanctions story below is about a different decade.
May 2014

UEFA FFP settlement — the first strike

City settle UEFA's first break-even investigation: a €60m fine (€40m returned on compliance), Champions League squad capped at 21 for 2014/15, a wage freeze and transfer-spend restrictions. City contest the methodology but sign. The restrictions lapse after two compliant seasons.

November 2018

Football Leaks

Der Spiegel publishes hacked internal emails alleging that Abu Dhabi ownership funds were routed through inflated sponsorships (Etihad, Etisalat) and off-book arrangements across 2012–16. City call the material stolen and "out of context". UEFA opens an investigation in March 2019.

February 2020

UEFA: two-year ban + €30m fine

The CFCB adjudicatory chamber finds "serious breaches" — overstating sponsorship revenue in accounts and break-even submissions — and bans City from UEFA competition for two seasons. City appeal immediately, calling the process "prejudicial".

July 2020

CAS overturns the ban

The Court of Arbitration for Sport rules most alleged breaches "not established" and the rest time-barred under UEFA's five-year limitation rule; the ban is lifted and the fine cut to €10m for obstructing the investigation. Critics note CAS did not declare the underlying conduct clean — much of it was simply out of time. This distinction is why the Premier League case, with no limitation period, still matters.

6 February 2023

The 115 — the Premier League charges

After a four-year investigation, the PL charges City with ~115 alleged breaches across 2009/10–2017/18: inaccurate financial information, undisclosed manager and player remuneration, UEFA FFP and PSR non-compliance, and ~35 counts of failing to co-operate (alleged to run to 2023). No limitation period applies. Potential sanctions in the rulebook run from fines and points deductions to expulsion. City deny all charges and welcome the independent review.

Sep – Dec 2024

The hearing

A 12-week closed hearing before an independent commission at the International Dispute Resolution Centre in London. Separately, City fight the league's Associated Party Transaction rules in arbitration — winning rulings that parts of the 2021 and 2024 APT frameworks were unlawful, forcing the league to rewrite them. Two fronts, one theme: how related-party revenue is valued.

2025 → 9 August 2026

The longest wait in football law

Verdict expected "early 2025", then Easter 2026, then "within days of the season ending", then "before the World Cup". All of those dates have passed. As of 9 August 2026 nothing has been published — over 3½ years since the charges and 20 months since the hearing closed. Guardiola left in May with the case still open; Maresca inherits it. Legal commentators' predictions span full clearance to a 40–60-point deduction on the most serious counts, with appeals near-certain either way. Nothing on this page's 2026/27 arithmetic depends on the outcome; everything about the club's history does.

Meanwhile · July 2026

The current-rules scorecard: clean

No CFCB action against City in the July 2026 round that fined Villa, Chelsea, Newcastle and Forest. No PSR issues in the final cycle. No settlement, no monitoring, no registration conditions. Under the rulebook as it stands today, City are among the most compliant clubs in Europe — the tension of this entire page in one sentence.

Last Accounts — FY2024/25 (y/e 30 June 2025)

The season of transition: third in the league, out of the Champions League early, the first pre-tax loss in over a decade — and still the biggest revenue in English football bar none until the FY26 figures land. Headline: revenue £694m, a £10m pre-tax loss. Reality: a soft year by City's standards that most clubs would take as a triumph.

Revenue
£694m
−3% on FY24's record £715m — lower PL merit & UEFA money
Pre-tax result
−£10m
First loss since FY14 · vs +£73.8m in FY24
Player sale profits
+£95m
Álvarez, Cancelo, Harwood-Bellis, Gómez — the trading engine
Operating loss (est)
≈−£96m
Before player trading & interest — estimate from disclosed lines
Wage bill
£408m
~59% of revenue · down £5m on FY24 as bonuses fell
Player amortisation (est)
≈£150m
Estimated from squad cost analyses — not separately confirmed

Revenue mix

Commercial
£340m
Broadcasting
£279m
Matchday
£75m
The commercial machine — and why it's the whole argument: £340m of commercial income is the largest line, anchored by Etihad (front-of-shirt and stadium naming, City's flagship deal), the Puma kit partnership (extended on reported £1bn-scale terms, among the biggest in world sport) and a portfolio of 40+ partners, several from Abu Dhabi. This is the base that makes 70% of revenue such a soft cap — and it's also precisely the terrain of the APT litigation and, historically, the 115 charges: what a related-party sponsorship is really worth. Under the PL's rewritten fair-market-value protocols every new related-party deal is benchmarked before it counts. The bean-counter's read: the machine is legal, enormous, and permanently under audit.

How a £96m operating loss became only −£10m

Operating loss (est)≈−£96m
Profit on player sales (Álvarez, Cancelo, Harwood-Bellis, Gómez)+£95m
Net interest & other (est)≈−£9m
Pre-tax result−£10m
The whole story in one line: City's model needs ~£90m/yr of player-trading profit to wash its operating costs — and the academy (Palmer, Álvarez-class flips, then McAtee and Bobb) keeps supplying it. Balance-sheet footnotes worth knowing: no material external borrowings (City are effectively debt-free bar leases — the sharpest contrast with their rivals' £500m+ debt piles), and ownership funding has come as equity, not loans, since the takeover: £1.3bn+ of share capital with no repayment claim. FY26 accounts (y/e 30 June 2026) are due at Companies House by 31 March 2027, with the PL's PSR submission by 31 December 2026.

Rules & Compliance Status

Every regime that applies to City, 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). One regime on this board has no limit in pounds at all: the 115, which is about whether the numbers fed into the old regimes were true.

COMPLIANT CLOSE / UNRESOLVED NOT COMPLIANT

Compliance calendar

~2 Sep 2026CL LIST A DEADLINE
Oct 2026PL SCR MONITORING
31 Dec 2026UEFA SCR YEAR ENDS · PSR ACCOUNTS DUE
Jan 2027FINAL PL PSR ASSESSMENT
~Early Feb 2027CL KNOCKOUT LIST WINDOW
1 Mar 2027PL SCR ASSESSMENT
31 Mar 2027FY26 ACCOUNTS FILING
7 Jul 2027SSR TESTS
???115 VERDICT — NO DATE EXISTS
Premier League · to end of 2025/26
Compliant

PSR — Profitability & Sustainability

LIMIT: £105m max pre-tax loss over rolling 3 years (£15m if not equity-funded)
BasisClub financial years (City's y/e 30 June) — aggregate of FY24 + FY25 + FY26.
What countsAggregate 3-yr pre-tax result, with deductions for infrastructure, academy, community & women's football costs.
CityFY24 +£73.8m, FY25 −£10m, FY26 estimated modestly positive (cup double, second place, and the McAtee and Bobb sale profits, both of which fall inside the year to 30 June 2026). The aggregate is a comfortable PROFIT — City won't touch the allowance, let alone the limit. Seven of the PL's charges allege PSR breaches in EARLIER cycles; this cycle is clean.
DeadlineAccounts submitted by 31 Dec 2026 → final-ever PSR assessment January 2027. After that the rule is retired.
UEFA · the headline ratio
Compliant

SCR — Squad Cost Ratio (UEFA)

LIMIT: squad cost ≤ 70% of adjusted revenue + net player-sale profit (phased 90% → 80% → 70%)
BasisCalendar year — the current test period is 1 Jan – 31 Dec 2026.
What countsPlayer + head-coach wages — including wages of loaned-in players — plus loan fees, transfer amortisation/impairment and agent fees. The PL's 4% transfer levy and FIFA's 5% solidarity contribution capitalise into registration cost and ride along inside the amortisation. Amortisation capped at 5 years for new deals.
CityNever breached in the SCR era, and ~65% on this tracker's 2026 estimate even after absorbing Anderson's ~£24m/yr — the agreed Bouaddi fee's ~£20m/yr is still to land. The £694m revenue base means the 70% cap allows ~£500m of squad cost — more than some rivals' entire revenue. Untouched by the July 2026 CFCB round that fined four English clubs.
DeadlineCalendar year freezes 31 December 2026; clubs report in spring, CFCB verdicts land summer 2027.
UEFA · break-even's successor
Compliant

FER — Football Earnings Rule

LIMIT: ~£52m (€60m) max loss over 3 years · +~£8.6m/yr more if in "good financial health"
BasisFinancial years — the 3-year aggregate of the club's own accounting periods, assessed annually by the CFCB.
What countsFootball earnings only — it EXCLUDES profits on asset sales to related parties, player swaps and related-party mark-ups. Related-party sponsorships count only at assessed fair value.
CityAggregate positive on published accounts — FY25's −£10m is the only recent red year, and FY24's +£73.8m more than covers it. The window's ~£76m of sale profits lands in FY27's calculation. The fair-value footnote is the one to watch: FER is the rule under which UEFA re-values Abu Dhabi sponsorships if it doubts them — the ghost of 2020, dormant but not dead.
DeadlineAssessed with the SCR each summer on the prior season's accounts. No settlement, no conditions.
Premier League · live from 2026/27
Not yet tested

SCR — Squad Cost Ratio (PL)

CLUBS IN EUROPE (incl. City): green 70% · red 100% — CLUBS NOT IN EUROPE: green 85% · red 115% · +£33m/3yr equity top-up (max £15m/season)
BasisSeason / financial year (2026/27, i.e. y/e 30 June 2027) — unlike UEFA's calendar-year clock. A January signing hits the PL calculation for this season but splits across two UEFA years.
What countsSame cost base as UEFA's version; denominator explicitly includes net profit/loss on player sales. Two-tier enforcement: over green but under red = fine (levies payable for breaches from 2027/28); over red = risk of sporting sanctions.
CityAs a Champions League club City carry the 70% green line at home too. Projection ~65% on the model defaults — still the most headroom in the division in absolute terms (~£40m/yr of cost). Amber purely because the test has never been run; on the numbers it is the league's most comfortable pass.
DeadlineMonitoring checkpoint October 2026; formal assessment 1 March 2027, after the January window.
Premier League · live from 2026/27
Expected pass

SSR — Sustainability & Systemic Resilience

TESTS: liquidity headroom ≥ £0 after an £85m stress test · positive equity ratio ≤90% (26/27) → 85% (27/28) → 80% (28/29+)
BasisTested 7 July each year (newly promoted clubs: 31 October), covering the current and following season.
What countsNot a spending cap — solvency tests. The liquidity calculation counts 40% of squad market value as a liquid asset; the £85m stress test models relegation or missing Europe. Owner equity injections count in a club's favour.
CityEffectively debt-free (no material external borrowings), equity-funded ownership since 2008, positive equity, and one of the sport's most valuable squads counting at 40%. The easiest pass on this board.
DeadlineFirst full tests 7 July 2027 for 2026/27, with in-season submissions from the start of the season.
Premier League · City's specialist subject
Rewritten twice

APT / Fair-Market-Value Rules

TEST: any deal with an "associated party" (same-ownership sponsor, related entity) counts only at independently assessed fair market value
What countsSponsorships, naming rights, intra-group services. The league benchmarks each deal before the revenue counts for PSR/SCR denominators; shareholder loans were dragged into scope after City's own legal challenge exposed the gap.
CityThe rule exists in its current form largely because of City — and City twice beat the league in arbitration over it (2024: parts of the rules unlawful; 2025: the amended version too). The current framework is the third attempt. With Etihad and a large Abu Dhabi partner roster, every renewal passes through FMV review — a permanent, structural friction rather than a pending charge.
ConsequenceIf a deal is marked down, the denominator of BOTH squad-cost ratios shrinks and PSR/FER earnings fall. With ~5 points of ratio headroom, City could still absorb a meaningful markdown — the rule's bite is reputational and precedential, not arithmetic, at current spending levels.
Independent commission · verdict pending
Undecided

The 115 — PL Charges 2009–18

CHARGES: ~115 alleged breaches — inaccurate financial information · undisclosed remuneration · UEFA FFP & PSR non-compliance · ~35 counts of non-cooperation
BasisSeasons 2009/10–2017/18 (cooperation counts alleged to 2023). No limitation period — the shield that worked at CAS does not exist here.
StatusCharged Feb 2023 · 12-week hearing ended Dec 2024 · verdict unpublished as of 9 Aug 2026 despite serial "imminent" reports. City deny every charge.
RangeThe rulebook allows anything from dismissal of all charges through fines and points deductions to expulsion; commentators' central case for a finding on the serious counts is a large deduction. Appeals are near-certain from whichever side loses.
ConsequenceNone for the 2026/27 spending maths on this page — the charges concern whether PAST inputs were honest, not current limits. But every sponsorship valuation, every "most compliant club in Europe" line above, is read through this pending case. It is the board's only genuinely unquantifiable row.
UEFA Annex G.3.5 + PL FMV protocols
Not in play

Swap-Deal / Player-Exchange Rule

TEST: opposite-direction transfers between the same two clubs = an EXCHANGE if (a) concluded within 45 DAYS of each other AND (b) with similar payment obligations · recognised value = the LOWER of fee and residual book value
What countsSubstance over form — deals weeks apart can be linked. The 2026 poster children are elsewhere: Villa–Chelsea (Rogers/Garnacho) and Newcastle's Anderson–Vlachodimos precedent. For academy players book value is £0, so an exchange kills the profit entirely.
CityClean this window, and more clearly than this page first said. The Anderson purchase from Forest does have opposite-direction history with the same club — McAtee went the other way for ~£30m — but that sale completed on 20 July 2025, a full YEAR before Anderson arrived, so the 45-day window is nowhere near engaged. The only other Forest traffic is Stefan Ortega's fee-free loan, which ended on 30 June. Nothing to test, and City are the buyer in any case — the rule punishes inflated profit recognition on the selling side.
ConsequenceNone. On the corrected dates the two Forest deals sit twelve months apart, so no revaluation question arises — the earlier version of this row assumed they were weeks apart and overstated the risk.
Terminology · where "FFP" went

FFP → what it means now

"Financial Fair Play" (2010) was rebranded by UEFA in 2022 as Financial Sustainability Regulations: solvency (no overdue payables) + stability (FER) + cost control (SCR). Domestically, the PL's version was PSR (2013), now being replaced by SCR + SSR from 2026/27. So when pundits say City have an "FFP problem", the precise version is: no problem at all under any live rule — and an unresolved case about whether the numbers behind a decade of old FFP submissions were accurate. Different questions, one club.
Accounting mechanics

Amortisation & "pure profit"

Fees spread over the contract (max 5 years); sale profit = fee received − remaining book value − any sell-on shares owed, booked instantly. Academy products (Bobb £27m and McAtee £30m across 2025/26, Palmer £42.5m in 2023, Foden if ever) are ~100% profit; fully-amortised veterans (Rodri, Grealish's fee by 2027) approach it. Buying works the other way: Anderson at £116m adds only ~£24m/yr of cost. That asymmetry — sales count at once, buys count in fifths — is why a club with City's academy and revenue can rebuild annually and still show falling squad cost. It is the entire logic of this summer.

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 updated 24 Jul — 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.

ClubEurope 26/27Green capRev £mWages £mW/RCompliance notes
ArsenalCL · CHAMPIONS70%~617~328~53%Comfortable on both ratios; CL runners-up 25/26. Amortisation £170m+ the main cost line.
MANCHESTER CITYCL70%69440859%The subject of this tracker: Maresca replaces Guardiola, the British-record £116m Anderson buy absorbed with room to spare, a ~€110m Bouaddi agreement in principle behind it, the 115 verdict still pending. See every other tab.
Manchester UnitedCL70%~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 VillaCL · EL HOLDERS70%37827372%Mid-UEFA-settlement, fined twice (£19.4m in Jul 2026, 2/3 suspended with the trend endorsed) — the £117m British-record Rogers sale to Chelsea is the exit route.
LiverpoolCL70%~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.
BournemouthEUROPA70%~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.
SunderlandEUROPA70%~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 PalaceEUROPA · CONF WINNERS70%~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.
BrightonCONFERENCE70%~222~165~74%FY25 costs rose sharply on amortisation; historically balanced by elite player trading profits.
Chelsea85%~541~360~67%Xabi Alonso era. UEFA settlement (£26.7m paid, up to £51m conditional), fined again Jul 2026 — then broke their record for Rogers (£117m) days after loaning Garnacho to Villa, walking the swap-rule tightrope. League-high £212m amortisation; missing Europe eases the cap to 85%.
Newcastle85%~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.
Tottenham85%~526~222~42%Lowest wage ratio among the big-revenue clubs — the league's most comfortable bean-counting position.
Nottingham Forest85%~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.
Everton85%~187~160~86%Two PSR deductions in 23/24; new stadium revenue is the plan for growing under the 85% cap.
Fulham85%~180~145~81%Small-revenue cohort where 85% barely funds a competitive XI — the other side of the SCR squeeze.
Brentford85%~195~125~64%The sustainability model club — comfortable margin on every metric.
Leeds85%~150*~110*~73%*FY25 = promotion season. Second PL season consolidating.
CoventryPROMOTED · CHAMPIONS85%~45*~35*~78%*Championship-era accounts. PL broadcast money transforms the denominator overnight — big headroom if they spend sensibly.
IpswichPROMOTED85%~145*~115*~79%*FY25 reflects their last PL season. Straight back up at the first attempt.
HullPROMOTED · PLAY-OFFS85%~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.
The tier divide is the story of 2026/27: nine clubs in Europe live at 70/100 while eleven live at 85/115 — meaning Chelsea, Newcastle, Spurs and Forest all get 15 points MORE domestic spending headroom than City and Villa precisely because they failed to qualify. It barely matters at the Etihad: 70% of £694m still buys more squad than 85% of anyone else's revenue — the cap is relative, and City's denominator is the biggest. UEFA settlement obligations (Chelsea, Newcastle, Villa) travel with the club regardless; City carry none. And note the squeeze cases at both ends: Bournemouth and Palace dragged down to 70% by success, Fulham and the promoted clubs for whom even 85% of a small revenue is a hard ceiling.
Sources: Deloitte Annual Review (league totals), club accounts via Swiss Ramble/Maguire/BlueCityBrain analyses, UEFA CFCB statements. ~ figures are estimates; * marks accounts from a different division. Every club has its own page with the full treatment — transfers, book values, A-list, headroom — via the menu at the top.

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.

THIS WINDOW: disclosed fees on officially completed 2026 deals only; undisclosed counted £0, loans & frees excluded — Trafford's £40m (official since 6 Aug) now qualifies and joins City's sales line as the shared league table refreshes; Akanji's £13m stays out as officially undisclosed, and the advanced-but-unofficial Savinho (£65m) and Bouaddi (~£95m) deals don't appear yet. LAST 5 YEARS: net spend 2021/22–2025/26, Transfermarkt basis (€ converted), ~ = estimated. The five-year view holds the sting for City: SIXTH in net spend — behind Spurs, Liverpool, Chelsea, Arsenal and United — across a stretch containing two titles and a treble. Guardiola's line about wanting to be first on that table was only half a joke: efficiency, academy profit and £758m-scale rivals overspending are how the beans tell City's story. This window will move them up it.

Can Anyone Still Catch the Big Six?

The question underneath every number in this tracker — asked, for once, from inside the castle. The honest answer: the rules City are now most comfortable under are the ones that make City hardest to catch.

Why the door is mostly shut — and who shut it

The 70% rule is a percentage of revenue — it doesn't cap spending, it caps spending relative to income. City's 70% of ~£694m buys a ~£485m squad; Villa's 70% of ~£510m buys ~£357m; Bournemouth's buys a fraction of that. The gap is locked in by design. And the FER kills the only ladder anyone ever actually climbed: Abramovich's Chelsea, Newcastle's takeover surge — and early City themselves — all spent ahead of revenue, which is exactly what's now illegal. The clubs at the top climbed the ladder, then wrote rules that pulled it up; City climbed it last and fastest, which is precisely what the 115 charges interrogate. Worse for the chasers, the compliance machinery itself transfers talent upward: Forest's exit route from a £2.2m fine was selling Anderson to City for £116m. The fined feed the rich, and this page's subject is the richest.

The cracks in the door

1 · Grow the denominator. Every £1 of new revenue is 70p of new squad allowance — the game Villa are playing with Champions League money and record sponsors, and the game City mastered a decade ago. 2 · The trading engine. Net transfer profit counts IN the denominator and in FER earnings — Brighton have run the loop for a decade, and City's own academy (Palmer, Álvarez-era flips, McAtee's £30m and Bobb's £27m) shows the incumbents run it too. 3 · Efficiency is legal. Villa reached the Champions League on the league's 5th-lowest five-year net spend; City themselves rank only sixth-biggest on that table — brains compound under these rules. 4 · The rich can now fail permanently. United's £650m five-year net spend bought one top-four finish; under squad-cost rules, mistakes consume finite headroom even for giants. Bad buying is finally fatal at every level — the one discipline the cap imposes on City too.

The bean counter's verdict: catching the Big Six in one leap is dead — the rules exist to prevent precisely that, and they suit the club with the £694m denominator better than anyone. What remains for the chasers is the turnstile: gatecrash Europe on efficiency, monetise it, sell your stars for compliance fuel, and let revenue compound until 70% of it rivals 70% of City's. It takes a decade and it charges admission — usually your best player, often to a club like this one. The honest footnote from the Etihad: whether the incumbent's own ladder was climbed fairly is exactly what an independent commission has spent nineteen months deciding. The door isn't just redesigned so only the well-run fit through — it's guarded, and the guard's own paperwork is still being audited.

Changelog

Every update to the Bean Counter's data, newest first. Maintained manually with each rebuild.

3 Sept 2026

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.

3 Sept 2026

Stephen Mfuni’s loan to Coventry was on neither club’s page OFFICIAL

A Premier League to Premier League loan, missing from both ends. The 18-year-old defender joined Coventry on a season loan announced on 30 August, a step up from last season’s Championship spell at Watford. It is recorded here and on Coventry’s page.

The both-sides check exists precisely for this shape of miss — a deal recorded on one page and not the other — and it did not fire, because it only inspects deals carrying a fee. A free loan is invisible to it. That is now a known hole rather than an unknown one.

It moves the wage line and nothing else: no fee, no book value, nothing to amortise. No relief is assumed on any of them. Nobody publishes what share of a loaned-out player’s wage the borrowing club carries, and where a loan goes down the pyramid the parent usually keeps paying most of it. Every wage here is an estimate and flagged as one. Wages go to £235m and the ratio to 60.8%.

3 Sept 2026

Nypan’s loan to Lommel added, and an HTML entity was sitting inside a player’s name OFFICIAL

Sverre Nypan goes to Lommel SK on a season loan — a City Football Group club, so the same structure Villa use with Annecy and Vitória. It moves the wage line and nothing else: the fee paid to Rosenborg keeps amortising here, because only a sale stops that.

And a small fault with a large precedent. Issa Kaboré’s row, added yesterday, spelled his name with an HTML entity — Kaboré — rather than the character. Every cross-page check on this site matches players by name string, so an entity in a name is a player who cannot be found: the double-counting checks, the both-sides checks and the squad reconciliation would all have skipped him silently. It is the same failure as searching for “Chavarria” without the accent and concluding the player was missing, which nearly added a duplicate to Chelsea yesterday. Names are keys on this site, and keys have to be written the way they are read.

Wages go £236m on the bridge and the ratio to 60.9%; the overview cost swing is −£43.4m/yr.

3 Sept 2026

Ndiaye in at £60m, Grealish out on loan, Kaboré sold — and the loan is the one that matters OFFICIAL

Iliman Ndiaye signed on deadline day for £60m guaranteed plus £5m of add-ons, five years. Only the guaranteed fee is capitalised. It costs about £30.7m/yr all in and takes the ratio 59.1% → 61.1%; on a £720m revenue base a club-record-adjacent forward is under a point and a half.

Jack Grealish goes to Everton on a season loan, and the distinction from a sale is the whole entry. This page carried a card pricing a £10.4m permanent. What happened was a loan — so ~£6.8m/yr of wage share leaves and ~£17m a year of amortisation stays right here. The £100m paid to Aston Villa in 2021 keeps writing down whether he plays on Merseyside or not, and only a sale would stop it. A reader looking for the cost of Jack Grealish to Manchester City in 2026/27 should read £17m, not zero.

Issa Kaboré joins Wrexham permanently for about £2m guaranteed, up to £4.75m, with City keeping a 20% sell-on and a matching right. He had no squad row here after five loan seasons, so the row correctly relieves nothing — a player who has not been in the building does not sit in a squad-cost ratio, and pretending the sale freed cost would invent relief that was never in the numerator.

Inputs: wages £234m → £237m on the bridge, amortisation £222m → £235m from the squad table with Ndiaye’s £12m in it. The overview cost swing was typed at −£59.1m/yr and is −£42.2m/yr; the window ledger goes to £290m of sales against £460.6m committed.

2 Sept 2026

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.

2 Sept 2026

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.

2 Sept 2026

Enzo signed, and Marmoush corrected — two pages had been telling two different stories about one transfer OFFICIAL + CORRECTION

Enzo Fernández is a City player, announced on deadline day at £125m on a five-year deal. He costs about £43m/yr all in — £26m of amortisation with the levy over five years, £2.5m of agent fee, £14.5m of grossed wage — the largest single annual cost on this page. The ratio goes 56.4% → 58.1%, still £96.8m clear of the 70% limit.

Omar Marmoush was the bigger fix, and it was an inconsistency rather than a misprint. This page carried him as an advanced £50m permanent sale: £12m of profit booked, and both the wage and £13.3m of amortisation stripped out, taking the ratio to 53.4%. Tottenham’s page carried the same deal as a loan with a purchase obligation recognised from conversion, capitalising nothing. One transfer, two pages, two incompatible treatments — and each was internally consistent, which is why neither looked wrong on its own.

The announced structure is a season loan with a mandatory £60m obligation, £50m guaranteed plus £10m of add-ons. On this site’s standing convention a purchase obligation is recognised from conversion, not from now — the treatment Villa’s Wan-Bissaka and Garnacho rows get. So nothing is sold here this season: the loan frees the £140k/wk wage and none of the amortisation, exactly as the Kalvin Phillips loan does, and the £12m of profit lands next summer against £37.9m of book value travelling with him.

The convention has a known weakness here and both pages now say so. It was written for conditional obligations and this one is mandatory. An unconditional obligation is substantively a sale, and the stricter reading would derecognise him now. The disagreement is flagged on both sides rather than quietly settled, because consistency between the two pages was the thing worth protecting.

What it dragged out with it. The overview claimed £338m of sales, which counted Marmoush’s £50m as banked money for a sale that has not happened; it reads £288m. Booked profit £177m to £165m, and the window cost swing −£81.3m/yr to −£68.0m/yr. Also: the Bouaddi row still said “still held at ADVANCED, no club has announced” a week after City announced him on 26 August — the status field had been moved and the sentence explaining it had not, which is the harder version to catch. And his squad row carried the dob key twice, so the second value won silently.

1 Sept 2026

Enzo Fernández at £125m, equalling the British record ADVANCED

Agreed with Chelsea on deadline day, permission granted to travel for a medical and to sign. Advanced until a club announces him, so he contributes nothing to the headline ratio yet — and £125m matches what Liverpool paid Newcastle for Isak.

What he would cost once announced: about £43m/yr — £26m of amortisation with the levy over five years, £2.5m of agent fee and £14.5m of wages grossed at 1.55x. That is the largest single annual cost on this page by a distance.

The asymmetry is the interesting part. City must write £125m down over five years, because the contract is signed now and the cap applies. Chelsea have been writing his original £106.8m down over nine and a half, because his 2023 deal predates it. The same player is an expensive purchase here and a £58.8m book profit there, and the rule change between the two contracts is the entire reason.

What moved: committed spend to £368.6m and the window swing from −£124.3m/yr to −£81.3m/yr — advanced deals count in both. The ratio holds at 56.4%.

31 Aug 2026

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.

31 Aug 2026

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.

31 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

The most expensive squad in the league is the one the homegrown quota bites hardest NEW

City can name 23 players, not 25, and seven of their places are unfillable. 20 of the 25 places are used against 6 homegrown and 14 non-homegrown: the seventeen non-homegrown ceiling runs out three places before the list does. Money cannot lift it — a £100m arrival takes a non-homegrown slot like any other, and only a homegrown signing or an academy player crossing 21 raises the ceiling itself.

Five players are under 21 and play free of the list — Bouaddi, Kilwa, Pierce Charles, Nico O’Reilly and Jeremy Monga — which is the whole reason a rebuild this size fits inside the rules. O’Reilly is the one to watch: born 21 March 2005, he clears the 2026/27 under-21 line by ten weeks, needs a place next season, and being City-trained brings a homegrown one with him.

Birthplace is not the test, and Haaland is the example. He was born in Leeds while his father played there, and does not qualify: he was raised and registered at Bryne from the age of three. Antoine Semenyo does qualify, through five years at Bristol City. Kalvin Phillips is at Sheffield United and Mathys Detourbet at Monaco, so neither is registered here.

Why it was missing until now. This page has always 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 and nothing was watching for absence. Every player now carries a date of birth and a stated qualifying basis, so the counts derive from the squad table and the same headcount gate that holds every other page holds this one.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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 £6.15m, from the foreign sales of Tijjani Reijnders, Rodri, Manuel Akanji, Nathan Aké. 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.

30 Aug 2026

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 cost swing in the overview read +£17m/yr against a computed −£119.7m/yr. The sale-profit figure beside it said £76m where the page computes £177m. And the ratio quoted in prose was ~65% against a computed ~57%. 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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

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.

30 Aug 2026

The Mbaye card is all but gone — Villa agreed with PSG and he has had the medical DEMOTED

Aston Villa reached agreement with PSG around €55m and Mbaye took a medical on 29 August. The card is demoted to reflect it and left on the board. It is not marked dead, because no club has announced him and a medical is not a signature — the same standard this site applied to Jackson, Savinho and Baleba. If Villa announce, a gate will fail this card as a live rumour for a player who has gone, and it will be closed then.

30 Aug 2026

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.

30 Aug 2026

Bouaddi was announced on 26 August and this page said “unannounced” for four days CORRECTION

Manchester City announced him on their own website on 26 August. This tracker carried him at advanced, with prose describing the deal as “agreed in principle on 8 Aug but unannounced” and quoting the fee as “~£95m/€110m”. Both wrong. The deal is £81.3m fixed plus £4.3m in add-ons — €95m + €5m — on a five-year contract to 2031, and the stored fee of £81.3m was right all along while the sentence beside it was not.

He is the most expensive teenager in Premier League history, past the £58.9m Manchester United committed for Leny Yoro in 2024. At 18, on a five-year deal, that is £16.9m/yr of amortisation with the levy running to 2031 — a charge that outlasts two managers at the current rate.

Ratio 57.3% → 60.4%, headroom £103.0m → £78.0m. The Marmoush projection has been rebased with it: 60.4% → 57.1% if the Tottenham loan-with-obligation completes.

30 Aug 2026

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.

28 Aug 2026

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.

27 Aug 2026

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.

27 Aug 2026

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.

27 Aug 2026

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.

27 Aug 2026

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.

26 Aug 2026

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.

26 Aug 2026

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.

26 Aug 2026

Marmoush sold at a £12m profit — and a £120m bid for Enzo Fernández is reported imminent AGREED + NEW

Marmoush to Tottenham, agreed 26 August — loan with an obligation at £50m plus £10m. The profit is much smaller than the headline. £59m from Frankfurt in January 2025 on a deal to 2029 leaves a book near £37.9m, so £50m books only ~£12m. Eighteen months of amortisation at £13.3m/yr does that. What City gain is the cost relief, not the gain: 57.3% → 54.1%, headroom out to about £130m.

And the Enzo Fernández card is revived rather than new — it has sat on this board as DORMANT since City missed Chelsea’s 5pm deadline on 14 August, and the fresh reporting goes into that card with the dead deadline kept under “Earlier”. City are reported ready to bid around £120m, meeting Chelsea’s valuation, with the player said to be open. At that price he is a ~£40m/yr squad-cost item here — £25.0m of amortisation, £13.6m of grossed wage on an estimate, £1.2m of agent fee — and City can absorb it: with Marmoush gone they would sit near 59.0% against a 70% limit.

Graded as a bid not yet lodged. Reporting has it imminent rather than made, City already missed Chelsea’s own 14 August deadline to bid for him once, and Chelsea will only sell if they secure a replacement first. This page has been caught before recording an offer that was only ever described as coming.

25 Aug 2026

Savinho announced at £75m, and the Bouaddi fee was £13.7m too high DONE + CORRECTION

Savinho to Tottenham is official, announced by both clubs on 25 August at £75m plus £10m of add-ons, £5m of which is reported effectively guaranteed. A 2024 fee of £30.8m amortised to a book around £18.5m makes this ~£56m of profit. This page held him at ADVANCED for five weeks against reporting that said agreed, said medical done, and twice named a fee (£60m, £68m) that turned out not to be the number. Nothing was promoted on any of it. That is what the rung is for.

And a correction on Bouaddi. This card carried ~€110m + €5m, converted to ~£95m + £4m. The settled figure reported on 24–25 August by Sky and by Romano is €95m fixed plus €5m£81.3m + £4.3m. The conversion was never wrong; the euro number was, and it moved down while this page was not looking. That is a £13.7m overstatement of a committed fee, and it is the second time this window that a euro figure has gone stale here rather than been mistranslated.

He is still held at ADVANCED. Medical passed, all documents reported signed by both clubs, five years to 2031 — and no club announcement. At 18 he would be the most expensive teenager in Premier League history. The Savinho hold is the argument for keeping this one where it is.

25 Aug 2026

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.

23 Aug 2026

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.

22 Aug 2026

The 22 August sweep, and a modeller that was wrong three ways DATA + METHOD

Rodri and Reijnders have both gone, both announced, and both were still sitting in the rumour mill. Rodri to Barcelona — and the row now carries the fixed £51m rather than the £65.4m package, because contingent money is not booked until it triggers. The old card had him going to Real Madrid for £65m at a £57m profit; he went to Barcelona, for less guaranteed money, at ~£44m. Reijnders to Al Qadsiah at £52m books only ~£17m against a £35.3m book — and AC Milan hold an unpublished sell-on, so read that as a ceiling. Phillips was modelled as a £12m sale booking a loss. It is a season loan with no option: no fee, no profit, no loss, and the £45m 2022 signing keeps amortising here. Savinho settled at £75m + £10m.

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.

20 Aug 2026

Two method changes: the five-year cap, and the wage input becomes the derivation METHOD

The ratio moves from 65.9% to 63.0% (wages 309→285).

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.

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.

20 Aug 2026

Amortisation input raised to the squad floor: £167m → £200m INPUT CORRECTION

Why it moved. The amortisation input is the club-wide charge, which must be at least the current squad's, since it also covers players who have left mid-season and academy registrations the squad table does not carry. On this page it had fallen below that floor, which cannot be right — the summer's signings went into the squad table and the input stayed where it was. It is now raised to the floor.

Read it as a floor, not a figure. The true club-wide charge is higher by whatever departed players and fringe registrations add. This is a conservative correction, and it moves the ratio the wrong way for the club, which is the direction an honest correction usually goes.

The largest gap in the league in cash terms — £33m. The club's own published FY25 charge is given on this page as ~£150m, and the squad has since absorbed a British-record fee for Elliot Anderson, so £167m was never going to hold.

19 Aug 2026

Rulli added — the keeper City signed to replace Trafford, missing from this page since 7 August CORRECTION

What happened. Gerónimo Rulli joined from Marseille for €3.8m (~£3.3m) on a two-year deal, announced 7 August, No.28. This page recorded Trafford’s £40m departure to Leeds and Pierce Charles’ arrival but never recorded the senior goalkeeper actually brought in behind Donnarumma.

What it does to the numbers. Almost nothing in isolation — ~£1.7m/yr of amortisation and ~£3.8m/yr of grossed-up wages — but the contract length is the interesting part. At 34 with no resale value, a two-year deal books the fee at ~£1.7m/yr where a five-year one would show ~£0.7m. The short deal is the honest one, and it is the more expensive one to report.

15 Aug 2026

Enzo bid dies at Chelsea’s deadline · Reijnders agreed to Al Qadsiah · Barça’s £55m for Rodri rejected RUMOUR MOVES ONLY

Enzo Fernández. City bid ~£102.5m on the 13th against a £120m ask and a 5pm Friday deadline, didn’t improve it, and the deadline passed — Chelsea pulled the sale terms and he stays. Card added on this page as dormant, for the record.

Tijjani Reijnders. ~£51m agreed with Al Qadsiah, player keen, not announced. One year into a ~£46m book means only ~£14m of profit — this is ~£16m/yr of squad cost off the bill, not a profit play.

Rodri. Barcelona’s £55m bid rejected; City want £60m+ with one year left on the deal.

09 Aug 2026

Trafford goes official, Bouaddi jumps to agreed-in-principle at ~€110m — and a missed £21.5m signing joins the books

Trafford → Leeds, DONE. Announced by both clubs on 6 August: £40m plus £5m of add-ons on a five-year deal — a Leeds club record and the most expensive English goalkeeper ever. The row this page deliberately held at ADVANCED for a fortnight is promoted with no numbers moving: the £40m of sales and ~£19m of profit were already counted at that rung.

Bouaddi, TALKS → ADVANCED — and the window stops being self-funding. Reported 8 August: a full verbal agreement with the player (a six-year deal) and a club-to-club deal in principle at ~€110m plus ~€5m in bonuses (~£95m + £4m) — up from the €90m-vs-€100m standoff carried here last week. One genuine open point remains: Lille want a season's loan-back, City want him now, so the row is held at ADVANCED until an announcement. He leaves the Rumour Mill for the Ins board, taking committed fees to ~£254m against £125m of sales and flipping the window's annual cost swing from ~−£21m/yr to ~+£17m/yr.

Record correction — Detourbet. Mathys Detourbet's reported ~€25m (~£21.5m est) City Football Group move from Troyes completed on 27 June — a month before this page launched — and had been missed entirely. He joins the window record and the squad table with a LOAN flag (26/27 at Monaco): squad-derived amortisation rises to ~£198m/yr. With that, the page's prose now quotes the squad-derived ratio — ~65% vs the 70% wall, ~£40m/yr of room — retiring the stale ~61%/£70m figures that predated the 4 Aug amortisation rebase. Still comfortable; now consistent with the page's own arithmetic.

Savinho: held at ADVANCED, again. Still no announcement a fortnight after the £65m was reported agreed (two 8 Aug reports say £60m); the new reporting is that City won't let it complete until a replacement is signed — and Pedro Neto (Chelsea; a Maresca reunion; exploratory, no bid, no reported fee — modelled in the Rumour Mill at a clearly-labelled £50m placeholder) is the leading name. Rodri: Real Madrid made their first formal approach hoping for ~€60m, City trimmed their price to €75m, and 8 Aug reports say the talks are paused as Barcelona enter — the player is said to be considering only Real. Mbaye: Villa now ruled out by his camp; formally offered to City and Liverpool; PSG want €50m. Grealish: reported set to snub City's lifeline for the ~£10.4m Everton move, timed late in the window around his rehab — clubs yet to agree. Marmoush heads into key talks with Tottenham and Newcastle circling; Phillips draws Sheffield United interest. Unchanged: the 115 verdict — day 1,280 since the charges, nothing published.

05 Aug 2026

Grealish re-priced to the reported £10.4m, City move on Mbaye — and two "agreed" deals still unannounced

Grealish, re-priced not re-graded. Everton are reported (2–5 Aug) to have accelerated talks over a PERMANENT return at a fee around £10.4m with wages near £200k/wk, with the player said to favour the move. Nothing is agreed with City, he is still rehabbing a stress fracture, and a second loan remains the live alternative — so he stays in the Rumour Mill at in talks, not on the Ins & Outs board. What did change is the arithmetic: the rumour model now carries £10.4m rather than City's earlier £40m ask, which turns a modelled ~£24m profit into a small accounting loss against his ~£15m book value, and drops his squad row out of the 💰 profit highlight. The cost relief is untouched and still the biggest single lever on the page — ~£15.6m/yr of wages plus ~£16m/yr of amortisation out of both SCR numerators. Loss on paper, win on the ratio.

Mbaye: City move to hijack. The PSG winger's file flipped today. Aston Villa had been the most concrete suitor with talks progressing; the player's camp is now reported to have pushed back on Villa Park and City have entered to hijack the move, with Liverpool also reported to have offered. PSG are open at €40–50m. Still a pursuit, not a fee — it stays a rumour, but the tag and the A List forwards board now say City are driving it rather than circling.

Held, deliberately, at ADVANCED. Savinho → Tottenham (£65m) was reported agreed with a medical imminent in late July; nine days on neither club has announced anything, and our own Tottenham page still lists him merely as one of five names on a winger shortlist. Trafford → Leeds (£40m + £5m) was agreed in July and is likewise unannounced. Both stay at 'adv' with the stall now stated on the row rather than the older "announcement imminent" wording — promoting either to 'done' without a club statement is exactly the error this ladder exists to prevent. Between them they carry £105m of the window's £125m of sales and £65m of its booked profit, so the flag matters.

Also noted, not modelled: Everton have hardened their Iliman Ndiaye asking price to ~£75m and City are reported unwilling to pay it, with Al-Hilal now the likeliest destination. Unchanged: Anderson, Monga, Charles, Kilwa, Akanji, Aké, Stones and Bernardo Silva (all done); Bouaddi still in talks with Lille €10m apart; Rodri still Real Madrid interest against City's €80m ask; the 115 verdict still unpublished — day 1,276 since the charges. Window ledger, squad-cost ratio and headroom figures are unmoved: no deal changed rung today.

04 Aug 2026

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.

04 Aug 2026

Transfer records rebuilt from a full window list — four missing deals added, two window mislabels corrected

Added to the 2026 window: James Trafford → Leeds United, £40m + £5m add-ons, fee agreed and announcement imminent (a Leeds club record and the most expensive English goalkeeper ever). It had been sitting in the Rumour Mill at a ~£25m guess; it is now an advanced outgoing at the reported figure, which lifts sales to £125m and the window's cost relief to ~£68.5m/yr. Corrected: James McAtee's £30m move to Nottingham Forest was never 2026 business — it completed on 20 July 2025 and has been moved to the 2025/26 table where it belongs, removing a phantom £30m sale and £30m of profit from this window.

January 2026 business, previously missing entirely, now recorded: Antoine Semenyo in from Bournemouth for £62.5m (+£1.5m add-ons, 10% sell-on retained by the seller) and Marc Guéhi in from Crystal Palace for £20m on 19 January; Oscar Bobb out to Fulham for £27m on 29 January (20% sell-on retained) and Stefan Ortega loaned to Forest to 30 June. Semenyo and Guéhi join the squad table (adding ~£73m of book value and ~£19m/yr of amortisation); Bobb leaves it, and leaves the List A club-trained pool at THREE — Foden, Lewis, O'Reilly — so a Mukasa or Braithwaite promotion from List B is now required rather than optional. None of this is current-window business and none of it moves the 2026 window ledger.

Checked and left alone: Anderson (£116m, done), Monga, Charles, Kilwa, Akanji, Aké, Stones and Bernardo Silva all reconcile with the counterpart records. Jack Grealish is NOT a completed sale — his Everton loan ended on 30 June with the £50m option declined, he is back on City's books, and the second-loan-or-cut-price-permanent conversation is talks, not a deal, as of today; the Rumour Mill entry now says so and names Everton. Savinho→Tottenham stays flagged advanced at £65m. The headroom model's £165m amortisation input is a whole-club accounts-basis estimate rather than the squad-table sum, so it has been left as the user-editable default.

27 Jul 2026

Page launched

The Bean Counter's Manchester City tracker goes live at bean-counter.co.uk/man-city. Baseline data: FY2024/25 accounts (£694m revenue, £408m wages, −£10m pre-tax, +£95m sale profits); the summer 2026 window as reported to date — Anderson (£116m British record), Monga, Charles and Kilwa in; Stones and Bernardo Silva out on expired contracts, Aké (£7m) and Akanji (£13m obligation) out, Savinho→Tottenham (£65m) at medical stage (this launch entry also listed McAtee as a 2026 sale — corrected on 4 Aug, it was a summer-2025 deal); Rodri–Real Madrid and Bouaddi–Lille sagas live in the Rumour Mill. Sanctions tab documents the 2014 settlement, the 2020 CAS ruling, both APT arbitration wins and the still-pending 115 verdict (3½ years and counting). Squad book values computed from reported fees and contract dates; all wages third-party estimates. League tab covers all 20 clubs' SCR tiers and FY25 accounts.

Glossary

Every rule in this tracker, in plain English — each with a real City example. For the group chat member who just asked "what's SCR?"

PSR (Profit & Sustainability Rules)
The Premier League's rule capping losses at £105m over a rolling three-year period (£35m/yr), after 'good' spending on academy, infrastructure, community and women's football is deducted. City's final cycle (FY24–26) aggregates to an estimated profit — the allowance untouched — with one last assessment in January 2027 before PSR is replaced by squad-cost rules. Seven of the 115 charges allege PSR breaches in much earlier cycles.
Squad Cost Ratio (UEFA SCR)
UEFA's rule limiting spending on the squad — player and head-coach wages, transfer amortisation and agent fees — to 70% of football revenue plus net transfer profit, tested on a calendar-year basis. City sit around 65% on this tracker's estimates: the league's biggest revenue makes it the league's softest cap.
PL Squad Cost Ratio (PL SCR)
The Premier League's version of the 70% squad cost rule (85% for clubs not in Europe), tested on a season basis rather than calendar year, phasing in from 2026/27 as PSR retires. Same cost base as UEFA's rule, different clock — City face an October checkpoint and a March 2027 assessment.
Football Earnings Rule (FER)
UEFA's successor to break-even: clubs may lose no more than €60m over three years (with add-ons), counting only football earnings — related-party revenue counts only at assessed fair value. This is the rule family under which UEFA once re-valued City's Abu Dhabi sponsorships; today City pass it on published accounts with room.
The 115
Shorthand for the Premier League's February 2023 charges against City: ~115 alleged breaches across 2009/10–2017/18 — inaccurate financial information, undisclosed remuneration, UEFA FFP and PSR non-compliance — plus ~35 counts of non-cooperation. Hearing ended December 2024; verdict still unpublished as of 9 August 2026. City deny all charges.
CFCB
UEFA's Club Financial Control Body — the panel that judges compliance, imposes fines and agrees settlements. It banned City from Europe in February 2020 (overturned at CAS) and fined four English clubs in July 2026. City were not among them.
CAS (Court of Arbitration for Sport)
Sport's supreme court in Lausanne. In July 2020 it overturned City's two-year UEFA ban — most alleged breaches "not established", the rest time-barred — cutting the sanction to a €10m fine for obstructing the investigation. The Premier League's case has no time bar, which is why the same history is being re-litigated.
APT / Fair Market Value
Associated Party Transaction rules: any deal with a related entity (an owner-linked sponsor, a sister company) counts for the financial rules only at independently benchmarked fair value. City challenged the rules twice in arbitration and twice won — the current framework is the league's third draft. Every Etihad-scale renewal passes through it.
Amortisation
Spreading a transfer fee as a cost over the contract length. The £116m Anderson signing on a five-year deal costs ~£24m/yr in the books — which is why fees are judged per-year while sales count at once.
Five-Year Amortisation Cap
UEFA and PL rule that fees must be amortised over a maximum of five years even on longer contracts — closing the eight-year-contract loophole. Haaland's pre-cap 2022 deal amortising over the original schedule is a grandfathered curiosity: a tiny ~£2m/yr charge against a 2034 contract.
Book Value
What's left of a player's fee still to be amortised. Sale profit = fee minus book value. Rodri's 2019 fee is nearly amortised — almost any sale price is profit. Academy players carry £0 book value, which is why selling them is pure profit.
Pure Profit
Shorthand for selling a £0-book-value player (academy graduate or free transfer): the entire fee lands as profit for PSR/FER purposes. City's academy is the league's most productive pure-profit machine — Palmer 2023, Álvarez-era flips, McAtee's £30m and Bobb's £27m across 2025/26.
45-Day Exchange Rule
UEFA Annex G.3.5: opposite-direction transfers between the same clubs within 45 days on similar payment terms are treated as a player exchange, valued at the LOWER of fee and book value — slashing bookable profit. City's Anderson-in/McAtee-out traffic with Forest looks like a candidate until you check the dates: the sale was July 2025 and the purchase July 2026, twelve months apart, so the rule never bites. Dating a transfer to the right window is not pedantry — it is the test.
PL 4% Transfer Levy
A 4% surcharge on transfer fees paid by Premier League clubs, funding player pension and education schemes. It capitalises into the registration cost and amortises with the fee — the £116m Anderson deal really costs ~£120.6m.
FIFA Solidarity Contribution
Up to 5% of an international transfer fee distributed to the clubs that trained the player between ages 12 and 23. Rides inside the transfer cost for compliance purposes.
Sell-On Clause
A percentage of any future sale owed to a selling club. City routinely attach them to academy exits — including buy-back AND sell-on terms on McAtee's move to Forest and a 20% sell-on on Bobb's to Fulham — turning today's pure profit into an option on tomorrow's.
Senior Loan Quotas
Limits on loan signings: domestically, max 2 concurrent (4 per season) from English clubs and never two from the same club; internationally, max 6 senior loans (over-21, non-club-trained) with U21 and academy players exempt. City currently use none of them — every loan is outbound.
SSR (Sustainability & Systemic Resilience)
The PL's incoming liquidity and solvency tests running alongside the squad cost rules — proving clubs can actually pay their bills. Trivial for a debt-free, equity-funded club; City's easiest test.
Headroom
The gap between current squad cost and the 70% line — the practical transfer budget. City's is ~£40m/yr of running cost on this tracker's estimates — still roughly an Anderson-sized annual cost of new business every year without selling anyone.
Calendar vs Season Test
UEFA tests the ratio over the calendar year (City's 2026 number freezes 31 December); the PL tests the season (assessment March 2027). The same window of business improves both, on different clocks.
List A / Club-Trained
A club's registered UEFA squad: max 25, min 8 homegrown of which 4 must be club-trained (three seasons at the club between 15 and 21). City's pool is down to three — Foden, Lewis, O'Reilly — after selling McAtee in 2025 and Bobb in January 2026, so a List B promotion (Mukasa or Braithwaite) is needed to reach the required four. List B (U-22, two years at the club) covers the academy crop for free.