92 years of World Cup data: what we found
~2,500 players across 23 tournaments and 6 confederations. Birth-month curves, post-WW2 squad-size growth, the surprising hemisphere split — with code samples you can run yourself against the API.
We compiled every FIFA World Cup squad since 1930. Here’s what jumped out, with the API calls you can run yourself.
Squads have grown 60% since 1930
The first tournament had 13 teams; teams brought 17–22 players each. Modern World Cups ship with 26-man squads (since 2022) for 32 teams — or 48 from 2026.
GET /fifa/worldcup/v1/aggregates/players
> "avgSquadSize": 22.4
GET /fifa/worldcup/v1/aggregates/players?years=1930,1934,1938
> "avgSquadSize": 18.7
GET /fifa/worldcup/v1/aggregates/players?years=2018,2022
> "avgSquadSize": 24.1
Three drivers: more substitutions allowed (2 → 3 → 5 in 2022), expanded GK coverage, and deeper benches for late-stage rotation.
Birth-month bias is real (and slightly weird)
The “relative age effect” in football says players born in the first quarter of the academy year are over-represented — they’re physically older within their cohort. Our data confirms it. But with a hemisphere wrinkle.
Across all WC squads, North Hemisphere players show the classic Jan–Mar bias: academy year starts in autumn, so those kids are physically the biggest.
South Hemisphere players show a Sep–Nov bias — their academy year shifts. But the effect is weaker, possibly because the football academy calendar isn’t as aligned with the school year there.
GET /fifa/worldcup/v1/aggregates/players?years=1990,1994,1998,2002,2006,2010,2014,2018,2022
Run that and the response includes per-position birth-month arrays you can plot.
Goalkeepers travel further than anyone else
Looking at the club.country field across squads, goalkeepers are the most likely position to play domestic football outside their national team’s country.
They tend to take the available spot rather than fight for it. Forwards cluster in their home leagues more than you’d think.
Confederation drift is small but visible
Across 23 tournaments, UEFA has provided 51% of all WC players. CONMEBOL 22%. The rest split among Concacaf, CAF, AFC, and OFC.
That share is remarkably stable since 1962. The places that do shift are the qualifying spots, not the player pool.
Try the queries yourself
Each example assumes you’ve set $WC=https://api.zafronix.com/fifa/worldcup/v1 and an API key in the $KEY env var.
# How many goals did Pelé score across his 4 WCs?
$ curl -H "X-API-Key: $KEY" "$WC/players/Pel%C3%A9"
> "totalGoals": 12
# Compare goals-per-match in 1954 (highest ever) vs 2010 (lowest of modern era)
$ curl -H "X-API-Key: $KEY" "$WC/compare?years=1954,2010"
> 1954: 5.38 goals/match
> 2010: 2.27 goals/match
# Every team Argentina has knocked out in WC history
$ curl -H "X-API-Key: $KEY" "$WC/teams/Argentina"
> (parse the .knockoutPath of each appearance)
Data quality — how it’s made
The dataset is curated from FIFA’s official archive, RSSSF, English Wikipedia, and the federations’ own historical pages, then cross-checked against each other for consistency. Roughly nothing about that pipeline is glamorous; it’s slow, careful, hand-verified work, and it’s the only way to land on numbers you can trust 92 years deep.
If something looks wrong, please tell us — we treat data corrections as bug reports and acknowledge them within 48 hours. Accuracy is the only thing that makes a historical dataset worth quoting.
Where this is heading
The historical foundation is the easy part of the API to ship; the interesting work is in what gets built on top of it. We’re prioritizing aggregate endpoints that answer the questions we keep seeing journalists, analysts, and indie devs spend hours assembling by hand — per-position breakdowns, era comparisons, debut-to-final career arcs. If there’s a query you’d expect to one-shot but can’t today, that’s a roadmap signal.