Atlas of the player pool

How deep is a national player pool — and why

9.54 players in Europe's 9 strongest leagues per million inhabitants, 2025/26 rosters

Per head, Spain ranks 4th of 8 peer countries for players in Europe’s strongest leagues. The reasons below are measured, not guessed: 0.7 regular under-21 starters per club at home against 1.3 in France; and a first move abroad at 25.

Three minutes: this number, the five rungs below it, and the one-page brief. Everything else is the evidence.

In context

How one country’s professional pool compares with its peers, where the road abroad leaks, and what the national team gets from it — from public data, every number recomputed on each run. The largest cohort gap is in midfielders aged U22: 17 Spanish players in the top-9 leagues against a peer median of 22. A recent Spanish export first reached a top-9 roster at a median age of 21.5; one from Portugal at 20.5. Built from FBref, Wikipedia and Wikidata. Spain is the worked example; the pipeline takes a nationality code and a peer set. Football people recognise these numbers player by player; there is no place where they are aggregated.

* 464 ESP players with ≥ 450 minutes in the UEFA top-9 leagues, 2025/26, per 48.6 M inhabitants; peers counted the same way. Methodology.

What to take from it

1

Spain's Big-5 count is mostly its own league: 285 players with 450+ Big-5 minutes now, 324 at the 95/96 peak.

The steps the model dates — rise in 98/99 (×1.00), then rise in 01/02 (×1.02) — say how international the home league became, not how many of its players play abroad; the mechanisms below are the sharper read.

2

One mechanism carries the gap to every peer it trails: home-league strength.

Against Portugal home-league strength carries 61 % of a 15.7-per-million gap.

3

No trend at home: Spain's own under-21s held at 5 % of home-league minutes across 6 seasons.

Over the same seasons France 7 % → 9 % and -0.4 per million in the Big-5; Portugal 6 % → 5 % and -0.3 per million in the Big-5; Spain -0.4 per million. Across the 16 covered leagues the change in youth minutes and the change in Big-5 presence lean the same way — a weak signal with the right sign, not a law.

4

Where the mistake shows: Spain is out of line on the first rung — minutes for its own under-21s and the timing of the first move.

Out of line: minutes for its own under-21s at home: 4.8 % of league minutes and 0.7 regular under-21 starters per club, 6 of 8 among the peers (Netherlands 13.6 %; Netherlands 1.9 starters per club); the first move abroad at a median 25 (Belgium 22); the exporters move at 22–23.

Not the problem: the home league itself: multiplier ×0.81, 3 of 8 among the peers; how its exports fare: a median 37 % of their club's minutes, 3 of 8; how many leave at all: 132 first moves in the covered seasons (Germany 316).

What the peers show is reachable: two regular under-21 starters per club (from 0.7) — Netherlands 1.9, Belgium 1.5, France 1.3 already do; the first move at 22–23, not 25 — the route the peers that grew use.

The four numbers to watch every summer: under-21 share, regular under-21 starters per club, age of the first move, first Big-5 seasons. None of this is a proven cause; it is where the nation is out of line with the peers that grew, on the mechanisms the gap decomposition weighs most.

5

Can a reform cause it? The data can follow 2 documented cases, and only as a sequence.

Germany after its DFB/DFL academy licensing (01/02): its own under-21s' share of Bundesliga minutes went from 5 % to 11 % by 09/10 but is 6 % now — the turn did not hold. England after its Elite Player Performance Plan (12/13): its own under-21s' share of Premier League minutes went from 3 % to 6 % by 19/20 but is 3 % now — the turn did not hold. A sequence in one country against none in another is the strongest thing this data can say; it is not a counterfactual. Read as a heuristic: minutes for the young at home are the lever a federation holds, the effect is counted in seasons, and a weaker league yields less from it.

Each statement is written from the numbers on this page and on the six-nation comparison; the evidence follows, one question at a time.

Everything below is the evidence for these numbers, one question at a time.

Terms used on this page are explained in the glossary.

Why the train left

Five numbers, in the order they build on each other, show where the pool of players available to the national team gets thin. Each one is shown for Spanish football and for the two countries used as a comparison throughout this report; each links to the part of the report that shows the full evidence.

Five-stage funnel: Spanish football next to France and Portugal on the share of playing time young players get at home, the league's average age, the age of the first move abroad, the share of sideways moves, and players per million people in Europe's strongest leagues.
How to read it: one rung per stage of the argument, each on its own scale, so the dots show the distance between countries, not the size of the number. The filled acid dot is Spain; the open dots are the two comparison countries. Under each rung is which direction means a more open pathway. Hover a dot for the exact value.
  1. Young players do not get much of the playing time in the country's own top league.

    Share of league minutes that went to players aged 21 or under

    ESP 4.8 % FRA 8.8 % POR 4.9 %

    Clubs that gave those young players more than a tenth of their own playing time

    ESP 7 of 20 clubs FRA 14 of 18 clubs POR 11 of 18 clubs

    Under-21 nationals who were regular starters, per club in the league

    ESP 0.70 per club (14 players) FRA 1.28 per club (23 players) POR 0.78 per club (14 players)

    The regular-starter line is drawn at ten starts; at five it is 1.2 per club, at fifteen 0.5 (ten: 0.7).

    The shortage is one of selection, not of late cameos: 4.7 % of the league’s starts went to them against 4.8 % of its minutes, so they are picked to start about as often as they are played at all. They are, though, taken off early — 73 minutes in a start against the league’s own 78.

  2. The league those minutes are missing from is, on average, an old one.

    Average age of a minute played in the league

    ESP 26.9 FRA 25.6 POR 25.3

    Share of league minutes that went to players aged 30 or over

    ESP 28.9 % FRA 20.2 % POR 14.2 %
  3. So the first move to a foreign league, when it happens, comes late.

    Age the first time a player has real playing time in a foreign league, over the players abroad today

    ESP 25 years (132 players) FRA 23 years (205 players) POR 24 years (90 players)
  4. And the move, when it happens, is often not a step up.

    Share of moves abroad to a league no stronger than the player's own

    ESP 74 % FRA POR
  5. The layer of players in Europe's strongest leagues stays thin, and it fell sharply once.

    Players in Europe's strongest leagues, for every million people

    ESP 9.54 FRA 5.79 POR 25.19

If you take one thing from this: the single measured link that carries the most of the gap with both France and Portugal is how strong the domestic league is. That is one decomposition over 8 countries — a description of the gap, not a weight to plan by.

What this does not show
  • Money: transfer fees, wages and academy budgets play no part in any number above.
  • How the academy and coaching set-up actually work day to day, which no public data source used here can see.
  • Agents, and how a move abroad actually gets arranged, which happens off any table this pipeline can read.
  • The direction of the arrow: a low share of playing time for young players at home could help cause a thin generation, or just as easily be a symptom of one — the five numbers above are associations measured the same way for every country.

How deep is the pool?

The next three questions count who is in the pool and where the count runs thin.

Is the Spanish pool thin?

Spain ranks 4th of 8 countries at 9.54 per million; Portugal leads at 25.19.

POR Portugal
25.19
BEL Belgium
21.46
NED Netherlands
20.69
ESP Spain
9.54
FRA France
5.79
ENG England
3.60
ITA Italy
3.41
GER Germany
3.13
How we know

As an analytics question In numbers: distinct players with ≥ 450 minutes on 2025/26 rosters of the 9 strongest leagues, per million inhabitants, against 8 peers.

What we did We counted every player with the home nation's nationality who had real playing time in one of Europe's strongest leagues that season, then divided the count by the country's population.

Sources Distinct players with ≥ 450 minutes on 2025/26 rosters of the 9 strongest leagues ÷ population (Eurostat 2024); every country counted the same way.

A federation tracking this would watch the per-million rank move over seasons, not any one year's number.

Where exactly is it thin?

The largest cohort gap: Midfielders aged U22, 17 Spanish players vs a peer median of 22.

GroupCohortESPPeer median
Midfielders U22 17 22
Forwards U22 6 5
Forwards 23-25 10 6
Forwards 26-29 12 8
Forwards 30+ 10 6
How we know

As an analytics question In numbers: Spanish player count against the peer-country median, by age cohort and position group, ≥ 450 minutes, 2025/26 season.

What we did We split players into position groups and age bands, counted how many the home nation had in each one, and compared that count with the middle value among the other countries.

Sources Age at season start; cohorts U22 / 23–25 / 26–29 / 30+; ≥ 450 minutes.

A federation tracking this would watch which cohort's gap narrows or widens season to season, not just today's snapshot.

Where does the path leak?

From here the questions follow a player through youth minutes at home, the move abroad, and how that move turns out.

Do young players get minutes at home?

Under-21s get 4.8 % of the home league’s minutes. In Netherlands, the best of the peers, 13.6 %.

How sure is the link to the top? Across 8 countries, ten points more under-21 share go with +13.94 more top-9 players per million, but the interval (−4.93 to 33.09) includes zero; within countries, from one season to the next, the estimate is +1.56 (−1.29 to 4.33) — nothing. The share is a fact; its weight in the gap is not settled.

NED Netherlands
13.6 %
FRA France
8.8 %
BEL Belgium
8.7 %
GER Germany
6.1 %
POR Portugal
4.9 %
ESP Spain
4.8 %
ENG England
3.0 %
ITA Italy
2.7 %
Across countries
Scatter of U21 share of domestic-league minutes against top-9 players per million, 8 countries, two seasons each connected by a line, Spain highlighted, with the fitted line and its 90 % band.
How we know

Across the 8 countries (country averages over both seasons), 10 points more U21 share go with +13.94 more top-9 players per million (−4.93–33.09).

As an analytics question In numbers: share of domestic-league minutes played by players aged ≤ 21 at season start, 2025/26, by country's top flight.

What we did We counted every minute played in the league and looked at how many of them went to players aged 21 or younger.

Sources Share of all league minutes played by players aged ≤ 21 at season start, 2025/26, per domestic top flight.

A federation tracking this would watch the U21 share season by season, not the export count.

Where do Spanish players go when they leave?

126 of 353 play abroad; 64 % in the 9 strongest leagues, 74 % moved sideways (to a league no stronger than the Spanish one).

81 top-9 median multiplier 0.666
64 %
43 other median multiplier 0.438
34 %
2 stepping stone median multiplier 0.473
2 %
How we know

As an analytics question In numbers: destination-league tier of every Spanish-eligible player's 2025/26 row, split into top-9, sideways and other abroad moves.

What we did We looked at where every eligible player was actually playing that season and grouped each one by how strong that league is compared with the player's own home league.

Sources Destination league of every Spanish-eligible player's 2025/26 row; sideways = destination multiplier ≤ Spanish league multiplier (league strength: two estimates, § Methodology). La Liga is itself one of Europe's top-9 leagues; here 'abroad' means the other 8.

A federation tracking this would watch the sideways-move share over time, not the raw count of players abroad.

Does leaving later cost anything?

Arrive in the top-9 at 21 and you produce +0.017 more league-adjusted G+A per 90 over your first two seasons than arriving at 24. Spanish exports arrive at a median age of 22.

Line chart: the fitted age-at-export curve with its 90 % band, Spanish exports as points against every other peer export, and a rug of every export's age along the axis.
How to read it: the horizontal axis is a player’s age in his first top-9 season; the vertical axis is his league-adjusted goals plus assists per 90 over the first two seasons there. The line is the model’s expected value at each age, the band its 90 % interval; a flat line means arriving later costs nothing measurable. Acid dots are Spanish exports — hover for the name.
How we know

At 21: 0.15 (0.13–0.17); at 24: 0.13 (0.11–0.15); the difference +0.017 (0.004–0.028).

As an analytics question In numbers: mean league-adjusted goals + assists per 90 over the first two top-9 seasons, as a function of age at the first one, given origin-league strength and position, 691 peer-nationality exports.

What we did We looked at the age a player first arrived in one of the strongest leagues and checked whether players who arrived earlier ended up producing more, once we accounted for the strength of the league they came from.

Sources Age curve (natural cubic spline) on league-adjusted production, given origin-league strength (§ Methodology), position and a country effect, 691 peer-nationality exports (Gelman et al., 2013; Hoffman and Gelman, 2014); better players tend to leave earlier, so the curve mixes selection with development and this report does not separate them.

A federation tracking this would watch how the age-at-export curve shifts across cohorts, not any single player's outcome.

How do they fare there?

Spanish exports keep 36 % of their club's minutes (3rd of 8).

Dot plot: each country's median share of club minutes for players abroad, with a thin line spanning the other countries' values; Spain highlighted.
How to read it: one row per country, sorted; the dot is the median share of his club’s minutes that a country’s exported player keeps, the thin line the range across its exports. Spanish exports are the acid row. Further right means exports who play, not sit.
Country-by-country figures
GER Germany n = 262
42 %
ITA Italy n = 201
37 %
ESP Spain n = 464
36 %
FRA France n = 395
36 %
BEL Belgium n = 253
35 %
NED Netherlands n = 372
35 %
ENG England n = 208
33 %
POR Portugal n = 268
29 %
How we know

A La Liga season converts to 0.91 of a Premier League one by the transfer-graph model (0.86–0.95), against 0.81 by UEFA coefficient.

As an analytics question In numbers: median share of a club's 2025/26 minutes kept by players abroad, by country of origin.

What we did We worked out what share of each club's playing time the player actually got, and where that club stood in its own league's scoring table that season.

Sources Median share of club minutes for players abroad, per country of origin (league strength: two estimates, § Methodology). La Liga is itself one of Europe's top-9 leagues; here 'abroad' means the other 8.

A federation tracking this would watch whether an export's minutes share holds after the first season, not just the median.

What reaches the national team?

The last stretch looks at what actually gets picked, and when the door to the biggest leagues opened and shut.

What is the national-team squad built from?

96 % of the 2026 FIFA World Cup squad plays in the 9 strongest leagues; Germany 100 %.

  • Top-9 %
  • Stepping %
  • Domestic %
  • Other %
  • David Raya
  • Unai Simón
  • Martín Zubimendi
  • Pedro Porro
  • Eric García
  • Mikel Oyarzabal
  • Marc Cucurella
  • Pau Cubarsí
  • Joan Garcia
  • Víctor Muñoz
  • Álex Grimaldo
  • Lamine Yamal
  • Marcos Llorente
  • Pedri
  • Yéremy Pino
  • Dani Olmo
  • Aymeric Laporte
  • Ferran Torres
  • Borja Iglesias
  • Nico Williams
  • Álex Baena
  • Rodri
  • Marc Pubill
  • Mikel Merino
  • Gavi
  • Fabián Ruiz
How the peers are sourced
  • Top-9 %
  • Stepping %
  • Domestic %
  • Other %
ESP Spain Squad 26
96 %
GER Germany Squad 26
100 %
FRA France Squad 26
96 %
ENG England Squad 26
96 %
NED Netherlands Squad 26
96 %
BEL Belgium Squad 26
96 %
POR Portugal Squad 26
88 %
How we know

As an analytics question In numbers: league tier of every 2026 FIFA World Cup squad member's most-minutes 2025/26 row, matched by name and birth year, per country.

What we did We matched every named squad player to his club season and recorded which level of league he was actually playing in.

Sources Wikipedia squad lists matched to 2025/26 league rows; tier = league of the most-minutes row.

A federation tracking this would watch the tier mix of future squads over cycles, not one tournament's snapshot.

When did the train leave?

Spanish players with ≥ 450 Big-5 minutes: 323 at the 1995/96 peak, 228 at the 1997/98 low, 284 in 2025/26. The model finds no step change: its best candidate, 2001/02, carries 2 % and a ×1.02 change — a flat series.

Line chart: Spanish players with at least 450 minutes in the Big-5 leagues, 1995/96 to 2025/26, against eight peer countries; a lower panel shows per-million rates for Spain, France and Germany.
How to read it: each line is one country’s count of players with at least 450 minutes in the five biggest leagues, season by season since 1995/96. Spanish players are the acid line; the dashed rules are the seasons the model dates the rise and the fall to, with their probabilities; the point past the last season is the forecast for next season with its 90 % interval. Toggle countries and switch to per million to compare fairly across sizes.
How we know

Break posterior 2 %; a level change of ×1.02 (0.90–1.12).

As an analytics question In numbers: Spanish players with ≥ 450 minutes in the Big-5 leagues each season since 2020/21, with the rise and the fall each dated by a change-point model.

What we did We counted, season by season, how many home-nation players had real playing time in Europe's five biggest leagues, then looked for the two seasons where that count changed level for good — once up, once down — and stayed there.

Sources FBref Big-5 player tables 1995/96 → 2025/26; peers on the same rule; the names are the most-minutes Spanish players of each peak season, goalkeepers included — a lineup of presence, not a quality ranking: 1995/96: Javier Falagán, Francisco Leal Rodríguez, José Molina; 2020/21: Álex Remiro, Fernando Pacheco, Vicente Guaita; 2019/20: David de Gea, David Soria, Jesús Navas. The break dates come from a Bayesian local-level model with two ordered change points, one for the rise and one for the fall (Adams and MacKay, 2007); detail in § Methodology.

A federation tracking this would watch whether the post-break level holds for another season, not treat one break as final.

How do France and Portugal do it?

On the same six numbers France gives U21 players 9 % of domestic minutes against 5 % and sends 96 % of its squad to the 9 strongest leagues against 96 %.

Slope chart: France, Portugal and Spain on six pathway metrics, each rescaled 0 (worst of the three) to 1 (best of the three), one line per country.
How to read it: six measures, each rescaled so 0 is the worst of the three countries and 1 the best, one line per country. A line that stays high is a pathway that is open at every stage; where the acid line dips is where Spain loses ground.
The six numbers, unscaled
MetricESPFRAPOR
Players per million 9.54 5.79 25.19
U21 share of domestic minutes 4.8 % 8.8 % 4.9 %
Export age (recent) 21.5 21 20.5
Sideways moves 74 %
Exports' club-minutes share 36 % 36 % 29 %
National-team squad in the top-9 leagues 96 % 96 % 88 %
Big-5 players now 284 205 47
How we know

As an analytics question In numbers: France and Portugal against Spain on the same six 9-strongest-league pathway definitions, same seasons.

What we did We compared the home nation with the two comparison countries on six numbers, each one defined and measured in exactly the same way for all three.

Sources Same definitions, same seasons; a comparison, not a causal claim. Each metric is rescaled 0-1 across the three countries for the chart above, direction chosen so 1.0 is always the more open pathway (more players per million, more U21 minutes, an earlier export age, fewer sideways moves, a bigger minutes share abroad, more of the squad in the top-9); the table below keeps the raw numbers.

A federation tracking this would watch which of the six numbers moves first, not the overall picture alone.

Do goalkeepers follow a different path?

20 Spanish goalkeepers play ≥ 450 minutes in the top-9 leagues — rank 4 of 8 per million — and they get there later than outfield exports.

Strip plot of age at first top-9-league appearance, Spanish goalkeepers against outfield exports, one dot per player, medians marked.
How to read it: one dot per player at the age of his first season in a top-9 league; goalkeepers in the upper strip, outfield exports in the lower, medians marked. Further left is an earlier first appearance.
Club tier: Spanish top-9 goalkeepers, 2025/26
PlayerClub LeagueMinutes Club goals percentile
David SoriaGetafeESP-La Liga3420 10 %
Antonio SiveraAlavésESP-La Liga3420 23 %
David RayaArsenalENG-Premier League3330 95 %
David de GeaFiorentinaITA-Serie A3330 38 %
Álex RemiroReal SociedadESP-La Liga3330 75 %
Unai SimónAthletic ClubESP-La Liga3330 35 %
Sergio HerreraOsasunaESP-La Liga3284 35 %
Aarón EscandellOviedoESP-La Liga3240 5 %
Robert SánchezChelseaENG-Premier League3039 78 %
Leo RománMallorcaESP-La Liga2970 60 %
Nacho MirasMechelenBEL-Pro League2925 38 %
Joel RoblesEstorilPOR-Primeira Liga2790 78 %
Joan GarcíaBarcelonaESP-La Liga2700 100 %
Álvaro VallésReal BetisESP-La Liga2520 82 %
Julián CuestaAntalyasporTUR-Süper Lig1800 31 %
Julen AgirrezabalaValenciaESP-La Liga1620 50 %
Iñaki PeñaElcheESP-La Liga1440 60 %
Arnau TenasVillarrealESP-La Liga900 90 %
Pau LópezReal BetisESP-La Liga810 82 %
Josep MartinezInterITA-Serie A450 100 %
Goalkeeper production: Spanish keepers, 2025/26
PlayerClub LeagueMinutes GA/90Saves/90 Save %Clean-sheet share GA/90, quality-adj.
David RayaArsenalENG-Premier League3330 0.701.59 66.3 %51 % 0.84
Robert SánchezChelseaENG-Premier League3039 1.452.87 66.0 %26 % 1.43
David de GeaFiorentinaITA-Serie A3330 1.323.22 68.7 %27 % 1.54
Josep MartinezInterITA-Serie A450 0.802.00 68.4 %60 % 1.31
Antonio SiveraAlavésESP-La Liga3420 1.472.55 68.1 %13 % 1.80
Unai SimónAthletic ClubESP-La Liga3330 1.462.62 68.2 %16 % 1.78
Joan GarcíaBarcelonaESP-La Liga2700 0.702.47 69.7 %50 % 1.07
Iñaki PeñaElcheESP-La Liga1440 1.753.44 68.7 %25 % 1.98
David SoriaGetafeESP-La Liga3420 1.003.03 69.7 %32 % 1.33
Leo RománMallorcaESP-La Liga2970 1.523.00 68.5 %12 % 1.83
Sergio HerreraOsasunaESP-La Liga3284 1.293.10 69.2 %19 % 1.62
Aarón EscandellOviedoESP-La Liga3240 1.564.03 69.5 %28 % 1.88
Pau LópezReal BetisESP-La Liga810 1.223.22 69.0 %22 % 1.61
Álvaro VallésReal BetisESP-La Liga2520 1.293.11 69.1 %29 % 1.62
Álex RemiroReal SociedadESP-La Liga3330 1.622.68 67.9 %8 % 1.94
Julen AgirrezabalaValenciaESP-La Liga1620 1.672.89 68.4 %22 % 1.93
Arnau TenasVillarrealESP-La Liga900 1.603.00 68.7 %0 % 1.84
Joel RoblesEstorilPOR-Primeira Liga2790 1.742.68 65.6 %16 % 2.59
Nacho MirasMechelenBEL-Pro League2925 1.514.18 69.9 %24 % 2.61
Julián CuestaAntalyasporTUR-Süper Lig1800 1.703.95 68.8 %15 % 3.28

Peer median quality-adjusted GA/90: ESP 1.79 · FRA 2.07 · GER 2.72 · ITA 1.49 · ENG 1.40 · NED 3.09 · POR 2.34 · BEL 2.21

Goalkeepers per million, by country
BEL Belgium
1.78
NED Netherlands
1.39
POR Portugal
1.03
ESP Spain
0.41
ITA Italy
0.29
GER Germany
0.24
FRA France
0.21
ENG England
0.09
How we know

0.41 per million; first top-9 season at a median age of 25, against 22 for outfield exports.

As an analytics question In numbers: Spanish goalkeepers with ≥ 450 minutes in the top-9 leagues, per million inhabitants, against outfield export age.

What we did We counted goalkeepers the same way we counted outfield players, then compared the age each group first reached one of the strongest leagues.

Sources 450-minute floor, 2025/26 rosters, same K = 900 shrinkage as the rest of the report; first season in a fetched top-9 table; players already there in 2020/21 are censored — 55 % of the goalkeepers, 33 % of the outfield exports; a comparison of two pathways inside one nation, not a causal claim. First top-9 season needs no move for a La Liga keeper.

A federation tracking this would watch whether the goalkeeper pathway keeps diverging from outfield export age, not one season's gap.

What is the gap made of?

Of the −3.75 players per million between France and Spain, U21 minutes go with −2.33, league strength with +4.99, export age with +2.13.

One horizontal stacked bar per contrast country: the contribution of U21 minutes, league strength and export age to its per-capita gap with Spain, plus the residual; whiskers show each channel's bootstrap interval.
How to read it: the whole bar is the gap in players per million between the comparison country and Spain. Each segment is how much of that gap goes with one measured channel — youth minutes, league strength, export age — under the decomposition; the hatched remainder is what the three channels do not carry. A segment can be negative when the channel works the other way.
How we know

−8.53 is not carried by the three channels.

As an analytics question In numbers: a linear split of the per-capita gap into U21 minutes, league strength and export age across 8 peer countries.

What we did We used the players who changed leagues to work out what a season in one league is worth in another, then split the gap between countries into the parts that line up with young players' minutes, league strength and the age players move abroad.

Sources Ridge-regression linear split, Blinder-Oaxaca-style (Oaxaca, 1973; Blinder, 1973), fit on the 8 peer countries with data on all three channels; bootstrap 90 % intervals, 1000 resamples; a decomposition of a correlation, not a causal accounting.

A federation tracking this would watch which channel's contribution grows, not treat the split as fixed.

Who are the players?

14 cards chosen by six rules.

How the 14 cards were chosen

Why these cards: one card per position group per rule, applied in this order — (a) highest goals + assists per 90, league-adjusted, (b) youngest national-team call-up, (c) most top-9 minutes among the 2026 FIFA World Cup squad, (d) most domestic-league minutes among the 2026 FIFA World Cup squad, (e) most top-9 minutes, (f) most domestic minutes under 23 without a top-9 season. A player already chosen by an earlier rule falls through to the next name, so a later row can show the second name by its measure. Rows group the six rules; the national-team core row holds two of them.

Highest quality-adjusted production

Ferran TorresParis SGFW0.57G+A / 90 adj.↓ declining · −0.16 G+A / 90 adj.Career →
Paris SG

Ferran Torres

FW · 26 · Paris SG (2026/27) · NT 2024–26

2025/26 · Barcelona · ESP-La Liga

G+A / 90 adj.
0.57
Non-penalty goals / assists per 90
0.73 / 0.09
Minutes
1965 (64 %)
Style map Primary scorers Quality map High-volume scorers in top-five leagues

Primary scorers — non-penalty goal rate nearly double the forward median on starter minutes (56 %). The finishing forward of a first-choice line (Duro, Torres, Jutglà).

declining −0.16 G+A / 90 adj. 1106 min → 1965 min

  1. Christopher Nkunku FRA GER-Bundesliga 2022/23 · 1897 min · 0.56 · d = 0.16
  2. Georges Mikautadze GEO ESP-La Liga 2025/26 · 2109 min · 0.56 · d = 0.19
  3. Ademola Lookman NGA ITA-Serie A 2022/23 · 1729 min · 0.57 · d = 0.39

2026 FIFA World Cup · UEFA Euro 2024

Selected as: highest goals + assists per 90, league-adjusted among FW.

Lamine YamalBarcelonaMF0.59G+A / 90 adj.↑ improving · +0.13 G+A / 90 adj.Career →
Barcelona

Lamine Yamal

MF · 19 · Barcelona (2026/27) · NT 2024–26

2025/26 · Barcelona · ESP-La Liga

G+A / 90 adj.
0.59
Non-penalty goals / assists per 90
0.52 / 0.44
Minutes
2262 (74 %)
Style map High-minutes creative midfielders Quality map Productive midfielders in top-five leagues

Starting playmakers — assist rate three times the midfield median on 62 % of minutes, scoring nearly double. The creative hub of the middle third (Milla, García, Grimaldo).

improving +0.13 G+A / 90 adj. 2856 min → 2262 min

  1. Florian Wirtz GER GER-Bundesliga 2021/22 · 1851 min · 0.49 · d = 1.01
  2. Mathys Tel FRA GER-Bundesliga 2023/24 · 1050 min · 0.52 · d = 1.72
  3. Jamal Musiala GER GER-Bundesliga 2021/22 · 1465 min · 0.36 · d = 2.22

2026 FIFA World Cup · UEFA Euro 2024

Selected as: highest goals + assists per 90, league-adjusted among MF.

Aitor RuibalBetisDF0.18G+A / 90 adj.→ stable · +0.04 G+A / 90 adj.Career →
Betis

Aitor Ruibal

DF · 30 · Betis (latest known)

2025/26 · Real Betis · ESP-La Liga

G+A / 90 adj.
0.18
Non-penalty goals / assists per 90
0.20 / 0.10
Minutes
1808 (54 %)
Style map Goal-scoring defenders Quality map Goal-scoring defenders in top-five leagues

Set-piece threats — defenders scoring at five times the DF median on 60 % of minutes. Aerial presence in both boxes (Romero, Juande, Gasiorowski).

stable +0.04 G+A / 90 adj. 1313 min → 1808 min

  1. Lucas Vázquez ESP ESP-La Liga 2020/21 · 1848 min · 0.19 · d = 0.12
  2. Ramy Bensebaini ALG GER-Bundesliga 2024/25 · 2022 min · 0.19 · d = 0.30
  3. Alfonso Pedraza ESP ESP-La Liga 2025/26 · 1689 min · 0.13 · d = 0.44

Selected as: highest goals + assists per 90, league-adjusted among DF.

National-team core — 2026 FIFA World Cup squad: most top-9 minutes, most home-league minutes

Mikel OyarzabalReal SociedadFW0.33G+A / 90 adj.↑ improving · +0.05 G+A / 90 adj.Career →
Real Sociedad

Mikel Oyarzabal

FW · 29 · Real Sociedad (2026/27) · NT 2024–26

2025/26 · Real Sociedad · ESP-La Liga

G+A / 90 adj.
0.33
Non-penalty goals / assists per 90
0.27 / 0.13
Minutes
2710 (81 %)
Style map High-minutes starting forwards Quality map High-minutes starting forwards

Every-week starters — three quarters of the season's minutes, assist rate about 1.5 times the forward median, scoring at median. Mostly a top-five-league footprint: the first-choice forward who links play as much as he finishes (Ferri, Martínez, Oyarzabal).

improving +0.05 G+A / 90 adj. 2250 min → 2710 min

  1. Iñaki Williams GHA ESP-La Liga 2022/23 · 2836 min · 0.31 · d = 0.21
  2. Tim Kleindienst GER GER-Bundesliga 2023/24 · 2869 min · 0.33 · d = 0.23
  3. Ché Adams SCO ITA-Serie A 2024/25 · 2652 min · 0.35 · d = 0.29

2026 FIFA World Cup · UEFA Euro 2024

Selected as: most top-9 minutes among 2026 FIFA World Cup squad FW.

Martín ZubimendiArsenalMF0.19G+A / 90 adj.↑ improving · +0.10 G+A / 90 adj.Career →
Arsenal

Martín Zubimendi

MF · 27 · Arsenal (2026/27) · NT 2024–26

2025/26 · Arsenal · ENG-Premier League

G+A / 90 adj.
0.19
Non-penalty goals / assists per 90
0.15 / 0.03
Minutes
2992 (87 %)
Style map Everyday starting midfielders, low scoring output Quality map Everyday starting midfielders, low scoring output

The engine room — nearly 80 % of minutes with median output: holding and box-to-box midfielders whose value is continuity and structure, not numbers (Febas, Blanco, Moncayola).

improving +0.10 G+A / 90 adj. 2962 min → 2992 min

  1. Tomáš Souček CZE ENG-Premier League 2021/22 · 3062 min · 0.18 · d = 0.14
  2. Josh Brownhill ENG ENG-Premier League 2021/22 · 2955 min · 0.16 · d = 0.27
  3. Rodri ESP ENG-Premier League 2022/23 · 2911 min · 0.24 · d = 0.43

2026 FIFA World Cup · UEFA Euro 2024

Selected as: most top-9 minutes among 2026 FIFA World Cup squad MF.

Pedro PorroTottenhamDF0.09G+A / 90 adj.↓ declining · −0.13 G+A / 90 adj.Career →
Tottenham

Pedro Porro

DF · 27 · Tottenham (2026/27) · NT 2024–26

2025/26 · Tottenham · ENG-Premier League

G+A / 90 adj.
0.09
Non-penalty goals / assists per 90
0.03 / 0.06
Minutes
2796 (89 %)
Style map Everyday starting defenders Quality map High-assist defenders in top-five leagues

The defensive core — 85 % of minutes, output at the DF floor. Availability and continuity are the signal; production is not (Iglesias, Catena, Sadick).

declining −0.13 G+A / 90 adj. 2610 min → 2796 min

  1. Trevoh Chalobah ENG ENG-Premier League 2025/26 · 2783 min · 0.09 · d = 0.02
  2. Matt Targett ENG ENG-Premier League 2021/22 · 2871 min · 0.06 · d = 0.23
  3. James Justin ENG ENG-Premier League 2024/25 · 2912 min · 0.11 · d = 0.23

2026 FIFA World Cup

Selected as: most top-9 minutes among 2026 FIFA World Cup squad DF.

Borja IglesiasCelta VigoFW0.42G+A / 90 adj.→ stable · −0.03 G+A / 90 adj.Career →
Celta Vigo

Borja Iglesias

FW · 33 · Celta Vigo (2026/27) · NT 2024–26

2025/26 · Celta Vigo · ESP-La Liga

G+A / 90 adj.
0.42
Non-penalty goals / assists per 90
0.47 / 0.09
Minutes
1900 (56 %)
Style map Older forwards with moderate playing time Quality map High-volume scorers in top-five leagues

Experienced forwards on managed minutes — median age 31, about 40 % of minutes, output at median. The impact or target forward used in rotation (Iglesias, Félix, Mir).

stable −0.03 G+A / 90 adj. 1952 min → 1900 min

  1. Max Kruse GER GER-Bundesliga 2020/21 · 1629 min · 0.45 · d = 0.41
  2. Marius Bülter GER GER-Bundesliga 2025/26 · 1597 min · 0.39 · d = 0.50
  3. Ciro Immobile ITA ITA-Serie A 2022/23 · 2219 min · 0.41 · d = 0.51

2026 FIFA World Cup

Selected as: most domestic minutes among 2026 FIFA World Cup squad FW.

Víctor MuñozLiverpoolMF0.20G+A / 90 adj.Career →
Liverpool

Víctor Muñoz

MF · 23 · Liverpool (2026/27) · NT 2024–26

2025/26 · Osasuna · ESP-La Liga

G+A / 90 adj.
0.20
Non-penalty goals / assists per 90
0.20 / 0.07
Minutes
2656 (80 %)
Style map Everyday starting midfielders, low scoring output Quality map Everyday starting midfielders, low scoring output

The engine room — nearly 80 % of minutes with median output: holding and box-to-box midfielders whose value is continuity and structure, not numbers (Febas, Blanco, Moncayola).

  1. Nathaniel Brown GER GER-Bundesliga 2025/26 · 2656 min · 0.20 · d = 0.10
  2. Ritsu Doan JPN GER-Bundesliga 2020/21 · 2768 min · 0.17 · d = 0.28
  3. Arthur Atta FRA ITA-Serie A 2025/26 · 2557 min · 0.22 · d = 0.30

2026 FIFA World Cup

Selected as: most domestic minutes among 2026 FIFA World Cup squad MF.

Eric GarcíaBarcelonaDF0.05G+A / 90 adj.↓ declining · −0.10 G+A / 90 adj.Career →
Barcelona

Eric García

DF · 25 · Barcelona (2026/27) · NT 2024–26

2025/26 · Barcelona · ESP-La Liga

G+A / 90 adj.
0.05
Non-penalty goals / assists per 90
0.03 / 0.03
Minutes
2721 (89 %)
Style map Everyday starting defenders Quality map Everyday starting defenders

The defensive core — 85 % of minutes, output at the DF floor. Availability and continuity are the signal; production is not (Iglesias, Catena, Sadick).

declining −0.10 G+A / 90 adj. 1566 min → 2721 min

  1. Loïc Bade FRA ESP-La Liga 2024/25 · 2686 min · 0.05 · d = 0.08
  2. Sergi Cardona ESP ESP-La Liga 2023/24 · 2814 min · 0.07 · d = 0.20
  3. Nico Schlotterbeck GER GER-Bundesliga 2023/24 · 2859 min · 0.06 · d = 0.22

2026 FIFA World Cup

Selected as: most domestic minutes among 2026 FIFA World Cup squad DF.

Youngest national-team call-up

Roberto FérnandezEspanyolFW0.30G+A / 90 adj.→ stable · +0.01 G+A / 90 adj.Career →
Espanyol

Roberto Férnandez

FW · 24 · Espanyol (2026/27) · NT 2024–26

2025/26 · Espanyol · ESP-La Liga

G+A / 90 adj.
0.30
Non-penalty goals / assists per 90
0.23 / 0.11
Minutes
2382 (70 %)
Style map High-minutes starting forwards Quality map High-minutes starting forwards

Every-week starters — three quarters of the season's minutes, assist rate about 1.5 times the forward median, scoring at median. Mostly a top-five-league footprint: the first-choice forward who links play as much as he finishes (Ferri, Martínez, Oyarzabal).

stable +0.01 G+A / 90 adj. 2002 min → 2382 min

  1. Benedict Hollerbach GER GER-Bundesliga 2024/25 · 2540 min · 0.31 · d = 0.25
  2. Samuel Chukwueze NGA ESP-La Liga 2022/23 · 2339 min · 0.34 · d = 0.37
  3. Lorenzo Colombo ITA ITA-Serie A 2025/26 · 2326 min · 0.25 · d = 0.44

UEFA European Under-21 Championship 2025

Selected as: youngest national-team call-up among FW.

Pau CubarsíBarcelonaDF0.03G+A / 90 adj.→ stable · −0.03 G+A / 90 adj.Career →
Barcelona

Pau Cubarsí

DF · 19 · Barcelona (2026/27) · NT 2024–26

2025/26 · Barcelona · ESP-La Liga

G+A / 90 adj.
0.03
Non-penalty goals / assists per 90
0.03 / 0.00
Minutes
2703 (88 %)
Style map Everyday starting defenders Quality map Everyday starting defenders

The defensive core — 85 % of minutes, output at the DF floor. Availability and continuity are the signal; production is not (Iglesias, Catena, Sadick).

stable −0.03 G+A / 90 adj. 2618 min → 2703 min

  1. Leny Yoro FRA FRA-Ligue 1 2023/24 · 2673 min · 0.04 · d = 0.69
  2. Abdoul Coulibaly GER GER-Bundesliga 2025/26 · 2120 min · 0.04 · d = 0.78
  3. Luka Vušković CRO GER-Bundesliga 2025/26 · 2442 min · 0.12 · d = 0.84

2026 FIFA World Cup

Selected as: youngest national-team call-up among DF.

Most top-9 minutes

Nacho FerriFeyenoordFW0.23G+A / 90 adj.→ stable · +0.01 G+A / 90 adj.Career →
Feyenoord

Nacho Ferri

FW · 22 · Feyenoord (2026/27)

2025/26 · Westerlo · BEL-Pro League

G+A / 90 adj.
0.23
Non-penalty goals / assists per 90
0.34 / 0.06
Minutes
2891 (80 %)
Style map High-minutes starting forwards Quality map High-minutes starting forwards

Every-week starters — three quarters of the season's minutes, assist rate about 1.5 times the forward median, scoring at median. Mostly a top-five-league footprint: the first-choice forward who links play as much as he finishes (Ferri, Martínez, Oyarzabal).

stable +0.01 G+A / 90 adj. 2287 min → 2891 min

  1. Thom van Bergen NED NED-Eredivisie 2025/26 · 2966 min · 0.20 · d = 0.39
  2. Hélio Varela CPV POR-Primeira Liga 2023/24 · 2743 min · 0.20 · d = 0.40
  3. Matthis Abline FRA FRA-Ligue 1 2024/25 · 2768 min · 0.25 · d = 0.50

Selected as: most top-9 league minutes among FW.

Luis MillaComoMF0.22G+A / 90 adj.↑ improving · +0.11 G+A / 90 adj.Career →
Como

Luis Milla

MF · 32 · Como (2026/27)

2025/26 · Getafe · ESP-La Liga

G+A / 90 adj.
0.22
Non-penalty goals / assists per 90
0.03 / 0.28
Minutes
3271 (96 %)
Style map High-minutes creative midfielders Quality map Everyday starting midfielders, low scoring output

Starting playmakers — assist rate three times the midfield median on 62 % of minutes, scoring nearly double. The creative hub of the middle third (Milla, García, Grimaldo).

improving +0.11 G+A / 90 adj. 2875 min → 3271 min

  1. Daniel Parejo ESP ESP-La Liga 2020/21 · 3112 min · 0.17 · d = 0.48
  2. Sergi Darder ESP ESP-La Liga 2024/25 · 2744 min · 0.20 · d = 0.73
  3. Darko Lazović SRB ITA-Serie A 2021/22 · 2766 min · 0.20 · d = 0.73

Selected as: most top-9 league minutes among MF.

Carlos RomeroVillarrealDF0.17G+A / 90 adj.↑ improving · +0.10 G+A / 90 adj.Career →
Villarreal

Carlos Romero

DF · 25 · Villarreal (2026/27)

2025/26 · Espanyol · ESP-La Liga

G+A / 90 adj.
0.17
Non-penalty goals / assists per 90
0.17 / 0.08
Minutes
3191 (93 %)
Style map Goal-scoring defenders Quality map Goal-scoring defenders in top-five leagues

Set-piece threats — defenders scoring at five times the DF median on 60 % of minutes. Aerial presence in both boxes (Romero, Juande, Gasiorowski).

improving +0.10 G+A / 90 adj. 2554 min → 3191 min

  1. Pau Torres ESP ESP-La Liga 2021/22 · 2855 min · 0.12 · d = 0.61
  2. Nahuel Molina ARG ESP-La Liga 2022/23 · 2867 min · 0.12 · d = 0.61
  3. Strahinja Pavlović SRB ITA-Serie A 2025/26 · 2869 min · 0.13 · d = 0.62

Selected as: most top-9 league minutes among DF.

Goalkeepers — most top-9 minutes · youngest in the top-9

Getafe

David Soria

GK · Getafe (ESP-La Liga) · Career, season by season →

2025/26 · 3420 min

GA/90
1.00
Saves/90
3.03
Save %
69.7 %

Getafe (ESP-La Liga) · 10 % of the league's goals scored

Selected as: most top-9 minutes among home goalkeepers.

Barcelona

Joan García

GK · Barcelona (ESP-La Liga) · NT 2024–26 · Career, season by season →

2025/26 · 2700 min

GA/90
0.70
Saves/90
2.47
Save %
69.7 %

Barcelona (ESP-La Liga) · 100 % of the league's goals scored

2026 FIFA World Cup

Selected as: youngest home goalkeeper with minimum top-9 minutes.

* Each card renders the existing dataset; no computation beyond the join. Age on the name line is the 2026/27 season-start age (start year − birth year); the club is from the 2026/27 tables, or — labelled "latest known" — from FBref's country page where the player has no 2026/27 row. Age on the analog line follows the analog finder's convention (season start year + 1 − birth year).

The atlas: every player-season of 2025/26, one dot each

Two-panel atlas of forwards 2025/26 in PCA projection. Left panel: style map without league multipliers; right panel: quality-adjusted map. Grey points are the whole corpus of 924 players; coloured points are the 46 Spanish-eligible players by cluster; bright rings mark the 6 with a national-team call-up 2024–26.
How to read it: every dot is the 2025/26 season of one of the forwards in the leagues this report covers. The two axes are the first two principal components of his five per-90 numbers (goals, assists, minutes share, age, cards) — dots that sit close together had similar seasons. The style projection uses the raw numbers, the quality projection the league-adjusted ones, so switching shows who moves when the strength of his league is counted. Colours are the clusters named below; acid dots are Spanish-eligible players, a white ring marks a national-team call-up. Hover a dot for the player, click to pin, scroll to zoom, type a name to find him.
Two-panel atlas of midfielders 2025/26 in PCA projection. Left panel: style map without league multipliers; right panel: quality-adjusted map. Grey points are the whole corpus of 2648 players; coloured points are the 178 Spanish-eligible players by cluster; bright rings mark the 24 with a national-team call-up 2024–26.
How to read it: every dot is the 2025/26 season of one of the midfielders in the leagues this report covers. The two axes are the first two principal components of his five per-90 numbers (goals, assists, minutes share, age, cards) — dots that sit close together had similar seasons. The style projection uses the raw numbers, the quality projection the league-adjusted ones, so switching shows who moves when the strength of his league is counted. Colours are the clusters named below; acid dots are Spanish-eligible players, a white ring marks a national-team call-up. Hover a dot for the player, click to pin, scroll to zoom, type a name to find him.
Two-panel atlas of defenders 2025/26 in PCA projection. Left panel: style map without league multipliers; right panel: quality-adjusted map. Grey points are the whole corpus of 1947 players; coloured points are the 129 Spanish-eligible players by cluster; bright rings mark the 14 with a national-team call-up 2024–26.
How to read it: every dot is the 2025/26 season of one of the defenders in the leagues this report covers. The two axes are the first two principal components of his five per-90 numbers (goals, assists, minutes share, age, cards) — dots that sit close together had similar seasons. The style projection uses the raw numbers, the quality projection the league-adjusted ones, so switching shows who moves when the strength of his league is counted. Colours are the clusters named below; acid dots are Spanish-eligible players, a white ring marks a national-team call-up. Hover a dot for the player, click to pin, scroll to zoom, type a name to find him.
Every player in the 2025/26 pool — all 381, searchable

The cards above pick by rule. This is everyone with a 2025/26 season in the data: 46 forwards, 178 midfielders, 129 defenders and 28 goalkeepers. Open a name for what the report measures about him, in plain words. Rank is within his own position group on quality-adjusted production; the two arrows mark a mid-season move.

381 of 381
    How we know

    As an analytics question In numbers: 14 showcase cards chosen from the 2025/26 pool by six selection rules, one per position group per rule.

    What we did We matched each player's season to his national-team call-ups and photo, then picked one player per position group under each of six rules.

    Sources 2025/26 FBref, Wikipedia and Wikidata rows joined by name and birth year; six selection rules, applied in order — see below.

    A federation tracking this would watch how the showcase set changes as a cohort ages, not any one card.

    What changed since last season?

    13 climbed a rung, 7 came down. The stepping-stone leagues hold 2 of the pool, from 2; the top nine hold 80, from 72.

    How to read it: the left column is last season’s rung for every player in the pool, the right column this season’s; each ribbon is the players who went from one to the other, its width their number. Acid ribbons climb, orange come down, mint are new to the pool, grey are no longer in a covered league. Hover a ribbon for the names.

    La Liga

    233 227

    387 404 → 380 845 minutes

    stepping-stone league

    2 2

    3 679 → 2 732 minutes

    top-9 league

    72 80

    113 739 → 128 412 minutes

    other covered league

    27 43

    41 640 → 67 863 minutes

    Players of the pool on each rung, 2024/25 → 2025/26, with the minutes they played there; 334 qualifying players last season, 352 this season.

    Climbed a rung 13

    • Martín Zubimendi ESP-La Liga → ENG-Premier League
    • Sergi Gómez ESP-La Liga → POR-Primeira Liga
    • Yarek Gasiorowski ESP-La Liga → NED-Eredivisie
    • Yéremy Pino ESP-La Liga → ENG-Premier League
    • Jesus Rodríguez ESP-La Liga → ITA-Serie A
    • Luis Pérez ESP-La Liga → TUR-Süper Lig
    • and 7 more

    Came down a rung 7

    • Álex Moreno ENG-Premier League → ESP-La Liga
    • Álvaro Carreras POR-Primeira Liga → ESP-La Liga
    • Carlos Soler ENG-Premier League → ESP-La Liga
    • Dean Huijsen ENG-Premier League → ESP-La Liga
    • Ricardo Visus NED-Eredivisie → POL-Ekstraklasa
    • Ferran Jutglà BEL-Pro League → ESP-La Liga
    • and 1 more

    New to the pool 112

    • Aleix Febas ESP-La Liga
    • Jonny Castro ESP-La Liga
    • Germán Valera ESP-La Liga
    • Jacobo Ramón ITA-Serie A
    • Adrián de la Fuente ESP-La Liga
    • Víctor Muñoz ESP-La Liga
    • and 106 more

    No longer in a covered league 94

    • Angeliño ITA-Serie A
    • Sergi ESP-La Liga
    • Óscar Aranda POR-Primeira Liga
    • Sergio Akieme FRA-Ligue 1
    • Iñigo Martínez ESP-La Liga
    • Álex Suárez ESP-La Liga
    • and 88 more

    “No longer in a covered league” means exactly that: retired, injured for the season, or playing in a league this report does not fetch. The data cannot tell those apart and this page does not guess. “New to the pool” likewise mixes debutants with players returning from leagues outside the set.

    How we know

    As an analytics question In numbers: every Spanish-eligible player with at least 450 minutes in 2024/25 or 2025/26, placed on the pathway’s tier ladder in each season, and the move between the two.

    What we did We took each player’s main league last season and this season, sorted the leagues into the four rungs the report uses everywhere — home league, other covered league, stepping stone, top nine — and counted who climbed, who came down, who appeared and who is no longer in any league we can see.

    Sources Season feature tables for both seasons; a player’s league is the one he played most minutes in; 450-minute floor in a season to count as present in it; rungs as defined in the pathways chapter.

    A federation tracking this would watch the two moving columns each summer, and the stepping-stone count above all.

    For a federation

    One-page brief

    The whole argument on one screen: the five numbers behind why the pool of players runs thin, the single link that carries most of the gap, two checks on the models behind the numbers, and what none of this shows.

    Show the one-page brief
    Number ESPFRAPOR
    Share of league minutes that went to players aged 21 or under4.8 %8.8 %4.9 %
    Average age of a minute played in the league26.925.625.3
    Age the first time a player has real playing time in a foreign league, over the players abroad today252324
    Share of moves abroad to a league no stronger than the player's own74 %
    Players in Europe's strongest leagues, for every million people9.545.7925.19

    If you take one thing from this: the single measured link that carries the most of the gap with both France and Portugal is how strong the domestic league is. That is one decomposition over 8 countries — a description of the gap, not a weight to plan by.

    How strong is the home league
    A season in the home league is worth about 0.91 of a season in the Premier League (0.86–0.95).

    What this does not show

    • Money: transfer fees, wages and academy budgets play no part in any number above.
    • How the academy and coaching set-up actually work day to day, which no public data source used here can see.
    • Agents, and how a move abroad actually gets arranged, which happens off any table this pipeline can read.
    • The direction of the arrow: a low share of playing time for young players at home could help cause a thin generation, or just as easily be a symptom of one — the five numbers above are associations measured the same way for every country.

    Explore the data

    Benchmark vs peer countries

    Structural benchmark vs peer countries

    Football intuition recognises the Spanish pool player by player. Its structural position among the peer countries needs an aggregation nobody holds in one place. Three numbers below that are usually not collected together.

    Cohort gaps — forwards

    Cohort U2223-2526-2930+
    Spain 6 10 12 10
    France 10 9 15 6
    Germany 5 5 8 8
    Italy 3 7 8 4
    England 2 4 6 7

    Cohort gaps — midfielders

    Cohort U2223-2526-2930+
    Spain 17 55 44 39
    France 27 48 35 27
    Germany 15 24 19 26
    Italy 8 18 22 16
    England 15 17 25 9

    Cohort gaps — defenders

    Cohort U2223-2526-2930+
    Spain 17 29 34 38
    France 15 23 25 15
    Germany 9 6 22 27
    Italy 7 12 14 15
    England 6 11 20 15

    * Count and median npG+A per 90 of players with the country's nationality in a top-9 league, 2025/26, at least 450 minutes; cohort by age at the season's calendar turn (start year + 1 − birth year). 5 of the 8 countries are shown; the heatmap above carries all of them. Largest Spanish shortfalls against the peer median count: midfielders U22 (17 vs 22), forwards U22 (6 vs 5), forwards 23-25 (10 vs 6).

    The full picture, all nine peer countries at once, as a heatmap:

    Heatmap of the international cohort benchmark: 8 countries by position group and age cohort, 2025/26 season; the Spanish row is outlined.
    Median non-penalty goals + assists per 90 by country, position group and age cohort, 2025/26; the outlined row is Spain.

    Observations

    Per capita: rank 4 of 8 · The largest cohort gap: midfielders U22 · Trajectories 2024/25 → 2025/26: mostly stable

    Per capita: rank 4 of 8

    464 Spanish players on 2025/26 rosters of the nine strongest leagues give 9.54 per million inhabitants, rank 4 of 8. Portugal leads with 25.19, 2.6 times the Spanish density; Netherlands sits one place above with 20.69 from 372 players and a population 2.7 times smaller. Below Spain: France, England, Italy, Germany.

    The largest cohort gap: midfielders U22

    Counting 2025/26 top-9 players by position group and age cohort and comparing the Spanish count with the median of the other seven peers, the three largest shortfalls are midfielders U22 — 17 Spanish against a peer median of 22; forwards U22 — 6 Spanish against a peer median of 5; forwards 23-25 — 10 Spanish against a peer median of 6. The cohort tables above show the medians behind the counts.

    Trajectories 2024/25 → 2025/26: mostly stable

    167 Spanish-eligible players had at least 900 minutes in both 2024/25 and 2025/26: forwards 17 (3 up, 9 stable, 5 down); midfielders 85 (20 up, 38 stable, 27 down); defenders 65 (10 up, 48 stable, 7 down). A move counts as up or down when league-adjusted goals + assists per 90 changed by more than 0.05; 95 of 167 stayed within that band. These are season-over-season deltas, not projections.

    Cluster archetypes

    Cluster archetypes (style projection)

    Clusters are fitted on the whole corpus of 2025/26 player-seasons and read here through their Spanish members, K chosen by silhouette score (Rousseeuw, 1987) with scikit-learn (Pedregosa et al., 2011). The label describes the cluster's median footprint; the count is Spanish members of the corpus cluster; names are the Spanish members with the most minutes.

    Two-panel atlas of forwards 2025/26 in PCA projection. Left panel: style map without league multipliers; right panel: quality-adjusted map. Grey points are the whole corpus of 924 players; coloured points are the 46 Spanish-eligible players by cluster; bright rings mark the 6 with a national-team call-up 2024–26.
    Atlas of forwards 2025/26 in both projections: 46 Spanish-eligible players in colour against a corpus of 924. Bright rings mark the national-team pool (call-up 2024–26, 6 players).
    Two-panel atlas of midfielders 2025/26 in PCA projection. Left panel: style map without league multipliers; right panel: quality-adjusted map. Grey points are the whole corpus of 2648 players; coloured points are the 178 Spanish-eligible players by cluster; bright rings mark the 24 with a national-team call-up 2024–26.
    Atlas of midfielders 2025/26 in both projections: 178 Spanish-eligible players in colour against a corpus of 2648. Bright rings mark the national-team pool (call-up 2024–26, 24 players).
    Two-panel atlas of defenders 2025/26 in PCA projection. Left panel: style map without league multipliers; right panel: quality-adjusted map. Grey points are the whole corpus of 1947 players; coloured points are the 129 Spanish-eligible players by cluster; bright rings mark the 14 with a national-team call-up 2024–26.
    Atlas of defenders 2025/26 in both projections: 129 Spanish-eligible players in colour against a corpus of 1947. Bright rings mark the national-team pool (call-up 2024–26, 14 players).

    Forwards

    High-assist forwards 1 Spanish of 112 · NT pool 1 · median born 1993
    Corpus medians: 0.30 non-penalty goals and 0.21 assists per 90, 33 % of the club's minutes, age 25, 0.15 cards per 90. Tactical readCreators from the front line — assist rate more than double the forward median on rotation minutes (38 %), scoring at median. Wide forwards and second strikers who feed the box rather than occupy it (Pérez).
    Duel-heavy rotation forwards 6 Spanish of 144 · NT pool 1 · median born 2000 Adrián LisoBorja SainzIsaac RomeroÓscar Clemente
    Corpus medians: 0.30 non-penalty goals and 0.10 assists per 90, 33 % of the club's minutes, age 24, 0.29 cards per 90. Tactical readRotation forwards whose signature is physical engagement — card rate roughly three times the forward median, a third of minutes, output at median. Pressing and duel-heavy roles rather than finishing (Liso, Sainz, Romero).
    High-minutes starting forwards 9 Spanish of 148 · NT pool 2 · median born 1998 Nacho FerriToni MartínezMikel OyarzabalJorge de Frutos
    Corpus medians: 0.30 non-penalty goals and 0.13 assists per 90, 76 % of the club's minutes, age 24, 0.14 cards per 90. Tactical readEvery-week starters — three quarters of the season's minutes, assist rate about 1.5 times the forward median, scoring at median. Mostly a top-five-league footprint: the first-choice forward who links play as much as he finishes (Ferri, Martínez, Oyarzabal).
    Older forwards with moderate playing time 13 Spanish of 142 · NT pool 1 · median born 1992 Borja IglesiasJorge FélixRafa MirKiké
    Corpus medians: 0.28 non-penalty goals and 0.08 assists per 90, 46 % of the club's minutes, age 32, 0.17 cards per 90. Tactical readExperienced forwards on managed minutes — median age 31, about 40 % of minutes, output at median. The impact or target forward used in rotation (Iglesias, Félix, Mir).
    Young low-minute forwards 9 Spanish of 255 · NT pool 0 · median born 2001 Antonio CortésPablo DuránHugo ÁlvarezBryan Zaragoza
    Corpus medians: 0.27 non-penalty goals and 0.08 assists per 90, 29 % of the club's minutes, age 23, 0.13 cards per 90. Tactical readThe development tier and the largest forward cluster — median age 23, under 30 % of minutes, output just below median. Where most of the home pool's young forwards sit (Cortés, Durán, Álvarez).
    Primary scorers 8 Spanish of 123 · NT pool 1 · median born 2002 Hugo DuroFerran TorresFerran JutglàSamu Omorodion
    Corpus medians: 0.50 non-penalty goals and 0.10 assists per 90, 51 % of the club's minutes, age 25, 0.16 cards per 90. Tactical readPrimary scorers — non-penalty goal rate nearly double the forward median on starter minutes (56 %). The finishing forward of a first-choice line (Duro, Torres, Jutglà).

    Midfielders

    High-card-rate midfielders 39 Spanish of 387 · NT pool 4 · median born 2001 Óscar GilIsaac Palazón CamachoPol LozanoMario Martín
    Corpus medians: 0.08 non-penalty goals and 0.08 assists per 90, 38 % of the club's minutes, age 24, 0.33 cards per 90. Tactical readBall-winning, duel-heavy midfielders — the card rate (about 2.5 times the midfield median) is the defining feature, production at the floor of the group. The destroyer profile, often in a double pivot (Gil, Camacho, Lozano).
    Older rotation midfielders 35 Spanish of 425 · NT pool 1 · median born 1994 Lucas TorróBorja GalánRubén GarcíaKoke
    Corpus medians: 0.08 non-penalty goals and 0.10 assists per 90, 39 % of the club's minutes, age 30, 0.21 cards per 90. Tactical readVeteran rotation midfielders — median age 30 on managed minutes (40 %), output at median, card rate above it. Experience kept in the squad rather than on the pitch every week (Torró, Galán, García).
    Young low-minute midfielders 37 Spanish of 624 · NT pool 4 · median born 2003 Carlos ÁlvarezJan VirgiliDiego LópezMateo Joseph
    Corpus medians: 0.08 non-penalty goals and 0.09 assists per 90, 29 % of the club's minutes, age 22, 0.17 cards per 90. Tactical readDevelopment midfielders — the home pool's largest midfield group: median age 22, under a third of minutes, output at median. The pipeline's waiting room (Álvarez, Virgili, López).
    Everyday starting midfielders, low scoring output 35 Spanish of 600 · NT pool 5 · median born 1999 Aleix FebasAntonio BlancoJon MoncayolaMartín Zubimendi
    Corpus medians: 0.08 non-penalty goals and 0.09 assists per 90, 79 % of the club's minutes, age 25, 0.18 cards per 90. Tactical readThe engine room — nearly 80 % of minutes with median output: holding and box-to-box midfielders whose value is continuity and structure, not numbers (Febas, Blanco, Moncayola).
    High-scoring attacking midfielders 12 Spanish of 320 · NT pool 3 · median born 1999 Pablo FornalsJesús ImazAlberto MoleiroFran Álvarez
    Corpus medians: 0.25 non-penalty goals and 0.13 assists per 90, 54 % of the club's minutes, age 24, 0.17 cards per 90. Tactical readGoal-scoring attacking midfielders — non-penalty goal rate three times the midfield median on starter minutes (56 %). The number 8/10 who arrives in the box (Fornals, Imaz, Moleiro).
    High-minutes creative midfielders 20 Spanish of 290 · NT pool 7 · median born 2000 Luis MillaAleix GarcíaÁlex GrimaldoSanti Comesaña
    Corpus medians: 0.14 non-penalty goals and 0.22 assists per 90, 59 % of the club's minutes, age 24, 0.17 cards per 90. Tactical readStarting playmakers — assist rate three times the midfield median on 62 % of minutes, scoring nearly double. The creative hub of the middle third (Milla, García, Grimaldo).

    Defenders

    Everyday starting defenders 21 Spanish of 431 · NT pool 5 · median born 2000 IglesiasCatenaMujaid SadickJonny Castro
    Corpus medians: 0.03 non-penalty goals and 0.03 assists per 90, 84 % of the club's minutes, age 25, 0.18 cards per 90. Tactical readThe defensive core — 85 % of minutes, output at the DF floor. Availability and continuity are the signal; production is not (Iglesias, Catena, Sadick).
    High-card-rate defenders 26 Spanish of 284 · NT pool 1 · median born 2000 Jacobo RamónPablo MaffeoCarmonaDaniel Vivian
    Corpus medians: 0.02 non-penalty goals and 0.02 assists per 90, 47 % of the club's minutes, age 24, 0.36 cards per 90. Tactical readDuel-heavy defenders — card rate 2.5 times the DF median with rotation minutes (46 %). The physical stopper profile (Ramón, Maffeo, Carmona).
    Young low-minute defenders 24 Spanish of 424 · NT pool 3 · median born 2003 Jon MartinRafa MarínPau NavarroAlejandro Balde
    Corpus medians: 0.02 non-penalty goals and 0.02 assists per 90, 34 % of the club's minutes, age 22, 0.18 cards per 90. Tactical readDevelopment defenders — median age 22, about a third of minutes, output at the floor. The tier the 23–25 cohort draws from (Martin, Marín, Navarro).
    Goal-scoring defenders 14 Spanish of 218 · NT pool 0 · median born 1999 Carlos RomeroJuandeYarek GasiorowskiMario Hermoso
    Corpus medians: 0.10 non-penalty goals and 0.04 assists per 90, 55 % of the club's minutes, age 25, 0.20 cards per 90. Tactical readSet-piece threats — defenders scoring at five times the DF median on 60 % of minutes. Aerial presence in both boxes (Romero, Juande, Gasiorowski).
    Older defenders 28 Spanish of 363 · NT pool 3 · median born 1993 Marcos AlonsoÁlex MorenoSergi GómezJosé Luis Gayà
    Corpus medians: 0.02 non-penalty goals and 0.02 assists per 90, 44 % of the club's minutes, age 31, 0.20 cards per 90. Tactical readExperienced defenders on managed minutes — median age 31, 44 % of minutes, output at the floor. Leadership and cover rather than a starting role (Alonso, Moreno, Gómez).
    High-assist defenders with high playing time 16 Spanish of 226 · NT pool 2 · median born 1999 Marc CucurellaYuri BerchicheSergio GómezArnau Martinez
    Corpus medians: 0.04 non-penalty goals and 0.12 assists per 90, 64 % of the club's minutes, age 25, 0.20 cards per 90. Tactical readAttacking full-backs — assist rate seven times the DF median on starter minutes (65 %). The wide defender whose job ends in the final third (Cucurella, Berchiche, Gómez).
    Trajectories

    Trajectories 2024/25 → 2025/26 (Spanish-eligible, ≥ 900 minutes in both seasons)

    Season-over-season change in goals + assists per 90, league-adjusted. A move counts as up or down beyond ± 0.05; everything inside that band is stable and not listed.

    Forwards — 17 players: 3 up, 9 stable, 5 down

    Moving up · G+A / 90 adj.

    PlayerLeagueMin 2024/25 / 2025/26Change
    Ferran Jutglà ESP-La Liga 1714 / 1652 +0.120
    Toni Martínez ESP-La Liga 1012 / 2714 +0.106
    Mikel Oyarzabal ESP-La Liga 2250 / 2710 +0.053

    Moving down · G+A / 90 adj.

    PlayerLeagueMin 2024/25 / 2025/26Change
    Ayoze Pérez ESP-La Liga 1970 / 1124 −0.189
    Ferran Torres ESP-La Liga 1106 / 1965 −0.157
    Álvaro Morata ITA-Serie A 1099 / 930 −0.151
    Pablo Durán ESP-La Liga 1394 / 1425 −0.118
    Samu Omorodion POR-Primeira Liga 2263 / 1402 −0.069

    Midfielders — 85 players: 20 up, 38 stable, 27 down

    Moving up · G+A / 90 adj.

    PlayerLeagueMin 2024/25 / 2025/26Change
    Jesus Rodríguez ITA-Serie A 1111 / 1731 +0.227
    Pablo Fornals ESP-La Liga 1827 / 2848 +0.220
    Roberto Navarro ESP-La Liga 1278 / 1307 +0.191
    Alberto Moleiro ESP-La Liga 2714 / 2478 +0.181
    Lamine Yamal ESP-La Liga 2856 / 2262 +0.129

    Moving down · G+A / 90 adj.

    PlayerLeagueMin 2024/25 / 2025/26Change
    Oihan Sancet ESP-La Liga 1620 / 1788 −0.329
    Álex Berenguer ESP-La Liga 2339 / 2154 −0.174
    Álex Baena ESP-La Liga 2595 / 1560 −0.172
    Juanlu Sánchez ESP-La Liga 1722 / 1990 −0.155
    Marc Roca ESP-La Liga 906 / 2026 −0.146

    Defenders — 65 players: 10 up, 48 stable, 7 down

    Moving up · G+A / 90 adj.

    PlayerLeagueMin 2024/25 / 2025/26Change
    Álex Valle ITA-Serie A 1030 / 2026 +0.139
    Alberto Moreno ITA-Serie A 1727 / 1233 +0.119
    Carlos Romero ESP-La Liga 2554 / 3191 +0.103
    Carmona ESP-La Liga 2942 / 2565 +0.093
    Alejandro Francés ESP-La Liga 1173 / 1116 +0.087

    Moving down · G+A / 90 adj.

    PlayerLeagueMin 2024/25 / 2025/26Change
    Gerard Martín ESP-La Liga 1038 / 2119 −0.144
    Pedro Porro ENG-Premier League 2610 / 2796 −0.132
    Eric García ESP-La Liga 1566 / 2721 −0.102
    Javi Rodríguez ESP-La Liga 2514 / 2558 −0.077
    Kike Salas ESP-La Liga 2238 / 2203 −0.059
    Why does the train leave?

    Why does the train leave?

    Four exhibits comparing Spain with 7 peer countries: youth exposure at home, export route, how exports fare, and who made it.

    Exhibit A — youth exposure at home

    Share of a domestic league's total minutes played by its own nationals aged 21 or under, 2025/26.

    * Σ minutes of players with the league country's nationality and age ≤ 21 at the season's start ÷ Σ minutes of all players in the league, 2025/26. Under-23 shares: NED 24.2 %, FRA 14.4 %, BEL 16.4 %, GER 10.9 %, POR 9.1 %, ESP 16.9 %, ENG 6.4 %, ITA 7.3 %. A league without a bar is not covered by FBref.

    Exhibit B — export route

    For every peer-country player on a 2026/27 top-9 roster: the age at the first top-9 season (full roster, and recent entrants only) and, for recent entrants, the league of the season before it. Not informative for this nation: La Liga and every peer's own league are themselves top-9 leagues, so the domestic / top-9 split has no content here; the exhibit is kept for comparability with other nations. Spanish exports: 368 players, median export age 22 (recent entrants 98, median 21.5), 0 % of the recent ones straight from the La Liga*.

    CountrynRecent Export age (all)Export age (recent) DomesticStepping stoneOther top-9Not covered Censored
    ESP Spain 368 98 22 21.5 0 % 0 % 0 % 100 % 33 %
    FRA France 313 107 21 21 0 % 2 % 0 % 98 % 34 %
    GER Germany 208 63 22.5 22 0 % 57 % 0 % 43 % 36 %
    ITA Italy 144 36 21 22 0 % 0 % 0 % 100 % 32 %
    ENG England 154 29 21 20 0 % 0 % 0 % 100 % 39 %
    NED Netherlands 268 78 20 20.5 0 % 3 % 0 % 97 % 29 %
    POR Portugal 176 40 20.5 20.5 0 % 5 % 0 % 95 % 36 %
    BEL Belgium 208 55 20 20 0 % 0 % 0 % 100 % 32 %

    * Export age = age at the first season in any headline league, history back to 2020/21; a first appearance already in 2020/21 is censored. Recent entrants: first top-9 season 2025/26 or 2026/27, the only ones whose previous season lies inside the fetched window (2024/25 onwards for peer domestic leagues). Stepping-stone leagues: NED-Eredivisie, BEL-Pro League, POR-Primeira Liga, TUR-Süper Lig, GER-2. Bundesliga. Not covered: no earlier row in the data.

    Exhibit C — how the exports fare

    Peer-country players at a top-9 club in 2025/26: median share of the club's minutes, and the club's strength within its league.

    ESP Spain n = 464
    60 %
    POR Portugal n = 268
    60 %
    BEL Belgium n = 253
    59 %
    ENG England n = 208
    55 %
    GER Germany n = 262
    50 %
    NED Netherlands n = 372
    48 %
    FRA France n = 395
    47 %
    ITA Italy n = 201
    45 %

    * Minutes share = player minutes ÷ (club matches × 90), 2025/26, one row per player-season. Club strength proxy: goals-scored percentile within league — clubs ranked by the goals their own roster scored that season (ClubElo was unreachable at run time). Both are medians over the country's exports; n per country in the bars.

    Exhibit D — profile of those who made it

    Goals + assists per 90, league-adjusted, in 2025/26 by the tier of the player's own league: domestic, stepping stone, top-9, or another covered league. Spanish count and median against the median of the peer countries' values. Not informative for this nation: La Liga and every peer's own league are themselves top-9 leagues, so the domestic / top-9 split has no content here; the exhibit is kept for comparability with other nations.

    Profile table by tier and position group
    TierGroupESP nESP medianPeer median nPeer median
    stepping-stone league FW 0 2 0.22
    stepping-stone league MF 1 0.09 4 0.09
    stepping-stone league DF 1 0.08 1.5 0.03
    top-9 league FW 38 0.31 22 0.28
    top-9 league MF 153 0.14 82 0.15
    top-9 league DF 117 0.06 62 0.05
    other covered league FW 8 0.13 4.5 0.14
    other covered league MF 24 0.10 5 0.08
    other covered league DF 11 0.04 7 0.03

    * Tier = the league of the player's own 2025/26 season. Peer median n and peer median are medians across the peer countries present in that tier and group; a tier a country has no player in is absent, not zero.

    Exhibit E — where Spanish exports go

    Of the 353 mapped Spanish players, 126 play outside the La Liga.

    • top-9 Mujaid Sadick · Martín Zubimendi · Nacho Ferri
    • other Jesús Imaz · Iker Pozo · Josema
    • stepping stone Sergio López · Javier Fernández

    * Buckets by the league of the player's own 2025/26 season; a player is counted once per position group, like everywhere else on the page, so one with rows in two groups counts in each; the number in front of each bar is the player count, the median multiplier is the bucket's median league multiplier. Sideways: destination league multiplier <= the domestic league's multiplier.

    F · The 2026 FIFA World Cup squad by league tier

    Where the 26 players named to the 2026 FIFA World Cup squad played in 2025/26, next to Germany, France, England, Netherlands, Belgium, Portugal. Tier = the league of the player's most-minutes 2025/26 row.

    Minutes, multipliers and age cohorts by country
    Country Median minutesMedian multiplier U2223–25 26–2930+
    ESP Spain 2181 0.807 3 8 7 8
    GER Germany 2208.5 0.788 2 8 4 12
    FRA France 2316 0.807 3 7 10 6
    ENG England 2199 1.000 2 8 9 7
    NED Netherlands 1903 1.000 1 7 11 7
    BEL Belgium 2034 0.807 4 8 5 9
    POR Portugal 2226 0.807 1 6 11 8

    * 8 squad players have no 2025/26 row in the fetched leagues and are counted as unmatched.

    Historical analogs

    Historical analogs

    For each showcase player the finder takes the nearest 5 player-seasons at the same age across the whole corpus of every fetched league — the 9 headline leagues back to 2020/21, the rest from 2024/25 — all nationalities. Distance is computed on three standardised features: npG+A/90 (quality-adjusted), minutes, league multiplier. For every analog the following seasons are shown as they happened. Description, not prediction: the reader sees the spread of paths; the method imposes none.

    Target

    Ferran Torres

    FW · age 26 · ESP-La Liga 2025/26 · 1965 min · 0.57 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Christopher Nkunku FRA GER-Bundesliga 2022/23 · 1897 min · 0.56 npG+A/90 · d = 0.16
      Followed by: 2024/25  ENG-Premier League · 921 min · 0.36 2025/26  ITA-Serie A · 1356 min · 0.29
    2. 2 Georges Mikautadze GEO ESP-La Liga 2025/26 · 2109 min · 0.56 npG+A/90 · d = 0.19
      No later season in the corpus.
    3. 3 Ademola Lookman NGA ITA-Serie A 2022/23 · 1729 min · 0.57 npG+A/90 · d = 0.39
      Followed by: 2023/24  ITA-Serie A · 1894 min · 0.60 2024/25  ITA-Serie A · 2247 min · 0.51 2025/26  ITA-Serie A · 1412 min · 0.30
    4. 4 Nikola Krstović MNE ITA-Serie A 2025/26 · 1791 min · 0.53 npG+A/90 · d = 0.44
      No later season in the corpus.
    5. 5 Victor Osimhen NGA ITA-Serie A 2023/24 · 1982 min · 0.50 npG+A/90 · d = 0.63
      Followed by: 2024/25  TUR-Süper Lig · 2372 min · 0.40 2025/26  TUR-Süper Lig · 1707 min · 0.38

    Target

    Roberto Férnandez

    FW · age 24 · ESP-La Liga 2025/26 · 2382 min · 0.30 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Benedict Hollerbach GER GER-Bundesliga 2024/25 · 2540 min · 0.31 npG+A/90 · d = 0.25
      Followed by: 2025/26  GER-Bundesliga · 872 min · 0.35
    2. 2 Samuel Chukwueze NGA ESP-La Liga 2022/23 · 2339 min · 0.34 npG+A/90 · d = 0.37
      Followed by: 2023/24  ITA-Serie A · 1017 min · 0.23 2024/25  ITA-Serie A · 925 min · 0.28 2025/26  ENG-Premier League · 1079 min · 0.42
    3. 3 Lorenzo Colombo ITA ITA-Serie A 2025/26 · 2326 min · 0.25 npG+A/90 · d = 0.44
      No later season in the corpus.
    4. 4 Nikola Krstović MNE ITA-Serie A 2023/24 · 2373 min · 0.25 npG+A/90 · d = 0.45
      Followed by: 2024/25  ITA-Serie A · 3057 min · 0.35 2025/26  ITA-Serie A · 1791 min · 0.53
    5. 5 Nicolás González ARG ITA-Serie A 2021/22 · 2357 min · 0.34 npG+A/90 · d = 0.48
      Followed by: 2022/23  ITA-Serie A · 1354 min · 0.29 2023/24  ITA-Serie A · 1913 min · 0.40 2024/25  ITA-Serie A · 1750 min · 0.19 2025/26  ESP-La Liga · 1448 min · 0.21

    Target

    Mikel Oyarzabal

    FW · age 29 · ESP-La Liga 2025/26 · 2710 min · 0.33 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Iñaki Williams GHA ESP-La Liga 2022/23 · 2836 min · 0.31 npG+A/90 · d = 0.21
      Followed by: 2023/24  ESP-La Liga · 2844 min · 0.32 2024/25  ESP-La Liga · 2652 min · 0.33 2025/26  ESP-La Liga · 2157 min · 0.23
    2. 2 Tim Kleindienst GER GER-Bundesliga 2023/24 · 2869 min · 0.33 npG+A/90 · d = 0.23
      Followed by: 2024/25  GER-Bundesliga · 2737 min · 0.52
    3. 3 Ché Adams SCO ITA-Serie A 2024/25 · 2652 min · 0.35 npG+A/90 · d = 0.29
      Followed by: 2025/26  ITA-Serie A · 1893 min · 0.32
    4. 4 Vedat Muriqi KVX ESP-La Liga 2022/23 · 2937 min · 0.34 npG+A/90 · d = 0.32
      Followed by: 2023/24  ESP-La Liga · 2327 min · 0.28 2024/25  ESP-La Liga · 2058 min · 0.27 2025/26  ESP-La Liga · 3128 min · 0.42
    5. 5 Jorge de Frutos ESP ESP-La Liga 2025/26 · 2463 min · 0.31 npG+A/90 · d = 0.36
      No later season in the corpus.

    Target

    Borja Iglesias

    FW · age 33 · ESP-La Liga 2025/26 · 1900 min · 0.42 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Max Kruse GER GER-Bundesliga 2020/21 · 1629 min · 0.45 npG+A/90 · d = 0.41
      Followed by: 2021/22  GER-Bundesliga · 1270 min · 0.32 2021/22  GER-Bundesliga · 1128 min · 0.28
    2. 2 Marius Bülter GER GER-Bundesliga 2025/26 · 1597 min · 0.39 npG+A/90 · d = 0.50
      No later season in the corpus.
    3. 3 Ciro Immobile ITA ITA-Serie A 2022/23 · 2219 min · 0.41 npG+A/90 · d = 0.51
      Followed by: 2023/24  ITA-Serie A · 1652 min · 0.23 2024/25  TUR-Süper Lig · 2011 min · 0.24 2025/26  FRA-Ligue 1 · 705 min · 0.34
    4. 4 Willian José BRA ESP-La Liga 2023/24 · 1971 min · 0.49 npG+A/90 · d = 0.56
      No later season in the corpus.
    5. 5 Leonardo Pavoletti ITA ITA-Serie A 2020/21 · 1584 min · 0.37 npG+A/90 · d = 0.66
      Followed by: 2021/22  ITA-Serie A · 1518 min · 0.34 2023/24  ITA-Serie A · 628 min · 0.44

    Target

    Nacho Ferri

    FW · age 22 · BEL-Pro League 2025/26 · 2891 min · 0.23 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Thom van Bergen NED NED-Eredivisie 2025/26 · 2966 min · 0.20 npG+A/90 · d = 0.39
      Followed by: 2026/27  NED-Eredivisie · 540 min · 0.27
    2. 2 Hélio Varela CPV POR-Primeira Liga 2023/24 · 2743 min · 0.20 npG+A/90 · d = 0.40
      No later season in the corpus.
    3. 3 Matthis Abline FRA FRA-Ligue 1 2024/25 · 2768 min · 0.25 npG+A/90 · d = 0.50
      Followed by: 2025/26  FRA-Ligue 1 · 2494 min · 0.26
    4. 4 Matija Frigan CRO BEL-Pro League 2024/25 · 2665 min · 0.28 npG+A/90 · d = 0.55
      No later season in the corpus.
    5. 5 Danilo BRA NED-Eredivisie 2020/21 · 2644 min · 0.28 npG+A/90 · d = 0.60
      Followed by: 2022/23  NED-Eredivisie · 1336 min · 0.35

    Target

    Lamine Yamal

    MF · age 19 · ESP-La Liga 2025/26 · 2262 min · 0.59 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Florian Wirtz GER GER-Bundesliga 2021/22 · 1851 min · 0.49 npG+A/90 · d = 1.01
      Followed by: 2022/23  GER-Bundesliga · 1090 min · 0.43 2023/24  GER-Bundesliga · 2372 min · 0.51 2024/25  GER-Bundesliga · 2351 min · 0.48 2025/26  ENG-Premier League · 2378 min · 0.28
    2. 2 Mathys Tel FRA GER-Bundesliga 2023/24 · 1050 min · 0.52 npG+A/90 · d = 1.72
      Followed by: 2024/25  ENG-Premier League · 911 min · 0.33 2025/26  ENG-Premier League · 1349 min · 0.29
    3. 3 Jamal Musiala GER GER-Bundesliga 2021/22 · 1465 min · 0.36 npG+A/90 · d = 2.22
      Followed by: 2022/23  GER-Bundesliga · 2198 min · 0.56 2023/24  GER-Bundesliga · 1755 min · 0.46 2024/25  GER-Bundesliga · 1798 min · 0.43 2025/26  GER-Bundesliga · 683 min · 0.37
    4. 4 Julio Enciso PAR ENG-Premier League 2022/23 · 806 min · 0.43 npG+A/90 · d = 2.57
      Followed by: 2023/24  ENG-Premier League · 475 min · 0.27 2024/25  ENG-Premier League · 869 min · 0.37 2025/26  FRA-Ligue 1 · 1883 min · 0.21
    5. 5 Gio Reyna USA GER-Bundesliga 2020/21 · 1976 min · 0.27 npG+A/90 · d = 2.76
      Followed by: 2022/23  GER-Bundesliga · 625 min · 0.49 2025/26  GER-Bundesliga · 520 min · 0.16

    Target

    Martín Zubimendi

    MF · age 27 · ENG-Premier League 2025/26 · 2992 min · 0.19 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Tomáš Souček CZE ENG-Premier League 2021/22 · 3062 min · 0.18 npG+A/90 · d = 0.14
      Followed by: 2022/23  ENG-Premier League · 2815 min · 0.17 2023/24  ENG-Premier League · 2870 min · 0.27 2024/25  ENG-Premier League · 2567 min · 0.32 2025/26  ENG-Premier League · 2200 min · 0.21
    2. 2 Josh Brownhill ENG ENG-Premier League 2021/22 · 2955 min · 0.16 npG+A/90 · d = 0.27
      Followed by: 2023/24  ENG-Premier League · 2252 min · 0.23
    3. 3 Rodri ESP ENG-Premier League 2022/23 · 2911 min · 0.24 npG+A/90 · d = 0.43
      Followed by: 2023/24  ENG-Premier League · 2931 min · 0.45 2025/26  ENG-Premier League · 1511 min · 0.12
    4. 4 John McGinn SCO ENG-Premier League 2020/21 · 3330 min · 0.20 npG+A/90 · d = 0.46
      Followed by: 2021/22  ENG-Premier League · 3090 min · 0.20 2022/23  ENG-Premier League · 2693 min · 0.15 2023/24  ENG-Premier League · 2999 min · 0.28 2024/25  ENG-Premier League · 2223 min · 0.21
    5. 5 Declan Rice ENG ENG-Premier League 2025/26 · 3094 min · 0.25 npG+A/90 · d = 0.55
      No later season in the corpus.

    Target

    Víctor Muñoz

    MF · age 23 · ESP-La Liga 2025/26 · 2656 min · 0.20 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Nathaniel Brown GER GER-Bundesliga 2025/26 · 2656 min · 0.20 npG+A/90 · d = 0.10
      No later season in the corpus.
    2. 2 Ritsu Doan JPN GER-Bundesliga 2020/21 · 2768 min · 0.17 npG+A/90 · d = 0.28
      Followed by: 2021/22  NED-Eredivisie · 1510 min · 0.21 2022/23  GER-Bundesliga · 2424 min · 0.25 2023/24  GER-Bundesliga · 2246 min · 0.26 2024/25  GER-Bundesliga · 2862 min · 0.36
    3. 3 Arthur Atta FRA ITA-Serie A 2025/26 · 2557 min · 0.22 npG+A/90 · d = 0.30
      No later season in the corpus.
    4. 4 Máximo Perrone ARG ITA-Serie A 2025/26 · 2742 min · 0.18 npG+A/90 · d = 0.30
      No later season in the corpus.
    5. 5 Pedri ESP ESP-La Liga 2024/25 · 2879 min · 0.21 npG+A/90 · d = 0.31
      Followed by: 2025/26  ESP-La Liga · 2104 min · 0.31

    Target

    Luis Milla

    MF · age 32 · ESP-La Liga 2025/26 · 3271 min · 0.22 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Daniel Parejo ESP ESP-La Liga 2020/21 · 3112 min · 0.17 npG+A/90 · d = 0.48
      Followed by: 2021/22  ESP-La Liga · 2704 min · 0.25 2022/23  ESP-La Liga · 3285 min · 0.12 2023/24  ESP-La Liga · 2580 min · 0.14 2024/25  ESP-La Liga · 2273 min · 0.16
    2. 2 Sergi Darder ESP ESP-La Liga 2024/25 · 2744 min · 0.20 npG+A/90 · d = 0.73
      Followed by: 2025/26  ESP-La Liga · 2680 min · 0.16
    3. 3 Darko Lazović SRB ITA-Serie A 2021/22 · 2766 min · 0.20 npG+A/90 · d = 0.73
      Followed by: 2022/23  ITA-Serie A · 2242 min · 0.26 2023/24  ITA-Serie A · 1928 min · 0.16 2024/25  ITA-Serie A · 1459 min · 0.19
    4. 4 Luis Rioja ESP ESP-La Liga 2024/25 · 2831 min · 0.16 npG+A/90 · d = 0.82
      Followed by: 2025/26  ESP-La Liga · 2624 min · 0.22
    5. 5 Rani Khedira TUN GER-Bundesliga 2025/26 · 2830 min · 0.16 npG+A/90 · d = 0.82
      No later season in the corpus.

    Target

    Aitor Ruibal

    DF · age 30 · ESP-La Liga 2025/26 · 1808 min · 0.18 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Lucas Vázquez ESP ESP-La Liga 2020/21 · 1848 min · 0.19 npG+A/90 · d = 0.12
      Followed by: 2021/22  ESP-La Liga · 1833 min · 0.09 2022/23  ESP-La Liga · 1144 min · 0.19 2023/24  ESP-La Liga · 1419 min · 0.31 2024/25  ESP-La Liga · 2189 min · 0.15
    2. 2 Ramy Bensebaini ALG GER-Bundesliga 2024/25 · 2022 min · 0.19 npG+A/90 · d = 0.30
      Followed by: 2025/26  GER-Bundesliga · 1530 min · 0.17
    3. 3 Alfonso Pedraza ESP ESP-La Liga 2025/26 · 1689 min · 0.13 npG+A/90 · d = 0.44
      No later season in the corpus.
    4. 4 Dani Carvajal ESP ESP-La Liga 2021/22 · 1551 min · 0.13 npG+A/90 · d = 0.54
      Followed by: 2022/23  ESP-La Liga · 1784 min · 0.06 2023/24  ESP-La Liga · 2171 min · 0.18 2024/25  ESP-La Liga · 609 min · 0.06 2025/26  ESP-La Liga · 977 min · 0.07
    5. 5 Jeremy Toljan GER ITA-Serie A 2023/24 · 2083 min · 0.14 npG+A/90 · d = 0.56
      Followed by: 2025/26  ESP-La Liga · 3164 min · 0.10

    Target

    Pau Cubarsí

    DF · age 19 · ESP-La Liga 2025/26 · 2703 min · 0.03 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Leny Yoro FRA FRA-Ligue 1 2023/24 · 2673 min · 0.04 npG+A/90 · d = 0.69
      Followed by: 2024/25  ENG-Premier League · 1165 min · 0.03 2025/26  ENG-Premier League · 1740 min · 0.02
    2. 2 Abdoul Coulibaly GER GER-Bundesliga 2025/26 · 2120 min · 0.04 npG+A/90 · d = 0.78
      No later season in the corpus.
    3. 3 Luka Vušković CRO GER-Bundesliga 2025/26 · 2442 min · 0.12 npG+A/90 · d = 0.84
      No later season in the corpus.
    4. 4 Iván Fresneda ESP ESP-La Liga 2022/23 · 1743 min · 0.01 npG+A/90 · d = 1.29
      Followed by: 2024/25  POR-Primeira Liga · 961 min · 0.14 2025/26  POR-Primeira Liga · 1596 min · 0.03
    5. 5 Jorne Spileers BEL BEL-Pro League 2023/24 · 2159 min · 0.03 npG+A/90 · d = 1.35
      Followed by: 2024/25  BEL-Pro League · 503 min · 0.05 2025/26  BEL-Pro League · 1202 min · 0.04

    Target

    Pedro Porro

    DF · age 27 · ENG-Premier League 2025/26 · 2796 min · 0.09 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Trevoh Chalobah ENG ENG-Premier League 2025/26 · 2783 min · 0.09 npG+A/90 · d = 0.02
      No later season in the corpus.
    2. 2 Matt Targett ENG ENG-Premier League 2021/22 · 2871 min · 0.06 npG+A/90 · d = 0.23
      Followed by: 2022/23  ENG-Premier League · 610 min · 0.01
    3. 3 James Justin ENG ENG-Premier League 2024/25 · 2912 min · 0.11 npG+A/90 · d = 0.23
      Followed by: 2025/26  ENG-Premier League · 1901 min · 0.12
    4. 4 Victor Lindelöf SWE ENG-Premier League 2020/21 · 2585 min · 0.07 npG+A/90 · d = 0.32
      Followed by: 2021/22  ENG-Premier League · 2355 min · 0.07 2022/23  ENG-Premier League · 1365 min · 0.01 2023/24  ENG-Premier League · 1328 min · 0.12 2024/25  ENG-Premier League · 704 min · 0.03
    5. 5 Diogo Dalot POR ENG-Premier League 2025/26 · 2614 min · 0.12 npG+A/90 · d = 0.35
      No later season in the corpus.

    Target

    Eric García

    DF · age 25 · ESP-La Liga 2025/26 · 2721 min · 0.05 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Loïc Bade FRA ESP-La Liga 2024/25 · 2686 min · 0.05 npG+A/90 · d = 0.08
      Followed by: 2025/26  GER-Bundesliga · 1653 min · 0.02
    2. 2 Sergi Cardona ESP ESP-La Liga 2023/24 · 2814 min · 0.07 npG+A/90 · d = 0.20
      Followed by: 2024/25  ESP-La Liga · 2945 min · 0.16 2025/26  ESP-La Liga · 1970 min · 0.15
    3. 3 Nico Schlotterbeck GER GER-Bundesliga 2023/24 · 2859 min · 0.06 npG+A/90 · d = 0.22
      Followed by: 2024/25  GER-Bundesliga · 1982 min · 0.12 2025/26  GER-Bundesliga · 2520 min · 0.14
    4. 4 Moussa Niakhaté SEN GER-Bundesliga 2020/21 · 2866 min · 0.06 npG+A/90 · d = 0.22
      Followed by: 2021/22  GER-Bundesliga · 2567 min · 0.05 2022/23  ENG-Premier League · 1163 min · 0.01 2023/24  ENG-Premier League · 1460 min · 0.07 2024/25  FRA-Ligue 1 · 2726 min · 0.00
    5. 5 Tuta BRA GER-Bundesliga 2023/24 · 2600 min · 0.07 npG+A/90 · d = 0.22
      Followed by: 2024/25  GER-Bundesliga · 2274 min · 0.08

    Target

    Carlos Romero

    DF · age 25 · ESP-La Liga 2025/26 · 3191 min · 0.17 npG+A/90 quality

    Nearest 5 at the same age

    5 nearest analogs and what followed
    1. 1 Pau Torres ESP ESP-La Liga 2021/22 · 2855 min · 0.12 npG+A/90 · d = 0.61
      Followed by: 2022/23  ESP-La Liga · 3054 min · 0.02 2023/24  ENG-Premier League · 2464 min · 0.08 2024/25  ENG-Premier League · 2020 min · 0.02 2025/26  ENG-Premier League · 1676 min · 0.02
    2. 2 Nahuel Molina ARG ESP-La Liga 2022/23 · 2867 min · 0.12 npG+A/90 · d = 0.61
      Followed by: 2023/24  ESP-La Liga · 1852 min · 0.18 2024/25  ESP-La Liga · 1590 min · 0.10 2025/26  ESP-La Liga · 1331 min · 0.15
    3. 3 Strahinja Pavlović SRB ITA-Serie A 2025/26 · 2869 min · 0.13 npG+A/90 · d = 0.62
      No later season in the corpus.
    4. 4 Gianluca Mancini ITA ITA-Serie A 2020/21 · 2852 min · 0.13 npG+A/90 · d = 0.63
      Followed by: 2021/22  ITA-Serie A · 2878 min · 0.01 2022/23  ITA-Serie A · 2858 min · 0.07 2023/24  ITA-Serie A · 2869 min · 0.11 2024/25  ITA-Serie A · 3143 min · 0.04
    5. 5 Pablo Maffeo ESP ESP-La Liga 2021/22 · 2945 min · 0.10 npG+A/90 · d = 0.68
      Followed by: 2022/23  ESP-La Liga · 2975 min · 0.12 2023/24  ESP-La Liga · 1454 min · 0.12 2024/25  ESP-La Liga · 2368 min · 0.05 2025/26  ESP-La Liga · 2662 min · 0.08

    * Corpus: player-seasons with at least 450 minutes in any fetched league — headline leagues 2020/21 → 2026/27, the other leagues 2024/25 → 2026/27; the target's own seasons are excluded. A path that ends early means the player left the covered leagues, not that the career ended.

    Player index

    Player index

    Every Spanish-eligible player with a complete 2025/26 season in a covered league — 353 players — with the numbers behind the atlases. Names with a card link to it.

    353
    Table of 353 players
    PlayerPosAge ClubLeagueMin G+A / 90 adj.Style clusterNT
    Marc Aguado MF 25 Elche ESP-La Liga 2500 0.10 Everyday starting midfielders, low scoring output
    Lucas Ahijado DF 30 Oviedo ESP-La Liga 1098 0.06 Older defenders
    Ángel Alarcón MF 21 Utrecht NED-Eredivisie 960 0.22 High-minutes creative midfielders
    Raúl Albiol DF 39 Pisa ITA-Serie A 500 0.07 Older defenders
    Carles Aleñá MF 27 Alavés ESP-La Liga 1989 0.15 Everyday starting midfielders, low scoring output
    Ángel Algobia MF 26 AVS Futebol POR-Primeira Liga 1078 0.08 Young low-minute midfielders
    Iker Almena MF 21 Hajduk Split CRO-HNL 1518 0.06 Young low-minute midfielders
    Marcos Alonso DF 34 Celta Vigo ESP-La Liga 2768 0.01 Older defenders
    Sergi Altimira MF 23 Real Betis ESP-La Liga 1186 0.17 Young low-minute midfielders
    Carlos Álvarez MF 21 Levante ESP-La Liga 1890 0.15 Young low-minute midfielders
    Fran Álvarez MF 27 Widzew Łódź POL-Ekstraklasa 2381 0.15 High-scoring attacking midfielders
    Hugo Álvarez FW 22 Celta Vigo ESP-La Liga 1340 0.34 Young low-minute forwards
    Yeray Álvarez DF 30 Athletic Club ESP-La Liga 513 0.04 Older defenders
    Jesús Areso DF 26 Athletic Club ESP-La Liga 1506 0.05 Young low-minute defenders
    Juan Cruz Armada DF 33 Osasuna ESP-La Liga 649 0.03 Older defenders
    Raúl Asencio DF 22 Real Madrid ESP-La Liga 1708 0.08 Goal-scoring defenders
    Marco Asensio MF 29 Fenerbahçe TUR-Süper Lig 1871 0.39 High-minutes creative midfielders
    Iago Aspas FW 37 Celta Vigo ESP-La Liga 1140 0.37 Older forwards with moderate playing time
    César Azpilicueta DF 35 Sevilla ESP-La Liga 1213 0.06 Older defenders
    Álex Baena MF 24 Atlético Madrid ESP-La Liga 1560 0.20 High-card-rate midfielders NT
    Baena MF 24 Widzew Łódź POL-Ekstraklasa 1351 0.09 High-card-rate midfielders
    Miguel Baeza MF 25 Nacional POR-Primeira Liga 803 0.09 Young low-minute midfielders
    Alejandro Balde DF 21 Barcelona ESP-La Liga 1869 0.07 Young low-minute defenders
    Barbero FW 26 Arouca POR-Primeira Liga 1893 0.24 High-minutes starting forwards
    Ander Barrenetxea MF 23 Real Sociedad ESP-La Liga 1763 0.27 High-minutes creative midfielders
    Pablo Barrios MF 22 Atlético Madrid ESP-La Liga 1661 0.11 Young low-minute midfielders
    Marc Bartra DF 34 Real Betis ESP-La Liga 1978 0.04 Older defenders
    Héctor Bellerín DF 30 Real Betis ESP-La Liga 1822 0.15 High-assist defenders with high playing time
    Fran Beltrán MF 26 Girona ESP-La Liga 1012 0.11 High-card-rate midfielders
    Yuri Berchiche DF 35 Athletic Club ESP-La Liga 2705 0.14 High-assist defenders with high playing time
    Álex Berenguer MF 30 Athletic Club ESP-La Liga 2154 0.16 Older rotation midfielders
    Adrian Bernabe MF 24 Parma ITA-Serie A 2470 0.13 Everyday starting midfielders, low scoring output
    Marc Bernal MF 18 Barcelona ESP-La Liga 790 0.21 High-card-rate midfielders
    Pedro Bigas DF 34 Elche ESP-La Liga 2063 0.12 Older defenders
    Antonio Blanco MF 25 Alavés ESP-La Liga 3110 0.12 Everyday starting midfielders, low scoring output
    Jalen Blesa FW 24 Rio Ave POR-Primeira Liga 1075 0.28 Young low-minute forwards
    Adama Boiro DF 23 Athletic Club ESP-La Liga 815 0.03 Young low-minute defenders
    Abel Bretones MF 24 Osasuna ESP-La Liga 1624 0.14 High-card-rate midfielders
    Brugui MF 28 Levante ESP-La Liga 1005 0.15 Older rotation midfielders
    Hugo Bueno MF 22 Wolves ENG-Premier League 2366 0.14 Everyday starting midfielders, low scoring output NT
    Calderón DF 25 Zalaegerszeg HUN-NB I 1712 0.04 Goal-scoring defenders
    Fernando Calero DF 29 Espanyol ESP-La Liga 2148 0.02 Older defenders
    Dani Calvo DF 31 Oviedo ESP-La Liga 1611 0.02 Older defenders
    Isaac Palazón Camacho MF 30 Rayo Vallecano ESP-La Liga 2248 0.13 High-card-rate midfielders
    Sergio Camello FW 24 Rayo Vallecano ESP-La Liga 823 0.44 Duel-heavy rotation forwards
    Sergi Cardona DF 26 Villarreal ESP-La Liga 1970 0.15 High-assist defenders with high playing time
    Kevin Carlos FW 24 Nice FRA-Ligue 1 880 0.17 Young low-minute forwards
    Carmona DF 23 Sevilla ESP-La Liga 2565 0.10 High-card-rate defenders
    Sergio Carreira MF 24 Celta Vigo ESP-La Liga 2694 0.10 Everyday starting midfielders, low scoring output
    Álvaro Carreras DF 22 Real Madrid ESP-La Liga 2332 0.13 High-assist defenders with high playing time
    Dani Carvajal DF 33 Real Madrid ESP-La Liga 977 0.07 Older defenders NT
    Marc Casado MF 21 Barcelona ESP-La Liga 989 0.11 Young low-minute midfielders
    Castrin DF 22 Sevilla ESP-La Liga 1277 0.06 Young low-minute defenders
    Jonny Castro DF 31 Alavés ESP-La Liga 2994 0.01 Everyday starting defenders
    Catena DF 30 Osasuna ESP-La Liga 3071 0.10 Everyday starting defenders
    Santi Cazorla MF 40 Oviedo ESP-La Liga 940 0.11 Older rotation midfielders
    Dani Ceballos MF 28 Real Madrid ESP-La Liga 486 0.10 Older rotation midfielders
    Pep Chavarría DF 27 Rayo Vallecano ESP-La Liga 2682 0.08 Everyday starting defenders
    Chema MF 20 Stuttgart GER-Bundesliga 1310 0.17 High-card-rate midfielders
    Víctor Chust DF 25 Elche ESP-La Liga 2166 0.04 High-card-rate defenders
    Óscar Clemente FW 26 Grasshopper SUI-Super League 1175 0.09 Duel-heavy rotation forwards
    Santi Comesaña MF 28 Villarreal ESP-La Liga 2407 0.24 High-minutes creative midfielders
    Copete DF 25 Valencia ESP-La Liga 1759 0.02 Young low-minute defenders
    Antonio Cortés FW 25 Korona Kielce POL-Ekstraklasa 1647 0.11 Young low-minute forwards
    Paco Cortés MF 17 Levante ESP-La Liga 472 0.10 Young low-minute midfielders
    David Costas DF 30 Oviedo ESP-La Liga 2066 0.04 Older defenders
    Pau Cubarsí DF 18 Barcelona ESP-La Liga 2703 0.03 Everyday starting defenders NT
    Marc Cucurella DF 27 Chelsea ENG-Premier League 2707 0.14 High-assist defenders with high playing time NT
    Jorge Cuenca DF 25 Fulham ENG-Premier League 938 0.03 High-card-rate defenders
    Adrián Dalmau FW 31 Piast Gliwice POL-Ekstraklasa 550 0.15 Older forwards with moderate playing time
    Sergi Darder MF 31 Mallorca ESP-La Liga 2680 0.16 Everyday starting midfielders, low scoring output
    Davinchi DF 17 Getafe ESP-La Liga 700 0.03 Young low-minute defenders
    Pedro Díaz MF 27 Rayo Vallecano ESP-La Liga 1870 0.07 Everyday starting midfielders, low scoring output
    Adrián Diéguez DF 29 Radomiak POL-Ekstraklasa 2509 0.04 Everyday starting defenders
    Carlos Dominguez DF 24 Celta Vigo ESP-La Liga 610 0.04 Young low-minute defenders
    Sergi Dominguez DF 20 Dinamo Zagreb CRO-HNL 2574 0.04 High-assist defenders with high playing time
    John Donald DF 24 Elche ESP-La Liga 665 0.08 High-card-rate defenders
    Pablo Durán FW 24 Celta Vigo ESP-La Liga 1425 0.26 Young low-minute forwards
    Hugo Duro FW 25 Valencia ESP-La Liga 1979 0.34 Primary scorers
    Unai Elgezabal DF 32 Levante ESP-La Liga 958 0.07 Older defenders
    Aritz Elustondo DF 31 Real Sociedad ESP-La Liga 720 0.08 Older defenders
    Carlos Espí FW 20 Levante ESP-La Liga 1343 0.50 Primary scorers
    Eduardo Espiau FW 30 Arka Gdynia POL-Ekstraklasa 1593 0.15 Older forwards with moderate playing time
    Antonio Espigare DF 20 Gil Vicente FC POR-Primeira Liga 980 0.04 Young low-minute defenders
    Edu Expósito MF 28 Espanyol ESP-La Liga 2523 0.19 Everyday starting midfielders, low scoring output
    Ansu Fati MF 22 Monaco FRA-Ligue 1 1093 0.30 High-scoring attacking midfielders
    Aleix Febas MF 29 Elche ESP-La Liga 3160 0.10 Everyday starting midfielders, low scoring output
    Jorge Félix FW 33 Piast Gliwice POL-Ekstraklasa 1884 0.13 Older forwards with moderate playing time
    Kiko Femenía DF 34 Getafe ESP-La Liga 2008 0.07 Older defenders
    Dro Fernández MF 17 Paris SG FRA-Ligue 1 682 0.11 Young low-minute midfielders
    Javier Fernández MF 18 Nürnberg GER-2. Bundesliga 458 0.09 High-card-rate midfielders
    Manu Fernández DF 24 Celta Vigo ESP-La Liga 758 0.03 Young low-minute defenders
    Roberto Férnandez FW 23 Espanyol ESP-La Liga 2382 0.30 High-minutes starting forwards NT
    Nacho Ferri FW 20 Westerlo BEL-Pro League 2891 0.23 High-minutes starting forwards
    José Fontán DF 25 Arouca POR-Primeira Liga 2543 0.09 High-card-rate defenders
    Pablo Fornals MF 29 Real Betis ESP-La Liga 2848 0.33 High-scoring attacking midfielders
    Héctor Fort DF 18 Elche ESP-La Liga 482 0.25 Goal-scoring defenders
    Alejandro Francés DF 22 Girona ESP-La Liga 1116 0.10 High-assist defenders with high playing time
    Iván Fresneda DF 20 Sporting CP POR-Primeira Liga 1596 0.03 High-card-rate defenders
    Jorge de Frutos FW 28 Rayo Vallecano ESP-La Liga 2463 0.31 High-minutes starting forwards
    Adrián de la Fuente DF 26 Levante ESP-La Liga 2711 0.08 Everyday starting defenders
    Darío Fuentes MF 22 La Louvière BEL-Pro League 968 0.08 Young low-minute midfielders
    Borja Galán MF 32 Katowice POL-Ekstraklasa 2269 0.10 Older rotation midfielders
    Javi Galán DF 30 Osasuna ESP-La Liga 1672 0.05 Older defenders
    Iñigo Ruiz de Galarreta MF 31 Athletic Club ESP-La Liga 2206 0.11 Older rotation midfielders
    Aleix García MF 28 Leverkusen GER-Bundesliga 2667 0.26 High-minutes creative midfielders
    Álvaro García MF 32 Rayo Vallecano ESP-La Liga 2101 0.26 Older rotation midfielders
    Eric García DF 24 Barcelona ESP-La Liga 2721 0.05 Everyday starting defenders NT
    Fran Garcia DF 25 Real Madrid ESP-La Liga 929 0.11 High-card-rate defenders
    Gonzalo García FW 21 Real Madrid ESP-La Liga 964 0.44 Primary scorers
    Miguel Puche García MF 24 Arouca POR-Primeira Liga 729 0.13 High-card-rate midfielders
    Rubén García MF 32 Osasuna ESP-La Liga 2229 0.20 Older rotation midfielders
    Santiago García MF 23 Gil Vicente FC POR-Primeira Liga 2640 0.17 Everyday starting midfielders, low scoring output
    Víctor García MF 27 Levante ESP-La Liga 1040 0.18 Older rotation midfielders
    Yarek Gasiorowski DF 20 PSV NED-Eredivisie 2145 0.09 Goal-scoring defenders
    Joaquín Martínez Gauna MF 22 Sevilla ESP-La Liga 1408 0.21 Young low-minute midfielders
    Gavi MF 20 Barcelona ESP-La Liga 573 0.14 High-card-rate midfielders NT
    José Luis Gayà DF 30 Valencia ESP-La Liga 2448 0.08 Older defenders
    Bryan Gil MF 24 Girona ESP-La Liga 1578 0.14 High-card-rate midfielders
    Óscar Gil MF 28 OH Leuven BEL-Pro League 2314 0.08 High-card-rate midfielders
    Mario Gila DF 24 Lazio ITA-Serie A 2472 0.01 Everyday starting defenders
    Moi Gómez MF 31 Osasuna ESP-La Liga 1201 0.13 Older rotation midfielders
    Sergi Gómez DF 33 Alverca POR-Primeira Liga 2482 0.01 Older defenders
    Sergio Gómez DF 24 Real Sociedad ESP-La Liga 2701 0.14 High-assist defenders with high playing time
    Unai Gómez MF 22 Athletic Club ESP-La Liga 936 0.15 Young low-minute midfielders
    Victor Gomez MF 25 Braga POR-Primeira Liga 2476 0.11 Everyday starting midfielders, low scoring output
    Nicolás González MF 23 Manchester City ENG-Premier League 1569 0.12 High-card-rate midfielders
    Urko González MF 24 Espanyol ESP-La Liga 2623 0.06 Everyday starting midfielders, low scoring output
    Andoni Gorosabel DF 28 Athletic Club ESP-La Liga 1360 0.06 Older defenders
    Jon Gorrotxategi MF 23 Real Sociedad ESP-La Liga 2210 0.14 Everyday starting midfielders, low scoring output
    Pablo Gozalbez MF 24 Arouca POR-Primeira Liga 1067 0.14 High-card-rate midfielders
    Jaume Grau MF 28 AVS Futebol POR-Primeira Liga 1322 0.05 High-card-rate midfielders
    Álex Grimaldo MF 29 Leverkusen GER-Bundesliga 2521 0.29 High-minutes creative midfielders NT
    Javier Guerra MF 22 Valencia ESP-La Liga 2061 0.29 High-minutes creative midfielders
    Adrián Guerrero DF 27 Debrecen HUN-NB I 1527 0.06 Goal-scoring defenders
    Ander Guevara MF 28 Alavés ESP-La Liga 654 0.18 High-card-rate midfielders
    Hugo Guillamón MF 25 Hajduk Split CRO-HNL 1377 0.02 High-card-rate midfielders
    Gerard Gumbau MF 30 Rayo Vallecano ESP-La Liga 1175 0.17 Older rotation midfielders
    Jon Guridi MF 30 Alavés ESP-La Liga 1238 0.06 Older rotation midfielders
    Gorka Guruzeta FW 28 Athletic Club ESP-La Liga 2363 0.36 High-minutes starting forwards
    Miguel Gutiérrez MF 24 Napoli ITA-Serie A 1488 0.12 Young low-minute midfielders
    Kike Hermoso DF 25 Arka Gdynia POL-Ekstraklasa 1713 0.06 High-assist defenders with high playing time
    Mario Hermoso DF 30 Roma ITA-Serie A 2085 0.14 Goal-scoring defenders
    Jorge Herrando DF 24 Osasuna ESP-La Liga 1600 0.05 Young low-minute defenders
    Dean Huijsen DF 20 Real Madrid ESP-La Liga 2034 0.12 High-card-rate defenders
    Pablo Ibáñez MF 26 Alavés ESP-La Liga 2236 0.09 Everyday starting midfielders, low scoring output
    Borja Iglesias FW 32 Celta Vigo ESP-La Liga 1900 0.42 Older forwards with moderate playing time NT
    Iglesias DF 27 Getafe ESP-La Liga 3185 0.07 Everyday starting defenders
    Jesús Imaz MF 34 Jagiellonia POL-Ekstraklasa 2784 0.23 High-scoring attacking midfielders
    Carlos Isaac DF 27 Widzew Łódź POL-Ekstraklasa 610 0.04 Goal-scoring defenders
    Malek Ishuayed MF 18 Servette FC SUI-Super League 545 0.06 Young low-minute midfielders
    Ivi MF 31 Raków POL-Ekstraklasa 861 0.12 Older rotation midfielders
    Omar Janneh FW 18 Lausanne-Sport SUI-Super League 1137 0.18 Primary scorers
    Mikel Jauregizar MF 21 Athletic Club ESP-La Liga 2831 0.07 Everyday starting midfielders, low scoring output NT
    Jime MF 26 Wisła Płock POL-Ekstraklasa 524 0.15 High-minutes creative midfielders
    Álex Jiménez DF 20 Bournemouth ENG-Premier League 2317 0.05 High-card-rate defenders
    Jesús Jiménez FW 31 Nieciecza POL-Ekstraklasa 1686 0.13 Older forwards with moderate playing time
    Jofre MF 24 Espanyol ESP-La Liga 930 0.11 Young low-minute midfielders
    Josan MF 35 Elche ESP-La Liga 565 0.24 Older rotation midfielders
    Josema DF 29 Górnik Zabrze POL-Ekstraklasa 2653 0.01 Everyday starting defenders
    Mateo Joseph MF 21 Mallorca ESP-La Liga 1699 0.19 Young low-minute midfielders NT
    Juande DF 26 Piast Gliwice POL-Ekstraklasa 2389 0.07 Goal-scoring defenders
    Ferran Jutglà FW 26 Celta Vigo ESP-La Liga 1652 0.47 Primary scorers
    Kiké FW 35 Espanyol ESP-La Liga 1734 0.34 Older forwards with moderate playing time
    Koke MF 33 Atlético Madrid ESP-La Liga 2219 0.14 Older rotation midfielders
    Yoel Lago DF 21 Celta Vigo ESP-La Liga 938 0.03 High-card-rate defenders
    Aymeric Laporte DF 31 Athletic Club ESP-La Liga 2058 0.04 Older defenders NT
    Larra MF 27 Casa Pia POR-Primeira Liga 2843 0.16 Everyday starting midfielders, low scoring output
    Toni Lato DF 27 Mallorca ESP-La Liga 583 0.08 High-card-rate defenders
    Youssef Lekhedim DF 19 Alavés ESP-La Liga 1335 0.06 High-card-rate defenders
    Iñigo Lekue DF 32 Athletic Club ESP-La Liga 600 0.04 High-card-rate defenders
    Adrián Liso FW 20 Getafe ESP-La Liga 1702 0.21 Duel-heavy rotation forwards
    Diego Llorente DF 31 Real Betis ESP-La Liga 1229 0.06 Older defenders
    Marcos Llorente DF 30 Atlético Madrid ESP-La Liga 2181 0.11 High-assist defenders with high playing time NT
    Thomas Lopes MF 18 Servette FC SUI-Super League 651 0.14 High-scoring attacking midfielders
    David López DF 22 Mallorca ESP-La Liga 837 0.03 Young low-minute defenders
    Diego López MF 23 Valencia ESP-La Liga 1762 0.19 Young low-minute midfielders NT
    Fer López MF 21 Celta Vigo ESP-La Liga 1170 0.13 Young low-minute midfielders
    Fermin López MF 22 Barcelona ESP-La Liga 1797 0.45 High-minutes creative midfielders NT
    Javi López DF 23 Oviedo ESP-La Liga 1711 0.05 Young low-minute defenders
    Sergio López DF 26 Darmstadt 98 GER-2. Bundesliga 2274 0.08 High-assist defenders with high playing time
    Unai López MF 29 Rayo Vallecano ESP-La Liga 1612 0.17 High-card-rate midfielders
    Iker Losada MF 23 Levante ESP-La Liga 902 0.23 Young low-minute midfielders
    Pol Lozano MF 25 Espanyol ESP-La Liga 2157 0.11 High-card-rate midfielders
    Sergio Lozano MF 26 Jagiellonia POL-Ekstraklasa 607 0.19 High-scoring attacking midfielders
    Pablo Maffeo DF 28 Mallorca ESP-La Liga 2662 0.08 High-card-rate defenders
    Pablo Marí DF 31 Fiorentina ITA-Serie A 808 0.01 Older defenders
    Pablo Marín MF 22 Real Sociedad ESP-La Liga 1502 0.09 Young low-minute midfielders NT
    Rafa Marín DF 23 Villarreal ESP-La Liga 1979 0.04 Young low-minute defenders NT
    Iván Márquez DF 31 Fortuna Sittard NED-Eredivisie 2501 0.02 Everyday starting defenders
    José Marsà DF 23 Mechelen BEL-Pro League 2591 0.05 Everyday starting defenders
    Aarón Martín MF 28 Genoa ITA-Serie A 2156 0.19 Everyday starting midfielders, low scoring output
    Carlos Martín MF 23 Rayo Vallecano ESP-La Liga 450 0.10 Young low-minute midfielders
    Gerard Martín DF 23 Barcelona ESP-La Liga 2119 0.02 Everyday starting defenders NT
    Iván Martín MF 26 Girona ESP-La Liga 2532 0.06 Everyday starting midfielders, low scoring output
    Jon Martin DF 19 Real Sociedad ESP-La Liga 2250 0.06 Young low-minute defenders
    Mario Martín MF 21 Getafe ESP-La Liga 2125 0.12 High-card-rate midfielders
    Álvaro Martínez DF 23 Moreirense POR-Primeira Liga 813 0.01 High-card-rate defenders
    Arnau Martinez DF 22 Girona ESP-La Liga 2666 0.12 High-assist defenders with high playing time
    Gabri Martínez MF 22 Braga POR-Primeira Liga 1323 0.12 High-card-rate midfielders
    Pablo Martínez MF 27 Levante ESP-La Liga 1857 0.21 High-minutes creative midfielders
    Toni Martínez FW 28 Alavés ESP-La Liga 2714 0.41 High-minutes starting forwards
    Eliezer Mayenda FW 20 Sunderland ENG-Premier League 759 0.31 Young low-minute forwards
    Borja Mayoral FW 28 Getafe ESP-La Liga 1058 0.35 Young low-minute forwards
    Brais Méndez MF 28 Real Sociedad ESP-La Liga 1660 0.25 High-scoring attacking midfielders
    Rodrigo Mendoza MF 20 Elche ESP-La Liga 794 0.12 High-card-rate midfielders
    Mikel Merino MF 29 Arsenal ENG-Premier League 1036 0.43 High-scoring attacking midfielders NT
    Luis Milla MF 30 Getafe ESP-La Liga 3271 0.22 High-minutes creative midfielders
    Pere Milla MF 32 Espanyol ESP-La Liga 1973 0.25 Older rotation midfielders
    Óscar Mingueza MF 26 Celta Vigo ESP-La Liga 1968 0.17 Everyday starting midfielders, low scoring output
    Mini MF 26 Nieciecza POL-Ekstraklasa 1595 0.10 Everyday starting midfielders, low scoring output
    Rafa Mir FW 28 Elche ESP-La Liga 1803 0.30 Older forwards with moderate playing time
    Juan Miranda DF 25 Bologna ITA-Serie A 2573 0.10 Everyday starting defenders
    Alberto Moleiro MF 21 Villarreal ESP-La Liga 2478 0.36 High-scoring attacking midfielders NT
    Jon Moncayola MF 27 Osasuna ESP-La Liga 3016 0.11 Everyday starting midfielders, low scoring output
    Genís Montolio DF 29 Thun SUI-Super League 1848 0.06 Goal-scoring defenders
    Álvaro Morata FW 32 Como ITA-Serie A 930 0.19 Duel-heavy rotation forwards NT
    Alberto Moreno DF 33 Como ITA-Serie A 1233 0.12 Goal-scoring defenders
    Álex Moreno DF 32 Girona ESP-La Liga 2559 0.08 Older defenders
    Gerard Moreno FW 33 Villarreal ESP-La Liga 1343 0.37 Older forwards with moderate playing time
    Tete Morente FW 28 Lecce ITA-Serie A 859 0.16 Young low-minute forwards
    Tete Morente MF 28 Elche ESP-La Liga 929 0.15 Older rotation midfielders
    Mateu Morey DF 25 Mallorca ESP-La Liga 704 0.08 Young low-minute defenders
    Manu Morlanes MF 26 Mallorca ESP-La Liga 1765 0.13 High-card-rate midfielders
    Raúl Moro MF 22 Osasuna ESP-La Liga 625 0.18 Young low-minute midfielders NT
    Cristhian Mosquera DF 21 Arsenal ENG-Premier League 994 0.03 Young low-minute defenders NT
    Aihen Muñoz DF 27 Real Sociedad ESP-La Liga 848 0.07 Young low-minute defenders
    Iker Muñoz MF 22 Osasuna ESP-La Liga 952 0.07 High-card-rate midfielders
    Javier Muñoz MF 30 Getafe ESP-La Liga 551 0.09 Older rotation midfielders
    Víctor Muñoz MF 22 Osasuna ESP-La Liga 2656 0.20 Everyday starting midfielders, low scoring output NT
    Matías Nahuel MF 28 Jagiellonia POL-Ekstraklasa 644 0.08 Older rotation midfielders
    Fran Navarro FW 27 Braga POR-Primeira Liga 1277 0.28 Older forwards with moderate playing time
    Marc Navarro MF 30 Arka Gdynia POL-Ekstraklasa 1978 0.11 Older rotation midfielders
    Pau Navarro DF 20 Villarreal ESP-La Liga 1921 0.02 Young low-minute defenders
    Roberto Navarro MF 23 Athletic Club ESP-La Liga 1307 0.29 High-scoring attacking midfielders
    Nono FW 34 Korona Kielce POL-Ekstraklasa 1006 0.11 Older forwards with moderate playing time
    Robin Le Normand DF 28 Atlético Madrid ESP-La Liga 1789 0.07 Older defenders NT
    Álvaro Núñez DF 25 Elche ESP-La Liga 1647 0.08 High-assist defenders with high playing time
    Unai Núñez DF 28 Hellas Verona ITA-Serie A 1265 0.01 High-card-rate defenders
    Rafel Obrador MF 21 Torino ITA-Serie A 1116 0.22 Young low-minute midfielders
    Olasagasti MF 24 Levante ESP-La Liga 1734 0.22 High-minutes creative midfielders
    Dani Olmo MF 27 Barcelona ESP-La Liga 2067 0.41 High-minutes creative midfielders NT
    Samu Omorodion FW 21 Porto POR-Primeira Liga 1402 0.31 Primary scorers
    Jandro Orellana MF 24 Estoril POR-Primeira Liga 1305 0.07 Young low-minute midfielders
    Aimar Oroz MF 23 Osasuna ESP-La Liga 2139 0.09 Everyday starting midfielders, low scoring output
    Ángel Ortíz DF 21 Real Betis ESP-La Liga 584 0.04 Young low-minute defenders
    Mikel Oyarzabal FW 28 Real Sociedad ESP-La Liga 2710 0.33 High-minutes starting forwards NT
    Daniel Pacheco MF 34 Wisła Płock POL-Ekstraklasa 2186 0.09 Older rotation midfielders
    Jon Pacheco DF 24 Alavés ESP-La Liga 1735 0.02 High-card-rate defenders
    Diego Pampín DF 25 Levante ESP-La Liga 534 0.04 High-card-rate defenders
    Victor Parada DF 23 Alavés ESP-La Liga 2146 0.09 High-card-rate defenders
    Aitor Paredes DF 25 Athletic Club ESP-La Liga 1630 0.08 Goal-scoring defenders
    Daniel Parejo MF 36 Villarreal ESP-La Liga 1392 0.06 Older rotation midfielders
    Unai Vencedor Paris MF 24 Levante ESP-La Liga 812 0.08 High-card-rate midfielders
    Patric MF 32 Lazio ITA-Serie A 667 0.08 Older rotation midfielders
    Alfonso Pedraza DF 29 Villarreal ESP-La Liga 1689 0.13 High-assist defenders with high playing time
    Pedri MF 22 Barcelona ESP-La Liga 2104 0.31 High-minutes creative midfielders NT
    Pedro FW 38 Lazio ITA-Serie A 982 0.35 Older forwards with moderate playing time
    Adrià Pedrosa DF 27 Elche ESP-La Liga 1090 0.10 High-card-rate defenders
    Fabián Ruiz Peña MF 29 Paris SG FRA-Ligue 1 1131 0.20 High-minutes creative midfielders
    Peque MF 22 Sevilla ESP-La Liga 982 0.19 High-card-rate midfielders
    Luis Perea MF 27 Arka Gdynia POL-Ekstraklasa 500 0.12 High-card-rate midfielders
    Ángel Pérez MF 22 Alavés ESP-La Liga 1288 0.19 Young low-minute midfielders
    Ayoze Pérez FW 32 Villarreal ESP-La Liga 1124 0.44 High-assist forwards NT
    Francisco Perez MF 22 Rayo Vallecano ESP-La Liga 1237 0.16 High-card-rate midfielders
    Luis Pérez MF 30 Gaziantep TUR-Süper Lig 1654 0.05 Older rotation midfielders
    Thiago Pinar MF 17 Real Madrid ESP-La Liga 592 0.19 Young low-minute midfielders
    Yéremy Pino MF 22 Crystal Palace ENG-Premier League 2080 0.19 Everyday starting midfielders, low scoring output NT
    Pedro Porro DF 25 Tottenham ENG-Premier League 2796 0.09 Everyday starting defenders NT
    Portu FW 33 Girona ESP-La Liga 474 0.23 Older forwards with moderate playing time
    Alejandro Pozo Pozo MF 26 Jagiellonia POL-Ekstraklasa 2414 0.10 Everyday starting midfielders, low scoring output
    Iker Pozo MF 24 Gorica CRO-HNL 2707 0.07 Everyday starting midfielders, low scoring output
    José Pozo MF 29 Pogoń Szczecin POL-Ekstraklasa 981 0.11 Older rotation midfielders
    Javi Puado MF 27 Espanyol ESP-La Liga 674 0.13 Older rotation midfielders
    Marc Pubill DF 22 Atlético Madrid ESP-La Liga 1381 0.09 Young low-minute defenders NT
    Antonio Raillo DF 33 Mallorca ESP-La Liga 2070 0.04 Older defenders
    Jacobo Ramón DF 20 Como ITA-Serie A 2742 0.05 High-card-rate defenders
    Raúl FW 24 Osasuna ESP-La Liga 1041 0.46 Primary scorers
    Alejandro Rego MF 22 Athletic Club ESP-La Liga 1279 0.13 High-card-rate midfielders
    Alberto Reina MF 27 Oviedo ESP-La Liga 2462 0.15 Everyday starting midfielders, low scoring output
    Pau Resta DF 24 Korona Kielce POL-Ekstraklasa 2058 0.05 Goal-scoring defenders
    Oriol Rey MF 27 Levante ESP-La Liga 1319 0.09 Older rotation midfielders
    Diego Rico DF 32 Getafe ESP-La Liga 1758 0.02 Older defenders
    Hugo Rincón DF 22 Girona ESP-La Liga 1750 0.07 Young low-minute defenders
    Luis Rioja MF 31 Valencia ESP-La Liga 2624 0.22 Everyday starting midfielders, low scoring output
    Rodrigo Riquelme MF 25 Real Betis ESP-La Liga 821 0.16 Young low-minute midfielders
    Óscar Rivas DF 25 Vit. Guimarães POR-Primeira Liga 1620 0.03 Everyday starting defenders
    Sergi Roberto MF 33 Como ITA-Serie A 544 0.09 Older rotation midfielders
    Joel Roca MF 20 Girona ESP-La Liga 1473 0.18 High-card-rate midfielders
    Marc Roca MF 28 Real Betis ESP-La Liga 2026 0.09 Everyday starting midfielders, low scoring output
    Rodri MF 29 Manchester City ENG-Premier League 1511 0.12 Older rotation midfielders NT
    Rodri MF 22 Moreirense POR-Primeira Liga 1492 0.19 High-card-rate midfielders
    Javi Rodríguez DF 22 Celta Vigo ESP-La Liga 2558 0.04 Everyday starting defenders
    Jesus Rodríguez MF 19 Como ITA-Serie A 1731 0.37 High-minutes creative midfielders NT
    Miguel Rodríguez MF 22 Utrecht NED-Eredivisie 1348 0.12 High-card-rate midfielders
    Pablo Rodríguez MF 23 Lech Poznań POL-Ekstraklasa 1637 0.10 High-card-rate midfielders
    Miguel Román MF 22 Celta Vigo ESP-La Liga 1311 0.09 Young low-minute midfielders
    Carlos Romero DF 23 Espanyol ESP-La Liga 3191 0.17 Goal-scoring defenders
    Isaac Romero FW 25 Sevilla ESP-La Liga 1484 0.25 Duel-heavy rotation forwards
    Iván Romero FW 24 Levante ESP-La Liga 2259 0.28 High-minutes starting forwards
    Rubén DF 24 Espanyol ESP-La Liga 812 0.07 Young low-minute defenders
    Javi Rueda MF 23 Celta Vigo ESP-La Liga 1404 0.31 High-minutes creative midfielders
    Aitor Ruibal DF 29 Real Betis ESP-La Liga 1808 0.18 Goal-scoring defenders
    Mujaid Sadick DF 25 Genk BEL-Pro League 3014 0.04 Everyday starting defenders
    Borja Sainz FW 24 Porto POR-Primeira Liga 1603 0.27 Duel-heavy rotation forwards
    Kike Salas DF 23 Sevilla ESP-La Liga 2203 0.06 Everyday starting defenders
    Sergi Samper MF 30 Motor Lublin POL-Ekstraklasa 1791 0.06 Older rotation midfielders
    Oihan Sancet MF 25 Athletic Club ESP-La Liga 1788 0.10 High-card-rate midfielders
    Antonio Sánchez MF 28 Mallorca ESP-La Liga 1073 0.07 High-card-rate midfielders
    Javi Sánchez DF 28 Arouca POR-Primeira Liga 1225 0.04 High-card-rate defenders
    Juanlu Sánchez MF 21 Sevilla ESP-La Liga 1990 0.12 High-card-rate midfielders NT
    Manu Sánchez DF 24 Levante ESP-La Liga 2814 0.07 Everyday starting defenders
    Ricard Sánchez DF 25 Estoril POR-Primeira Liga 1969 0.13 High-assist defenders with high playing time
    Álex Sancris MF 28 Getafe ESP-La Liga 708 0.13 High-card-rate midfielders
    Buba Sangaré DF 17 Elche ESP-La Liga 538 0.04 High-card-rate defenders
    Pau Sans MF 20 Cracovia POL-Ekstraklasa 852 0.07 Young low-minute midfielders
    Arnau Solà DF 22 Arouca POR-Primeira Liga 588 0.05 Young low-minute defenders
    Carlos Soler MF 28 Real Sociedad ESP-La Liga 2317 0.20 Everyday starting midfielders, low scoring output
    Hugo Sotelo MF 21 Celta Vigo ESP-La Liga 1338 0.12 Young low-minute midfielders
    Denis Suárez MF 31 Alavés ESP-La Liga 1406 0.15 Older rotation midfielders
    Mahamadou Susoho MF 20 Kocaelispor TUR-Süper Lig 513 0.05 Young low-minute midfielders
    César Tárrega DF 23 Valencia ESP-La Liga 2598 0.02 Everyday starting defenders NT
    Cédric Teguia MF 23 Moreirense POR-Primeira Liga 855 0.06 Young low-minute midfielders
    Ramón Terrats MF 24 Espanyol ESP-La Liga 1030 0.18 Young low-minute midfielders
    Pablo Torre MF 22 Mallorca ESP-La Liga 1599 0.29 High-minutes creative midfielders NT
    Ferran Torres FW 25 Barcelona ESP-La Liga 1965 0.57 Primary scorers NT
    Pau Torres DF 28 Aston Villa ENG-Premier League 1676 0.02 Older defenders
    Lucas Torró MF 31 Osasuna ESP-La Liga 2293 0.06 Older rotation midfielders
    Kareem Tunde MF 19 Levante ESP-La Liga 1133 0.10 Young low-minute midfielders
    Beñat Turrientes MF 23 Real Sociedad ESP-La Liga 1348 0.16 High-card-rate midfielders NT
    Óscar Valentín MF 30 Rayo Vallecano ESP-La Liga 2108 0.07 Older rotation midfielders
    Germán Valera MF 23 Elche ESP-La Liga 2857 0.21 Everyday starting midfielders, low scoring output
    Álex Valle DF 21 Como ITA-Serie A 2026 0.14 High-assist defenders with high playing time
    Álex Vallejo MF 33 Diósgyőr HUN-NB I 2207 0.03 Everyday starting midfielders, low scoring output
    Hugo Vallejo MF 25 Piast Gliwice POL-Ekstraklasa 1523 0.14 High-scoring attacking midfielders
    José Luis García Vayá MF 26 Valencia ESP-La Liga 2225 0.07 Everyday starting midfielders, low scoring output
    Jesus Vazquez DF 22 Valencia ESP-La Liga 974 0.03 Young low-minute defenders
    Lucas Vázquez MF 34 Leverkusen GER-Bundesliga 481 0.27 Older rotation midfielders
    Gabriel Veiga MF 23 Porto POR-Primeira Liga 1615 0.29 High-minutes creative midfielders
    Mikel Vesga MF 32 Athletic Club ESP-La Liga 465 0.10 Older rotation midfielders
    Carlos Vicente MF 26 Alavés ESP-La Liga 1258 0.13 Young low-minute midfielders
    Pau Victor FW 23 Braga POR-Primeira Liga 2259 0.30 High-minutes starting forwards
    Nacho Vidal DF 30 Oviedo ESP-La Liga 2263 0.02 Older defenders
    Gonzalo Villar MF 27 Elche ESP-La Liga 718 0.13 High-card-rate midfielders
    Jan Virgili MF 19 Mallorca ESP-La Liga 1792 0.21 Young low-minute midfielders
    Ricardo Visus DF 24 Widzew Łódź POL-Ekstraklasa 1709 0.01 High-card-rate defenders
    Daniel Vivian DF 26 Athletic Club ESP-La Liga 2564 0.04 High-card-rate defenders NT
    Nico Williams MF 23 Athletic Club ESP-La Liga 1674 0.28 High-scoring attacking midfielders NT
    Lamine Yamal MF 18 Barcelona ESP-La Liga 2262 0.59 High-minutes creative midfielders NT
    Bryan Zaragoza FW 23 Celta Vigo ESP-La Liga 1131 0.19 Young low-minute forwards
    Oier Zarraga MF 26 Udinese ITA-Serie A 475 0.09 Young low-minute midfielders
    Igor Zubeldia DF 28 Real Sociedad ESP-La Liga 2082 0.04 High-card-rate defenders
    Martín Zubimendi MF 26 Arsenal ENG-Premier League 2992 0.19 Everyday starting midfielders, low scoring output NT

    * 2025/26 season, at least 450 minutes; the club is the one with the most minutes that season. NT = national-team call-up 2024–26.

    Download the tables

    Download the tables

    The tables behind this report, exactly as the pipeline produced them, committed to the public repository. An analyst can take these and work from them directly, not only from the pictures above.

    • Every player found in the pool, one row per player, before any season's numbers are attached. pool.parquet
    • Players per million people, one row per country — the number behind the very first slide. per_capita.parquet
    • The five-number season vector for every covered player, one file per position group (forwards, midfielders, defenders). features_FW.parquet · features_MF.parquet · features_DF.parquet
    • Production by country, position group and age band, the numbers behind the international comparison. cohorts.parquet
    • Youth minutes at home, the age and route of the move abroad, how exports fare, and where they land — every number behind the pathway exhibits, in one file. pathways.json
    • Season-by-season counts of home-nation players in Europe's five biggest leagues, back to the start of the fetched history. big5_history.parquet
    • Every season row this pipeline has fetched, for every league and nationality it covers — the raw table everything else in this report is built from. fbref_players.parquet
    • How each of the five season numbers contributes to the style and quality maps. pca_loadings.parquet
    • How much the top players change when a league's strength is nudged up or down. sensitivity.parquet
    • The three new numbers behind the why-the-train-left funnel: club breadth of youth minutes, the league's own age structure, and the age at a player's first move abroad. pipeline_facts.json
    • FBref’s playing-time and miscellaneous tables for every fetched league-season: starts, minutes per start, substitute appearances, on-off, crosses, interceptions, tackles won, fouls. fbref_roles.parquet
    • Every player in the pool as one row — the table behind the searchable list — with production, rank in his position group, playing-time split and role counts. pool_table.json
    • The history seasons of the home, peer and stepping-stone leagues back to the start of the fetched history, the rows behind the player atlas’s careers. fbref_history.parquet
    • Where the pool moved between the two seasons: each player’s rung in each, the move between them, and minutes by rung. season_changes.json

    How it is built, validated and where it stops

    Data sources

    From raw tables to a feature vector

    One 2025/26 player-season, traced from its raw FBref row to the five-number vector the rest of this chapter builds on: Luis Milla, the Spanish player with the most 2025/26 minutes among those who cleared the inclusion floor.

    Luis Milla: raw row and feature row
    Raw FBref row, 2025/26
    ColumnValue
    leagueESP-La Liga
    season2025-2026
    teamGetafe
    playerLuis Milla
    nationESP
    posMF
    born1994
    age30
    mp37
    min3271
    gls1
    ast10
    pk0
    crdy5
    crdr1
    Feature row after the pipeline
    FeatureRaw ShrunkQuality-adjusted Z-score
    npg_p900.0280.040 0.032−0.68
    ast_p900.2750.237 0.1912.39
    min_share0.9560.956 0.9561.86
    age30.00030.000 30.0001.18
    cards_p900.1930.200 0.200−0.16

    Six wrangling checks turn the raw rows above into the pool used everywhere else in this report, recomputed on every run:

    The full log, with the recorded pipeline incidents, is in the data-quality log below.

    Every position group shares the same five-number vector (spec §5): a raw column becomes a per-90 rate, shrunk toward its league-season median (Efron and Morris, 1975), then multiplied by the league quality projection.

    Five candidates considered for the 2025/26 vector and what the data said about each, corpus-wide (every fetched nationality, the same population the rest of this chapter describes):

    CandidateStatistic ValueDecision
    gls_p90Correlation with npg_p900.973Replaced by npg_p90
    mpCorrelation with minutes played0.844Replaced by minutes share
    crdr_p90Share of player-seasons with zero red cards0.854Folded into cards
    ageSpread of median goals + assists per 90 across age bands (max − min band)0.028Kept
    bornShare of player-seasons missing a birth year0.003Kept — required for the player key

    Despite the high correlation, goals and non-penalty goals diverge for the players who take penalties: Nabil Touaizi (POR-Primeira Liga, 100 %); Yohan Croizet (HUN-NB I, 100 %); Luca Zuffi (SUI-Super League, 100 %). Appearances (mp) correlate strongly with minutes but not perfectly — a substitute cameo counts the same as 90 minutes started, which is why minutes share, not appearances, measures playing time here. Median goals + assists per 90 by age band runs from 0.147 (30+) – 0.175 (23-25).

    The picture behind league adjustment: the same raw rate reads very differently depending on the league it was earned in.

    Small multiples: the five raw per-90 features' distributions by league, boxplots per league, the La Liga highlighted, 7 leagues shown.

    What shrinkage does to a low-minute player: at the inclusion floor the league median still carries most of the weight; Ansu Fati's rate moves the most of any Spanish-eligible player this season.

    Scatter of raw vs shrunk non-penalty goals per 90 against minutes for Spanish-eligible players, with the shrinkage weight on the league median as a function of minutes overlaid.

    League multipliers (quality projection)

    npG/90_quality = npG/90_shrunk × m_league

    LeagueMultiplier
    ENG-Premier League1.000
    ITA-Serie A0.856
    ESP-La Liga0.807
    GER-Bundesliga0.788
    FRA-Ligue 10.666
    POR-Primeira Liga0.630
    BEL-Pro League0.573
    NED-Eredivisie0.510
    TUR-Süper Lig0.484
    GER-2. Bundesliga0.473
    POL-Ekstraklasa0.438
    CZE-First League0.434
    NOR-Eliteserien0.374
    DEN-Superliga0.371
    SUI-Super League0.293
    AUT-Bundesliga0.268
    HUN-NB I0.265
    CRO-HNL0.249
    SVK-Super Liga0.217

    Method: uefa_coefficient. ClubElo unavailable at run time (HTTP error); fell back to Wikipedia's UEFA men's association coefficient, current 5-year ranking (2022–23–2026–27 seasons). tier-1 multiplier = coef[country] / max(coef); tier-2 multiplier = 0.6 * tier-1 multiplier of the same country (stated assumption, not derived from data). Strongest tier-1 country = 1.00. The sensitivity analysis below shows the ranking's robustness to ±20 % on any one multiplier.

    League strength: two estimates

    A season in one league is not automatically worth the same as a season in another: goals and assists come easier in some competitions than others. This section works out an exchange rate between leagues by watching the same players before and after they change league, the way a manager judges a new signing by how his output changes at the new club.

    Full method, figures and diagnostics

    How much is a La Liga season worth in Premier League terms? The UEFA multiplier above answers that from countries' continental results; this model answers the same question from the players who actually changed leagues.

    Movers — 2125 players observed in at least two leagues across 8108 qualifying player-seasons — anchor the model, since only a player's own before/after change of league separates their level from the league's scoring environment. A hierarchical Poisson model of non-penalty goals plus assists per 90 (Gelman et al., 2013) fits a league effect and a player effect together, sampled with NUTS (Hoffman and Gelman, 2014) in PyMC (Abril-Pla et al., 2023) and diagnosed with ArviZ (Kumar et al., 2019). Partial pooling keeps the league effects regularised while leaving player effects close to unpooled, the same within-subject logic behind plus-minus and RAPM ratings elsewhere in team sports (Kharrat, McHale and Peña, 2020; Hvattum, 2019).

    Dot and 90 % HDI of the model's league-strength multiplier m_L per league, sorted, with each league's UEFA multiplier as a hollow marker.

    In these terms, a La Liga season converts to 0.91 of a Premier League one (90 % HDI 0.86–0.95).

    Leaguem_L (median) 90 % HDITransitions UEFA
    ENG-Premier League1.000 1.000–1.000 588 1.000
    ITA-Serie A0.935 0.890–0.981 569 0.856
    ESP-La Liga0.908 0.859–0.953 435 0.807
    FRA-Ligue 10.810 0.772–0.848 672 0.666
    GER-Bundesliga0.777 0.741–0.814 588 0.788
    HUN-NB I0.743 0.625–0.864 35 0.265
    POR-Primeira Liga0.721 0.680–0.762 350 0.630
    BEL-Pro League0.671 0.637–0.710 474 0.573
    CZE-First League0.665 0.585–0.749 64 0.434
    TUR-Süper Lig0.660 0.625–0.696 472 0.484
    POL-Ekstraklasa0.659 0.599–0.729 131 0.438
    AUT-Bundesliga0.657 0.576–0.729 80 0.268
    DEN-Superliga0.635 0.576–0.702 117 0.371
    GER-2. Bundesliga0.600 0.555–0.645 230 0.473
    NED-Eredivisie0.597 0.567–0.632 387 0.510
    CRO-HNL0.597 0.525–0.671 64 0.249
    SUI-Super League0.597 0.538–0.649 128 0.293
    NOR-Eliteserien0.574 0.507–0.639 64 0.374

    Refit on seasons before 2025/26, the model predicts each mover's first 2025/26 row after a league change — 863 such moves — against two baselines: the same rate as before, and that rate scaled by the ratio of UEFA multipliers. This is the same population CIES Football Observatory's expatriate-player reports track (Poli, Ravenel and Besson, 2024).

    MethodLog predictive density MAE (rate)
    Same rate as before −2.628 0.137
    Rate × UEFA ratio −2.734 0.151
    Model −2.174 0.127

    Against 18 leagues in common, the model's medians and the UEFA multipliers correlate at Spearman's rho = 0.74.

    • HUN-NB I: model rank 6 vs UEFA rank 17 (m_L 0.74 vs multiplier 0.27).
    • NED-Eredivisie: model rank 15 vs UEFA rank 8 (m_L 0.60 vs multiplier 0.51).
    • NOR-Eliteserien: model rank 18 vs UEFA rank 13 (m_L 0.57 vs multiplier 0.37).

    R-hat ≤ 1.003, minimum bulk ESS 1224, 0 divergent transitions across 8108 player-seasons from 2125 movers; fit in 209 s.

    Posterior predictive check

    Observed vs. replicated non-penalty goals plus assists per player-season (Vehtari, Gelman and Gabry, 2017): 15 % vs 14 % share of zeros, mean 4.45 vs 4.45, 90th percentile 11.00 vs 10.85.

    Bar chart comparing the observed and posterior-predictive-replicated distribution of non-penalty goals plus assists per player-season, grouped 0/1/2/3/4/5+.

    What the movers do not show: they are not a random sample — players tend to move up when they are good and down when they are older — so the within-player contrast describes the league difference for the kind of player who moves, and the age term absorbs only the part of that selection that is age. The interval is the model's uncertainty, not the selection's.

    The report's rankings keep the UEFA-coefficient multiplier throughout; the model above is shown alongside it as a check on that multiplier's own assumption — that continental results track player-level strength — not as a replacement for it.

    Three models, one task, five seasons

    Here we ask a simple question of five different methods: given a player's numbers this season, how well can each one guess his numbers next season. Each method is tested only on seasons it has not already seen, the way a scout's judgement only really counts for what he predicts before a season starts, not after it has finished.

    Full method, figures and diagnostics

    What does a player's season tell us about the next one, given where he plays, how old he is and — for exports — at what age he moved? In model terms: predict a player's league-adjusted production next season (non-penalty goals plus assists per 90, quality-adjusted) from this season's numbers, for every player-season pair with at least 450 minutes in both seasons, every nationality in the corpus.

    Evaluated by rolling-origin cross-validation (Hyndman and Athanasopoulos, 2021): for each of 5 target seasons in turn, every model trains only on pairs whose target season came earlier and is tested on that season's pairs — the same discipline a forecaster uses when the future is genuinely unknown at fit time, and what makes the per-season table below a real "performance over time" read rather than one blended number. Two baselines — persistence (next season = this season) and shrinkage to the league mean — sit alongside three fitted models sharing the same eight features: a hierarchical Bayesian regression (target ~ Normal(μ, σ), partial pooling on league and player, NUTS, 2 chains × 400 draws per origin (Gelman et al., 2013)), a gradient-boosted regressor and a small multilayer perceptron (scikit-learn (Pedregosa et al., 2011), hidden layers 64/32 — a small MLP, not an embedding model: PyTorch is not part of this pipeline). The Bayesian model's training rows are subsampled to at most 2500 per origin to keep five origins' worth of fits inside the runtime budget; the other four models train on the full split. The target is adjusted with the multiplier of the league the player is in next season; the features only know this season's league, so a move is a change the models cannot see coming — a limitation shared by all five.

    Line chart of RMSE per target season, one line per model, persistence dashed.
    Model 2021/222022/232023/242024/252025/26 Pooled
    Persistence 0.0768 (0.054) 0.0782 (0.056) 0.0789 (0.056) 0.0787 (0.057) 0.0684 (0.048) 0.0751 (0.053)
    Shrinkage to league mean 0.1343 (0.104) 0.1293 (0.100) 0.1311 (0.098) 0.1271 (0.098) 0.1099 (0.089) 0.1225 (0.095)
    Hierarchical Bayesian 0.0715 (0.053) 0.0760 (0.054) 0.0722 (0.053) 0.0681 (0.052) 0.0714 (0.053)
    Gradient boosting 0.0723 (0.051) 0.0744 (0.051) 0.0698 (0.051) 0.0677 (0.051) 0.0706 (0.051)
    Small MLP 0.0794 (0.059) 0.0792 (0.057) 0.0735 (0.054) 0.0714 (0.054) 0.0753 (0.056)

    Each cell: RMSE (MAE), in league-adjusted npG+A per 90. The first origin's training set is empty by construction — the corpus's earliest feature season leaves no earlier target season to train on — so only the two baselines are reported there.

    The Bayesian model's 90 % predictive interval covered the observed value 91 % of the time, pooled across the 4 origins it was fit for (2022/23: 90 %, 2023/24: 90 %, 2024/25: 91 %, 2025/26: 93 %).

    By pooled RMSE, Gradient boosting wins (0.071 vs 0.075 for persistence, 6 % lower).

    The clearest season-to-season move in the winner's own RMSE is between 2023/24 and 2024/25 (0.005) — the kind of drift this rolling-origin table exists to surface.

    Dating the break and one forecast

    This section finds the two seasons when the count of home-nation players in Europe's five biggest leagues changed level for good — the rise and the fall — and puts a probability on each being the true turning point rather than an ordinary dip. It also makes one forecast for next season, as a demonstration of the method, not a prediction about any player.

    Full method, figures and diagnostics

    The series is modelled as a local level in state space (Durbin and Koopman, 2012): the log of the season count follows a Gaussian random walk (σ ~ HalfNormal(0.2)), plus two ordered step changes δ₁, δ₂ in the level at unknown seasons τ₁ < τ₂ — on the series back to 1990/91 one step is misspecified, since the count rises through the 1990s and falls after the 2000s plateau, and a single step lands on whichever change buys more likelihood. NUTS only samples continuous parameters, so the τ pair is not sampled directly — every ordered pair of candidate seasons at least 3 seasons from either end and from each other is marginalised out of the model with a single log-sum-exp potential, and each break's own posterior is recovered afterwards from the continuous draws, the standard move for a marginalised discrete parameter (Gelman et al., 2013); the changepoint idea itself is due to (Adams and MacKay, 2007), applied here to a batch, two-break setting. The report's "break" is the step that lowers the level; the other is the rise. A rolling-origin backtest (Hyndman and Athanasopoulos, 2021) refits the same local level without the step at each of 15 origins, forecasting one season ahead and scoring against the naive "same as last season" baseline — the honest forecaster's read, since no real origin knows in advance which side of a break it sits on. The one forecast below, from the same change-point-free model fitted on the full series, is a demonstration of the method on a count of players, not a statement about any player.

    Line chart of the Spain series with the change-point model's fitted level in a pale band, a vertical rule marking the most probable break season with its posterior probability, and the one-season forecast with its 90 % interval at the right edge, past a dashed divider.
    How to read it: the acid line is the observed count, the pale band the model’s fitted level; the dashed rules are the most probable rise and fall seasons with their posterior probabilities; past the divider on the right, the one-season forecast with its 90 % interval.

    For Spain, the model finds no step change worth dating: the best candidate is 2001/02 at 2 % posterior with a ×1.02 (0.90–1.12) change in the level; the random walk's own innovation scale is σ = 0.031.

    • 2021/22: 7 %
    • 2019/20: 6 %
    • 2014/15: 6 %

    The same model, fit separately for the two contrast countries:

    • France: 2023/24 (26 % posterior), ×0.93 (0.82–1.04).
    • Germany: 2000/01 (69 % posterior), ×0.76 (0.65–0.98). Rise: 2010/11 (21 %), ×1.04.

    One-step-ahead rolling-origin backtest of the plain local level (no change point) against the naive "same as last season", 15 origins from 2010/11 to 2024/25:

    OriginForecast season ActualModel median (90 % interval) Naive
    2010/112011/12269 263 (221–309)261
    2011/122012/13269 266 (225–312)269
    2012/132013/14273 271 (225–313)269
    2013/142014/15283 269 (231–317)273
    2014/152015/16285 276 (238–326)283
    2015/162016/17280 280 (243–325)285
    2016/172017/18270 279 (243–322)280
    2017/182018/19278 274 (235–315)270
    2018/192019/20289 274 (236–315)278
    2019/202020/21305 282 (244–324)289
    2020/212021/22279 292 (255–337)305
    2021/222022/23271 285 (246–325)279
    2022/232023/24270 280 (243–317)271
    2023/242024/25287 276 (241–314)270
    2024/252025/26284 281 (246–317)287

    Pooled across 15 origins: MAE 9.07 for the model against 8.60 for the naive baseline, 100 % of the 90 % intervals covered the observed value.

    The one forecast, for next season (2026/27), from the same change-point-free model fitted on the full series:

    CountrySeason Median90 % interval
    Spain2026/27281 244–319
    France2026/27210 182–242
    Germany2026/27164 136–198

    A demonstration of the method on a count of players, not a statement about any player.

    Change-point fit: R-hat ≤ 1.004, minimum bulk ESS 292, 0 divergent transitions across 31 seasons.

    Cross-country youth-minutes panel

    This section asks whether the pattern from the funnel above — countries that give young players more minutes at home tend to have a deeper pool in the strongest leagues — holds up across every country in the comparison set, not only the two shown earlier. Two seasons and a handful of countries is a small sample, so the range around the estimate is wide.

    Full method, figures and diagnostics

    For each of the 8 peer countries, the 2024/25 → 2025/26 average U21 share of domestic-league minutes (x) against the 2024/25 → 2025/26 average top-9 players per million (y) — one row per country. A Bayesian simple regression, y ~ Normal(α + β·x, σ), weakly informative priors (4 chains × 1000 draws (Abril-Pla et al., 2023)), answers the between-country question slide 3 asks: does a country with a higher average U21 share also have a deeper pool, on average (Gelman et al., 2013). Cross-checked against a plain pooled least-squares slope on the full two-season panel (numpy polyfit, ignoring country structure entirely, 1000 percentile-bootstrap resamples — statsmodels is not a dependency here), which should agree in sign. Two seasons per country (previous and metrics; the current season is partial and left out); a peer whose top flight FBref does not track is absent from the panel, which is why n can be below the peer count.

    Scatter of the panel with the between-country fitted line and its 90 % band.

    β = +13.94 per 10 percentage points of U21 share (90 % HDI −4.93–33.09), R² = 0.22; OLS on the same 8 country means lands close by, at +14.17 (1.46–33.69), and the pooled-panel OLS slope agrees in sign at +13.57 (5.36–20.82). n = 8; the interval is wide because the panel is small.

    R-hat ≤ 1.005, minimum bulk ESS 2182, 0 divergent transitions.

    A separate check: the same regression, but with a country random intercept fit on the full two-season panel instead of country means. Within-country changes across the two seasons carry no signal — β_within = +1.56 per 10 percentage points (90 % HDI −1.29–4.33), n = 16 country-seasons (R-hat ≤ 1.006, minimum bulk ESS 861, 0 divergent transitions; posterior-median country-intercept scale σ_country = 8.25). With only two seasons per country the intercept absorbs almost all of the between-country pattern the fit above isolates, leaving this estimate driven by season-to-season noise alone; reported here as a robustness check, not a second headline.

    Descriptive only: a country's average U21 share and its average per-capita count are shown together because they are the numbers on hand, not because one is claimed to produce the other.

    Panel rows (n = 16)
    CountrySeason U21 sharePer million
    POR2024/256.2 %27.35
    BEL2024/257.8 %22.99
    NED2024/2511.8 %17.35
    ESP2024/257.8 %9.38
    FRA2024/258.7 %5.35
    ENG2024/253.9 %4.00
    ITA2024/253.3 %3.58
    GER2024/254.7 %3.12
    POR2025/264.9 %25.19
    BEL2025/268.7 %21.46
    NED2025/2613.6 %20.69
    ESP2025/264.8 %9.54
    FRA2025/268.8 %5.79
    ENG2025/263.0 %3.60
    ITA2025/262.7 %3.41
    GER2025/266.2 %3.13

    What the gap is made of

    The gap between the home nation and a comparison country, in players per million, can be split into pieces that line up with three things this report already measures: how much young players play at home, how strong the domestic league is, and how old players are when they move abroad. This does not say which of the three causes the gap, only how much of it moves together with each one — the way a manager might note that a poor season lines up with an injury crisis without claiming the injuries alone explain it.

    Full method, figures and diagnostics

    Ridge regression (α = 1.00, standardised channels, converted back to original units) of top-9 players per million on three channels — U21 share of domestic minutes, domestic league strength (M2's m_L where the country's top flight is in that model's fitted set, else the UEFA-coefficient multiplier (every country in this run used the model estimate)) and median export age (recent entrants, or the all-time median for a country with none recently) — over the 8 peer countries with data on all three channels, metrics season. For one contrast country at a time, the fitted model's own prediction splits the gap exactly into one term per channel — the linear-model form of the Blinder-Oaxaca wage decomposition (Oaxaca, 1973; Blinder, 1973), applied here to a per-capita player count. Three linear channels means this split is Shapley-equivalent: the Shapley value of an additive term in a linear model equals its own coefficient's contribution, so no permutation machinery is implemented. The residual is whatever the three channels do not carry.

    Horizontal stacked bar per contrast country: three channel contributions plus the residual; whiskers show each channel's bootstrap interval.
    How to read it: the whole bar is the gap in players per million between the comparison country and Spain. Each segment is how much of that gap goes with one measured channel — youth minutes, league strength, export age — under the decomposition; the hatched remainder is what the three channels do not carry. A segment can be negative when the channel works the other way.
    ContrastChannel ContributionShare of gap 90 % interval
    France
    Gap (players per million): −3.75
    U21 minutes −2.33 62 % −7.15 – +3.19
    League strength +4.99 −133 % +1.05 – +7.03
    Export age +2.13 −57 % +0.25 – +4.80
    Residual −8.53
    Portugal
    Gap (players per million): +15.65
    U21 minutes −0.07 0 % −0.21 – +0.09
    League strength +9.53 61 % +1.53 – +13.49
    Export age +4.26 27 % +0.45 – +9.57
    Residual +1.92

    Bootstrap 90 % intervals on each channel's contribution, 1000 resamples of the panel's rows (the model refit on each resample; the home/contrast countries' own values held fixed); the residual itself is not bootstrapped — it is the two countries' own observed counts minus the fitted gap.

    A decomposition of a correlation this panel happens to show, not a causal accounting; with n = 8 and three correlated national-level channels, the shares are indicative, not precise. A channel's share of the gap is only shown when the gap itself is at least 3 players per million — below that, a small denominator can send a share past 100 % in either direction; the contribution itself, in players per million, is always reported.

    Age at export

    Players who move abroad younger tend to end up producing more once they are there, but that is not necessarily because moving young helps a career: clubs are also more willing to take a chance on a player they already rate highly at a younger age. This section fits a curve to that pattern while trying to hold the strength of the player's original league fixed, but it cannot fully tell the two explanations apart.

    Full method, figures and diagnostics

    For every peer-nationality player (home nation included) whose first top-9-league season lies inside the fetched window and isn't censored (the same censoring rule as "Where do Spanish players go when they leave?", reused here) — 691 players, ages 16–36 — age at that season is modelled against league-adjusted production over the player's first one or two top-9 seasons. f(age) is a natural cubic spline with knots at 19, 21, 23 and 25 (a plain quadratic below n = 150; the natural cubic spline branch was used here), alongside origin-league strength (the transfer-graph model, § League strength), position and a partially pooled country effect (Gelman et al., 2013), sampled with NUTS (Hoffman and Gelman, 2014), 4 chains × 1000 draws; every design column and the outcome were standardised before fitting, the youth-minutes panel's own lesson about raw-scale priors on differently-scaled covariates.

    Line chart: the fitted age-at-export curve with its 90 % band, home-nation exports as acid points against every other peer export in grey, and a rug of every export's age along the axis.
    How to read it: the horizontal axis is a player’s age in his first top-9 season; the vertical axis is his league-adjusted goals plus assists per 90 over the first two seasons there. The line is the model’s expected value at each age, the band its 90 % interval; a flat line means arriving later costs nothing measurable. Acid dots are Spanish exports — hover for the name.
    AgeExpected G+A/90 (median)90 % HDI
    190.160.14 – 0.18
    210.150.13 – 0.17
    230.140.12 – 0.16
    250.130.11 – 0.15
    270.140.11 – 0.15

    β, per one-unit increase in origin-league strength (m_L): +0.07 (0.02–0.12).

    Spanish exports' own country effect: 0.00 (−0.02–0.02); Spanish exports arrive at a median age of 22.

    The same model, fit again without origin-league strength: the country-effect scale (σ_n) is 0.282 with the league term in the model and 0.312 without it — what moves between the two is what the league term is absorbing.

    Leave-one-nation-out: excluding Spain's own 133 exports (n = 558 remaining) and refitting, the 21-vs-24 difference is +0.02 (0.01–0.04), against +0.02 in the full fit.

    Posterior predictive check

    Observed vs. replicated y (mean league-adjusted G+A/90 over the first two top-9 seasons): mean 0.15 vs 0.15, sd 0.11 vs 0.11, 10th percentile 0.03 vs 0.02, 90th percentile 0.30 vs 0.29.

    R-hat ≤ 1.004, minimum bulk ESS 1262, 0 divergent transitions across 691 players; fit in 20.3 s.

    What this model does not separate: the corpus is not a random sample of players who could have left later. Players who leave earlier tend to be the ones judged ready earliest — a selection effect the age curve mixes with any genuine development effect of arriving young, and this report does not try to tell the two apart.

    Bayesian shrinkage

    Per-90 rates of players with few minutes are shrunk towards the median of their league and season (players with at least 900 minutes) using the empirical Bayes formula (Efron and Morris, 1975), with K = 10 phantom matches expressed as 900 minutes:

    shrunk_rate = (events + K × league_median) / (minutes / 90 + K),   K = 10

    At 450 minutes (the inclusion floor) the league median carries 67 % of the weight; at 900 minutes the player's own rate and the median weigh the same. Minutes share and age are not shrunk.

    Goalkeepers are counted the same way as outfield players throughout this report, with one difference: because a goalkeeper's save numbers swing around a lot from game to game, the model needs a bigger sample of shots faced before it trusts a keeper's own numbers over the league average.

    Goalkeeper rates (chapter II's counter-example) use the same formula. GA/90 and saves/90 are shrunk toward their league-season median with the same K = 900 minutes, and GA/90 is then quality-adjusted by the league multiplier — a goal conceded in a stronger league counts less. Save percentage is shrunk the same way but against shots on target faced, not minutes: a single season's shot count sits far below K = 900, so save_pct_shrunk compresses hard toward the league median for almost every goalkeeper — a large gap in the raw, unshrunk save percentage is the more informative read there.

    PCA loadings

    One five-feature vector per position group (npg_p90, ast_p90, min_share, age, cards_p90), standardised, reduced to two components per projection. Style uses the shrunk rates; quality multiplies the rates by the league multiplier first.

    Loadings table
    GroupProjectionPC% variance npG/90A/90min shareagecards/90
    FW style PC1 25.2 % 0.533 0.215 0.651 0.430 −0.246
    FW style PC2 23.6 % −0.206 −0.271 −0.120 0.823 0.439
    FW quality PC1 28.9 % 0.636 0.380 0.482 0.217 −0.415
    FW quality PC2 24.9 % −0.108 −0.114 0.133 0.910 0.361
    MF style PC1 29.5 % 0.597 0.601 0.383 0.073 −0.361
    MF style PC2 23.2 % −0.245 −0.117 0.484 0.828 0.082
    MF quality PC1 30.0 % 0.590 0.608 0.382 0.133 −0.344
    MF quality PC2 24.2 % −0.244 −0.199 0.490 0.809 0.087
    DF style PC1 25.0 % 0.546 0.429 0.505 0.183 −0.480
    DF style PC2 21.1 % −0.343 −0.378 0.278 0.804 −0.128
    DF quality PC1 25.8 % 0.432 0.356 0.578 0.327 −0.496
    DF quality PC2 21.7 % −0.462 −0.375 0.104 0.797 −0.023

    Sensitivity analysis (±20 % multipliers)

    For each scenario the quality-adjusted ranking of Spanish-eligible players within each position group was recomputed and compared with the baseline; "top-10" is the union of the 3 groups' own top tens (30 players at baseline). Of the 41 scenarios, 32 change nobody in that set; the largest churn is 6 (ESP-La Liga multiplier -20%, mean rank shift 3.08 in the top twenty)*.

    Scenario table
    ScenarioDescription Top-10 overlapTop-10 churnMean Δ rank (top 20)
    baseline current multipliers from config/league_quality.yaml 30 / 30 0 0.00
    ENG-Premier League_minus20 ENG-Premier League multiplier -20% 29 / 30 1 0.67
    ENG-Premier League_plus20 ENG-Premier League multiplier +20% 29 / 30 1 0.45
    ITA-Serie A_minus20 ITA-Serie A multiplier -20% 28 / 30 2 1.30
    ITA-Serie A_plus20 ITA-Serie A multiplier +20% 28 / 30 2 0.68
    ESP-La Liga_minus20 ESP-La Liga multiplier -20% 24 / 30 6 3.08
    ESP-La Liga_plus20 ESP-La Liga multiplier +20% 27 / 30 3 2.52
    GER-Bundesliga_minus20 GER-Bundesliga multiplier -20% 30 / 30 0 0.73
    GER-Bundesliga_plus20 GER-Bundesliga multiplier +20% 28 / 30 2 0.73
    FRA-Ligue 1_minus20 FRA-Ligue 1 multiplier -20% 30 / 30 0 0.38
    FRA-Ligue 1_plus20 FRA-Ligue 1 multiplier +20% 29 / 30 1 0.10
    NED-Eredivisie_minus20 NED-Eredivisie multiplier -20% 30 / 30 0 0.00
    NED-Eredivisie_plus20 NED-Eredivisie multiplier +20% 30 / 30 0 0.00
    POR-Primeira Liga_minus20 POR-Primeira Liga multiplier -20% 30 / 30 0 0.63
    POR-Primeira Liga_plus20 POR-Primeira Liga multiplier +20% 27 / 30 3 1.05
    BEL-Pro League_minus20 BEL-Pro League multiplier -20% 30 / 30 0 0.00
    BEL-Pro League_plus20 BEL-Pro League multiplier +20% 30 / 30 0 0.00
    TUR-Süper Lig_minus20 TUR-Süper Lig multiplier -20% 30 / 30 0 0.10
    TUR-Süper Lig_plus20 TUR-Süper Lig multiplier +20% 30 / 30 0 0.10
    CZE-First League_minus20 CZE-First League multiplier -20% 30 / 30 0 0.00
    CZE-First League_plus20 CZE-First League multiplier +20% 30 / 30 0 0.00
    SVK-Super Liga_minus20 SVK-Super Liga multiplier -20% 30 / 30 0 0.00
    SVK-Super Liga_plus20 SVK-Super Liga multiplier +20% 30 / 30 0 0.00
    AUT-Bundesliga_minus20 AUT-Bundesliga multiplier -20% 30 / 30 0 0.00
    AUT-Bundesliga_plus20 AUT-Bundesliga multiplier +20% 30 / 30 0 0.00
    HUN-NB I_minus20 HUN-NB I multiplier -20% 30 / 30 0 0.00
    HUN-NB I_plus20 HUN-NB I multiplier +20% 30 / 30 0 0.00
    POL-Ekstraklasa_minus20 POL-Ekstraklasa multiplier -20% 30 / 30 0 0.00
    POL-Ekstraklasa_plus20 POL-Ekstraklasa multiplier +20% 30 / 30 0 0.05
    CRO-HNL_minus20 CRO-HNL multiplier -20% 30 / 30 0 0.00
    CRO-HNL_plus20 CRO-HNL multiplier +20% 30 / 30 0 0.00
    DEN-Superliga_minus20 DEN-Superliga multiplier -20% 30 / 30 0 0.00
    DEN-Superliga_plus20 DEN-Superliga multiplier +20% 30 / 30 0 0.00
    SUI-Super League_minus20 SUI-Super League multiplier -20% 30 / 30 0 0.00
    SUI-Super League_plus20 SUI-Super League multiplier +20% 30 / 30 0 0.00
    NOR-Eliteserien_minus20 NOR-Eliteserien multiplier -20% 30 / 30 0 0.00
    NOR-Eliteserien_plus20 NOR-Eliteserien multiplier +20% 30 / 30 0 0.00
    GER-2. Bundesliga_minus20 GER-2. Bundesliga multiplier -20% 30 / 30 0 0.00
    GER-2. Bundesliga_plus20 GER-2. Bundesliga multiplier +20% 30 / 30 0 0.00
    all_minus20 every league multiplier -20% 30 / 30 0 0.00
    all_plus20 every league multiplier +20% 30 / 30 0 0.00

    * Churn = baseline top-10 members that leave the set under the scenario; mean Δ rank = mean absolute rank change over the baseline top-20 union. Scenarios: baseline, every league ±20 % on its own, and all leagues ±20 % at once.

    The table above is fixed at the config multipliers; the panel below is the same Spanish-eligible top ten made interactive — drag any league's slider (0.5×–1.5× of its default) and the ranking recomputes in the browser.

    # Player League q Vs. default

    Sources This is the offline sensitivity table above (§ Sensitivity analysis) made interactive: q = (npG/90_shrunk + A/90_shrunk) × m_league, recomputed client-side from the shrunk rates of every Spanish-eligible metrics-season player, no server round-trip. The rank-change column compares each row's rank under the current sliders to its rank at the config defaults.

    Data-quality log

    8 recomputed checks · 6 recorded incidents

    Every wrangling decision that changed a count, with the count. The first block is recomputed on every run; the second is the incident record (dates and counts as recorded at the time).

    CheckCountWhat it counts
    Women's entries filtered0 entriesFBref country-page entries dropped for a surname ending in -ová (see Limitations).
    Namesakes in the pool295 playersActive pool players sharing a normalised name (e.g. father and son), disambiguated by club.
    Pool players without season tables2700 playersSpanish professionals on FBref's country page who play in a league without season tables and carry no metrics.
    Split-season rows collapsed441 rowsPlayer-season-group rows merged into one after a mid-season transfer (minutes summed, rates minutes-weighted).
    Unmatched call-up names70 namesNational-team squad-table names that match no Spanish-eligible row in the feature tables.
    Missing birth years0 rowsSeason-table rows of nation ESP with no birth year, which cannot form a player_key.
    Unjoined goalkeeper rows12 rowsKeeper-page rows with no matching GK row in the season tables on (league, season, team, player_key); dropped from every goalkeeper exhibit.
    La Liga rows without a nationality3 rowsSeason-table rows in the La Liga where FBref records no nationality — the highest rate of any league in this pipeline. Every “own nationals” share reads that column as its numerator while the denominator keeps the league’s full minutes, so those shares are floors, not point estimates.
    • 2026-09-14 A stale FBref season index made soccerdata fetch the season-less URL, which FBref serves as the season in progress: nine leagues' 2025/26 tables were 2026/27 after four rounds. Fixed by checking the page's own heading against the requested season. (9 leagues, recorded)
    • 2026-09-14 FBref intermittently served a squads-only page (no season table yet) for a season still in progress. Fixed by a single refetch, in the same page-heading guard.
    • 2026-09-13 ClubElo's API answered 502 for the whole run; league multipliers fell back to UEFA association coefficients.
    • 2026-09-13 The Wikidata portrait query matched on name, citizenship and birth date only; seven portraits belonged to namesakes in other sports until an occupation filter was added. (7 portraits, recorded)
    • 2026-09-13 Slovakia's top flight is not on FBref at all; this report's Slovak exhibits rest entirely on players abroad.
    • 2026-09-14 The first out-of-sample comparison of the league-strength model applied the UEFA-multiplier baseline in the wrong direction and started both baselines from a raw previous-season rate (a zero-goal season predicted zero); caught in review. Corrected: multiplier ratio m_prev / m_new, baselines from the shrunk rate. The model's margin over the baselines shrank from about 3 nats to 0.5 and is the figure reported.

    Limitations of this analysis

    Leagues without metrics

    The pipeline fetches 19 competitions from FBref. 2700 of the 3747 Spanish professionals found on FBref's country page play in a league without season tables and carry no metrics; they are listed by name and club only. The Spanish second tier (Segunda División) is not fetched; a home player's first rung below the top flight is outside this pipeline's scope.

    Free-tier feature set

    The feature vector is five basic columns per 90 minutes: non-penalty goals, assists, minutes share, age and cards. No expected goals, no progressive passes, no tackles — the rule was one identical vector across every league in the corpus, and only the basic table is available for all of them. Defensive and creative contributions beyond assists are invisible to the map.

    National-team flag source

    The flag "called up 2024–26" is parsed from Wikipedia squad tables (2026 FIFA World Cup, UEFA Euro 2024, UEFA European Under-21 Championship 2025) and matched on normalised name plus birth year. 44 of the 353 mapped players carry it. A squad table edit or a name variant can drop a call-up; the flag is a tag, not a cap count.

    Photo coverage

    577 of the 3747 pool players have a Wikimedia Commons portrait (Wikidata P18, matched on name, citizenship and birth date, occupation filtered to association football player) used on the site. Players without a portrait on the site show initials.

    Season split

    The headline per-capita count and every metric use the complete 2025/26 season; trajectories run 2024/25 → 2025/26; the club on a card is the 2026/27 club (season in progress at build time).

    League multipliers

    ClubElo was unreachable at run time, so the multipliers are UEFA association coefficients scaled to the strongest league = 1.00, and second-tier leagues are set to 0.6 × the first tier of the same country by assumption. The club-strength proxy in chapter II is the club's goals-scored percentile within its league, not an Elo rating. The sensitivity table shows how far a ±20 % error in any one multiplier moves the Spanish ranking.

    Export origins from recent entrants only

    The origin league of an export is known only when the season before the first top-9 season was fetched: 2020/21 onwards for the headline leagues, 2024/25 onwards for the peer domestic leagues. Origin shares and the recent export age are therefore computed over players whose first top-9 season is 2025/26 or 2026/27; earlier entrants count towards the full export age but not the origin mix, and a first appearance already in 2020/21 is censored (the censored share is shown).

    Player identity

    FBref's season tables carry no player id, so players are joined on normalised name plus birth year across leagues and seasons; two players sharing both would collapse into one. A mid-season transfer produces two club rows that are collapsed into one minutes-weighted row before ranking.

    Women's entries and the -ová heuristic

    FBref's country page mixes men's and women's competitions. Entries whose surname ends in -ová were dropped from the pool; a woman with a different surname ending would survive the filter, and a man with that ending would not. The suffix is specific to Czech feminine surnames, so for a nation whose naming convention doesn't use it (English, for one) the filter catches close to none of the contamination it targets; the "Women's entries filtered" count in the data-quality log below says how many it caught this run.

    No market values, no scouting

    Transfer fees, market values, video and scouting reports are outside the public sources used here. The map describes statistical footprints and counts; selection and development decisions require the federation's own data and expertise, which this method does not have.

    No event or tracking data

    Every feature here is a season aggregate from free FBref tables. The author's tracking work lives elsewhere: tactical-cz (broadcast-video player tracking for Czech football) and the hockey video PoC linked from hockey.bsandova.com. New columns enter in src/features.py::per90 and the feature list in config/feature_definitions.yaml.

    Validation & robustness

    Each model in this pipeline carries its own validation next to where it is described; this section collects one headline diagnostic from each as it lands. So far:

    Reproducibility

    The full pipeline is public: github.com/sandovabarbora/czefootball-player-pool-atlas. MIT licence. From a clean clone, uv sync && make restore-snapshot && make render renders this report from the committed data snapshot and make pages builds the site; make all refetches everything and runs the whole pipeline. Random seed 42 for every stochastic step (KMeans). Fetchers cache raw pages and are idempotent; the render step never touches the network.

    The processed tables also load into BigQuery unchanged: infra/bigquery/ has generated schemas, a bq load script and a key/unit contract for the model-output JSONs the tables don't cover. Run infra/bigquery/load.sh -n <dataset> <nation> to see the load commands without running them.

    How this was built

    Spec → plan → task agents → reviews → ledger · 25 rulings · 317 tests

    The report was produced with an agentic workflow: a written design spec, an implementation plan of small tasks, a fresh coding agent per task, a spec-compliance and code-quality review after each, a whole-branch review at the end. Every decision the controller made without the author is a dated ruling in a ledger — 25 across this edition and the last. The author wrote the framing, the cluster reads and the rulings; the agents wrote the code under 317 tests.

    Build-flow diagram Spec, then plan, then one task agent per task, a two-stage task review, up to five fix rounds, a whole-branch review, then deploy; the ledger on the side records every ruling — 25 so far, across 36 tasks. Spec Plan Task agent SONNET Task review spec + quality SONNET Fix rounds ≤ 5 SONNET Whole-branch review SONNET Deploy OPUS Ledger rulings: 25

    Implementers and reviewers: sonnet · controller: opus.

    Reviews are two-stage per task — spec compliance, then code quality — and every review's findings are written into the ledger, not just its verdict: 40 lines mentioning a review across the 36 tasks of this edition and the last.

    Spec: design · plan: tasks · ledger: rulings.

    Every edition's own design spec and ledger: v1 spec · v1 ledger · v1.2 spec · v1.2 ledger.

    What tracking data would add

    Everything above is built from season tables, because that is what exists for every league in the benchmark. The next layer of data — every player’s position ten times a second — exists for none of them publicly. So here is one match of it, from a different league, to show concretely what it answers that a season table cannot: not how many goals a player scored, but how he moves when he does not have the ball.

    How to read it: the pitch is drawn with both teams attacking left to right; every arrow is one off-ball run, from where it started to where it ended, coloured by the kind of run SkillCorner’s model labelled it. Bright arrows were passed to; thick ones were received. Pick a team, switch run types on and off, hover an arrow for the player and what came of it. Data: (SkillCorner, 2025), one A-League match, MIT licence; none of it enters any number in this report.

    For a federation this is the layer that turns “how many minutes” into “what kind of minutes”: whether a young winger’s runs are the runs the first team needs, whether an export’s physical output matches his new league, whether a squad presses as one. The atlas cannot see it and does not pretend to; the pipeline is built so that a tracking feed, when a federation has one, becomes another table beside the season tables rather than a different project.

    The methods below shaped this report's design. Each entry states what the method is, what this report took from it, and what was left out and why.

    One pairing here has no single citation behind it: the transfer-graph league-strength model (§ League strength) and the age-at-export curve (§ Age at export) are fit independently and joined only through origin-league strength as a covariate — a within-player league-identification model feeding a spline-in-age production curve is, to the author's knowledge, this report's own combination, not drawn whole from any one method below.

    Glossary

    Ten terms used in the sections above, each in one plain sentence with a football example.

    Per 90
    A rate scaled to a full match: a player with three goals in five matches, each played the full ninety minutes, has a rate of 0.6 goals per 90 — it lets a player who came on as a substitute be compared fairly with one who started every match.
    Minutes share
    How much of a club's available playing time a player actually got, out of every minute the club's matches could have offered that season; a player who played every minute of every match has a minutes share of 100 percent.
    Shrinkage
    A way of not trusting a small sample too much: a player with only a handful of matches has his numbers pulled part of the way toward the league's typical number, the way a manager waits for more than one good game before trusting that a young player's form is real.
    League multiplier / league strength
    A number saying how much a goal, an assist or a minute is worth in one league compared with another; a striker's goal in a weaker league counts for less once it is adjusted by that league's own multiplier — the same idea as judging a transfer by the level the player is coming from.
    Quality-adjusted
    A player's raw numbers after they have been multiplied by the league multiplier above, so a rate earned in a strong league and one earned in a weaker league can be compared on the same footing.
    Interval (90 percent)
    A range around a number that shows how sure the model is, not a single guess; a ninety percent interval means the model thinks the true value falls inside that range about nine times out of ten.
    Posterior
    What the model believes about a number after it has seen the data, expressed as a range of plausible values rather than one single figure; the probability attached to a break season in this report is a posterior probability.
    Out-of-sample
    Checking a method only on matches, players or seasons it was not shown while it was being built — the way a manager judges a scouting report by what actually happens once the player signs, not by how well the report described what had already happened.
    Cluster
    A group of players whose season numbers look similar to each other and different from other groups, found automatically from the data rather than assigned by hand; a cluster is a style label such as "high-volume scorers", not a formal position.
    Change point
    The point in a series of seasons where the level genuinely shifts to a new one and stays there, rather than just one unusually high or low season on its own; this report finds one for the count of home-nation players in Europe's biggest leagues.

    References

    What this is for

    A federation does not need another opinion about its pool. It needs the same measured questions asked every summer, answered the same way, with the uncertainty on the page — and a name for every player the staff ask about.

    This is one country, built from public data in the open. The pipeline takes a nationality code and a peer set; the same code produced the other editions linked below, and the comparison across them. With a federation’s own data — tracking, academy, medical — the tables get deeper and the questions stay the same.