The Anatomy of a Transfer Value
Why a player costs what he costs — broken down brick by brick
Hi friend,
Welcome to Transfer Science #003, the newsletter for people who think paying €60m for a defender with one year left on his contract, plus a 20% sell-on clause, is not a transfer, but a hostage negotiation.
If you’ve followed my work at The Python Football Review, you know my obsession with breaking things down to first principles. This newsletter applies that obsession to probably the most argued-about question in football: What is a player actually worth?
Every summer, we’re flooded with numbers. Transfermarkt says one thing. Clubs say something else entirely (usually higher). And most of these numbers share the same problem: you can’t open them up.
You see the final price, but not the machinery underneath it. You cannot tell how much comes from the player’s age, contract, performance, international status or the financial strength of the clubs involved. And when you disagree with the number, you cannot identify which part you actually disagree with.
So I delved into the literature and set out to build a valuation model on top of a peer-reviewed academic framework — and, more importantly, to build a way of reading any valuation it produces: a cascade that splits a player's value into bricks you can point at, argue with, and negotiate over.
In this article, I will first introduce the published valuation recipe and test it on a real player. Then I will examine the crucial component its authors keep private — and explain how I built my own version. Finally, I will show you the payoff: a valuation cascade that explains, brick by brick, why a player costs what he costs.
Our test subject throughout is Julián Álvarez: Atlético Madrid’s striker, an Arsenal transfer target, and a player Transfermarkt currently values at €100M.
We will then look at where the model might struggle — particularly with goalkeepers and defensive midfielders — before finishing with the highest-valued players in each position across Europe’s top five leagues.
And because I opened this newsletter by making fun of Tottenham, there is also a bonus section grading their summer deals for Jan Paul van Hecke, Sandro Tonali and Mateus Fernandes.
Let’s open the black box.
1 — Standing on the shoulders of giants
First, credit where it’s due. My model is built on the framework of the CIES Football Observatory — the research group whose player valuations you’ve probably seen quoted in the press. In 2024 they published an academic paper explaining how they do it, and it’s genuinely excellent.
Here’s their approach in a nutshell:
Collect real transfer fees. Over 8,000 actual paid transfers from a decade of the global market.
Find what explains the fees. They fit a statistical model asking: what did the market actually pay for? The answer, in order of importance: contract length, age, the sporting level of the leagues you’ve played in, your goals and minutes over the last two years, whether your teams win points, whether you’re an international, and the financial muscle of the clubs and leagues involved.
Publish the recipe. The paper gives the exact weight of every ingredient — 24 coefficients and a constant. And that recipe explains 85% of the variation in those 8,000+ fees. Or in other words, with just those variables, you can account for almost all of what clubs actually paid.
Go ahead and read the paper — it reads brilliantly, and there are plenty of nuances I won’t reproduce here.
So the plan seemed simple: transform my Wyscout data into the proper format (which took quite a while), apply the published coefficients, and out come player values.
Let’s do exactly that, on a real player, and see what happens.
2 — The recipe, live: pricing Julián Álvarez from raw ingredients
Atlético Madrid’s striker. 26, World Cup winner, four years left on his deal. Here is how the CIES recipe scores him. Every row is one variable: his value, times the published coefficient, gives the points that variable contributes.

One thing you need to read this table like a native : the points are logarithmic. This means that to turn the 3.63 score into money, you “un-log” it with the exponential. So exp(3.63) ≈ €37.5M.
Wait. €37.5M? For Julián Álvarez? The man Transfermarkt prices at €100M, whom CIES themselves list above €100M?
Something is missing.
3 — The missing piece: pricing the likely buyer
At the very end of their paper — literally the last paragraph — the authors admit that to predict a player’s value before a transfer happens (i.e. when it matters most 😅), you need one more model: one that captures who is likely to buy him, and how rich they are.
That makes economic sense. The market sorts. The best players tend to attract the richest clubs, and those clubs operate at a very different price level from the rest of the market.
CIES built this second stage but did not publish its formula. So I built my own version.
It uses the original CIES estimate as its starting point, then asks how attractive the player’s profile would be to the richest end of the market. The signals include age, contract leverage, international status, Champions League experience, sustained performance at a high level and my position-specific performance index.
Three points matter here.
First, this is not manual adjustment. I do not alter individual valuations or move players toward numbers I personally find more believable. The same fitted process is applied to every player in the database.
Second, the adjustment works in both directions. It compresses implausibly extreme outputs while lifting profiles that the published variables do not fully recognise.
Run the original recipe on Erling Haaland, for example, and his extraordinary scoring numbers push the estimate beyond €400M. My second stage brings him back to €198M, close to the public estimates of around €200M.
Álvarez moves in the opposite direction. The published recipe gives him €37.5M. Once the model accounts for the type of buyer his profile is likely to attract — elite league, peak age, international status and extensive Champions League experience — his estimate rises to €82.2M.
A third adjustment deals with uncertainty. When a player has barely played, the model discounts the estimate rather than treating limited evidence as fully reliable.
That is the machine in one line:
CIES’s published recipe → likely-buyer adjustment → consistent context and reliability checks.
Álvarez goes in. €82.2M comes out (more on that later).
But a fitted model is not how people naturally think about a footballer. The final challenge was therefore not statistical. It was presentational: how do you show where the €82.2M comes from?
4 — From machinery to meaning: the cascade
Here’s the presentation idea, and I want to be transparent that it is a presentation idea — the model computes Álvarez’s value absolutely, exactly as you saw above. But a raw score of 3.63 means nothing to a human. What means something is a comparison. So instead of asking “what is his value?”, the cascade asks a better question:
“What makes him worth more than a normal forward in his league?”
It works like this. I take all 76 La Liga forwards in my database, average their model inputs — their goals, age, contract days, league level, everything — and run that synthetic “typical La Liga forward” through the exact same two-layer pipeline. He comes out at €10.1M. (Yes, ten. Most professional forwards are not Julián Álvarez — that’s the point of being able to value players). Then I take the gap between Álvarez’s €82.2M and that €10.1M baseline, and split it across the factors according to how much each one separates him from them.
For the curious, here are three technical paragraphs.
One property makes this honest rather than cosmetic: the baseline changes the bricks, never the total. Compare him to Premier League strikers, or to the average professional anywhere, and the pieces would resize — but they’d still sum to €82.2M. The reference point is a storytelling choice; the value isn’t.
For each factor, I take the gap between Álvarez’s inputs and the typical forward’s inputs and multiply by the model’s weights — through both layers — which gives every factor a contribution in the same logarithmic points you met in the coefficient table. Those points are exact: they sum precisely to the difference between his score and the peer’s score. But points are multipliers, and bricks need to be euros — so the last step distributes the €72.1M gap between him and the baseline across the factors, in proportion to each one’s share of the points. That conversion is the only presentational step in the whole pipeline; everything upstream of it is the regression, untouched.
One number to not get confused by: the €37.5M raw base from earlier does not appear in this cascade — and shouldn’t. The cascade’s reference point is the typical forward, not his raw base, and that typical forward has been run through the full two-layer pipeline too. The calibration’s work is in here, everywhere: partly inside the €10.1M baseline, partly inside every brick — each brick measures one factor’s effect through both layers at once.
So here’s how to read his valuation, brick by brick:
The yardstick — €10.1M. Where every La Liga forward starts.
On-pitch output, +€9.8M. He scored 0.47 goals per 90 over the last 365 days (as of June 1) against a league average of 0.35 — and 0.52 the year before. He starts 92% of matches, plays the equivalent of 28 full league games plus a remarkable 19 European and international ones (the typical forward manages 4). Elite, sustained, durable.
Age, +€4.0M. At 26 he’s slightly younger than the average La Liga forward, with peak years still on the books.
Contract, +€5.6M. Four years left against a typical two — remember the tug-of-war: leverage is the market’s heaviest currency, and Atlético hold plenty of it.
International status, +€8.3M. A full Argentina international with a World Cup winner’s medal. The market’s strongest quality stamp.
Club & league platform, +€21.9M. One of Europe’s strongest leagues, at a club with genuine selling power. The shirt matters.
Big-stage pedigree, +€22.5M. The second stage at work: 24 full Champions League matches over two years (a typical forward has 2), plus an elite current season on my performance index. Proven, peak-age, big-stage — precisely the profile the richest clubs bid against each other for. (The model also carries a top-end brake for extreme values — it doesn’t even trigger here; Álvarez is expensive, not silly.)
= €82.2M.
Transfermarkt values Álvarez at €100M. FotMob says €104M. FootballTransfers’ algorithm says €111M. CIES publishes €105M. And when Atlético actually bought him from Manchester City in 2024, they paid around €75M, rising to more than €90M with add-ons.
My model says €82M. To that, we can safely add a 10% range, since this is a negotiation after all — and because ranges are better than single-point estimates. So €74M–€90M looks like my valuation range.
And here’s the difference this whole exercise buys you — the point of the newsletter in one paragraph. Transfermarkt hands you a number. This model hands you the number and its anatomy.
You now know that roughly a quarter of Álvarez’s value is the platform he plays (successfully) on, that his contract is worth about €6M of leverage, that his Champions League record adds more than his goals do, and that his age — for once — barely costs him anything. Which means when you disagree with the valuation, you can finally disagree with a specific part of it. That’s what opening the box buys you.
5 — Where the model struggles
No valuation model sees everything, and this one has two important blind spots.
The first is goalkeepers. The published CIES framework does not include goalkeeper-specific measures such as shot-stopping, so it can estimate a keeper’s market context — age, contract, club, league and playing time — but not properly distinguish an elite goalkeeper from an average one. Goalkeeper valuations should therefore be treated with additional caution. I will give the position its own dedicated treatment in a future issue.
The second is defensive players, particularly holding midfielders. The framework places considerable weight on goals and other visible outputs, but qualities such as controlling space, resisting pressure, progressing the ball and setting the tempo are much harder to price. That means the model can undervalue players whose contribution is substantial but does not appear clearly in the published variables.
My performance index helps identify some of these players, but it does not completely solve the pricing problem. For now, I prefer to publish those limitations openly rather than introduce subjective adjustments or manually move individual valuations toward public market estimates.
The values should therefore be read as structured estimates, not declarations of objective truth. Their advantage is not that they eliminate disagreement. It is that they show you exactly where the disagreement begins.
What can I do about it?
How could I deal with the problem without touching the coefficients? One solution would be to consider the public valuations out there (Transfermarkt) and try to introduce those notions into the model as a way to proxy for elements my model is blind to (Declan Rice’s aura, the non-goal-dependent roles). I am not a fan of this at this stage, since I really wanted to create something purely data-driven — but as CIES themselves say, there are unseen factors that a pure data model cannot really reflect. The market is sometimes irrational.
Anyhow, for now I plan to stick with these values, and if I find a better way in the future, I’ll move past them. I just wanted to start publishing content — it has been 7 months (not full time, but still) of work without publishing anything on what I’ve actually been developing. So there’s that.
6 — The top players by position
Now for the rankings: the ten highest-valued players in each position across Europe’s top five leagues.
The results are based on data available as of 1 June 2026. Feel free to question them in the comments 😀 — disagreement is part of the exercise.
7 — Grading Spurs’ summer shopping
And finally, since I joked about van Hecke’s move to Spurs, let’s use the model for what it’s actually built for: checking how much Tottenham really overspent on their three paid signings — Jan Paul van Hecke, Sandro Tonali and Mateus Fernandes. One honest note first: all three valuations are as of 1 June 2026, before the deals were done — no hindsight involved. (That’s also why the tables above still list them at Brighton, Newcastle and West Ham.)
Jan Paul van Hecke — paid €60m, model says €41–50m. Grade: B−
Start with what Spurs actually bought, because it’s better than the fee suggests. Van Hecke’s season rates at the 98th percentile among Premier League centre-backs on my performance index — one of the two or three best defensive seasons in the league. He played 42 full league matches’ worth of minutes, started 97% of games, and is a Dutch international.
His cascade prices his season honestly. The performance shows up where my model can see it: +€6.2M of big-stage pedigree, almost entirely his elite season rating (+€8M of it, minus €2M for the one thing missing from his CV — he has never played a Champions League minute). Brighton’s platform adds +€7.6M; the shirt sells. And then the one red brick: −€1.6M for a contract with a single year left. Read that carefully, because it’s the whole negotiation in one number: a defender whose leverage is nearly gone still prices at €45.9M on performance alone. Transfermarkt, for once, agrees with me almost to the euro — they say €45m.
So Brighton, holding a player they could lose for free in twelve months, still extracted €60m — a ~30% desire premium over both my model and the crowd. Expiring contracts are supposed to make players cheaper; that they didn’t tells you how much Spurs needed a centre-back. But here’s the thing: unlike most panic buys, the underlying asset is genuinely elite right now. If the 98th-percentile form travels, the premium evaporates. B−.
Sandro Tonali — paid €108m, model says €41–50m. Grade: C−
This is the fee my framework simply cannot follow — €108m is 2.4× my €45.4M estimate. So let’s be fair to Tonali first and see how much of the gap the model’s own blind spot can explain.
The pedigree is real: 11 to 12 full Champions League matches over two years, 22 matches’ worth of international minutes last season alone, an Italy regular at a club that finished in the Premier League’s top tier. His cascade duly collects it — platform +€6.4M, international status +€2.9M, Champions League +€2M — and even his age brick is positive (+€7.6M), because at 26 he’s still younger than the typical Premier League midfielder (27). But here’s the number the fee has to argue with: his season rates at the 67th percentile on my index. Good. Solidly good. Not remotely the Rice tier (98.8th) that the “output models under-see midfielders” defence is built for — the blind-spot argument works much better for players whose index screams elite while their goals stay silent. Tonali’s index doesn’t scream.
Triangulate the three numbers: my output-anchored floor says €45M. Transfermarkt — which happily prices aura, brand and reputation — says €80m. Spurs paid €108m: 35% above even the aura-inclusive crowd price, for a 26-year-old with two years left on his deal and the resale window already closing. My model’s number is probably too low for this profile; the fee is too high by every ruler available, including the market’s own. €108m buys the name and the memory of San Siro. C−.
Mateus Fernandes — paid ~€99m, model says €79–96m. Grade: A
Here’s the fun one, because on the surface it looks like the most reckless of the three — €99m for a 22-year-old whose season rates at just the 54th percentile on my performance index. A league-average statistical season! And yet this is the fee my model tracks almost perfectly, while Transfermarkt (€50m) missed it by half.
The cascade explains what the market saw. Fernandes was ever-present — 43 full matches, a 99% start rate, 0.11 goals per 90 against a peer average of 0.08 — a 22-year-old carrying a full Premier League season, capped by Portugal. And then the brick that is the valuation: +€50.8M for age, because the typical Premier League midfielder is 27 and Fernandes offers five extra years of prime plus a resale story. Add four years of contract (+€7.6M of West Ham’s leverage) and you’re at €87M before pedigree — which is, honestly, negative: −€4.3M, because he has never played Champions League football and his rating sits below the elite bar. Spurs didn’t pay for what Fernandes has done. They paid for when he was born and how long he was signed.
And that’s exactly how the top of the market prices young midfielders — my model’s range said €79–96m, the fee said €99m, the crowd said €50m. When the model lands within 3% of a nine-figure fee that Transfermarkt missed by 50%, the machinery is doing its job. One caveat belongs in the file: an age-driven valuation is a forecast, not a receipt. If the development curve flattens, that €50.8M brick melts faster than any goals brick would. But judged as a piece of market pricing? A.
The bill: roughly €267m spent on three players my model priced at €161–196m combined. Call the difference €70–105m of desire premium. Or, as the market prefers to put it: getting deals done. The pattern is the one this whole article has been about: the closer a fee stays to things you can count — minutes, age, contract, performance — the better it grades; the more it pays for name and need, the worse.
Boom — that was my attempt to open the black box of player valuation.
Not to pretend that one model can produce the definitive answer, but to make the answer visible: where the value comes from, what the model captures, and where it may be wrong.
If you enjoyed this issue, subscribe and share it with the friend who always has an opinion about transfer fees.
And if you disagree with one of the valuations, good. Arguing with numbers you can actually inspect is the whole point.
Thanks for reading until the end.
Cheers,
Martin
P.S. Which qualities do you think the model is still missing? Is there a player whose valuation cascade you would like to see next? Drop the name — and your objections — in the comments. ❤️












