The modern Olympics are not a competition of athletes. They are a contest of economic systems.
We built the definitive open-source dataset to test that thesis. 128 years of medal data (1896-2024), World Bank economic indicators, IOC financial records, national sports budgets, hosting costs, and sports school enrollment. Nine Jupyter notebooks, 1,657 country-year observations, and one conclusion:
The medal table is primarily a function of GDP and population, not athletic talent.
The Production Function
In 2004, economists Andrew Bernard and Meghan Busse published a model that predicted Olympic medal shares using just two variables: GDP and population. We replicated their approach across every Summer Games from 1960 to 2016.
Medal_Share = β₀ + β₁·log(GDP) + β₂·log(Population) + ε
The model explains 30-60% of medal share variance depending on the year. In other words, before a single athlete steps onto a track, you can predict roughly half of the medal table by looking at a country’s bank account and census.
India ($2.3T GDP, 1.3B people) won 2 medals. Jamaica ($15B GDP, 3M people) won 11. That gap is the story.
Follow the Money
The IOC is a Swiss nonprofit that generates more revenue per cycle than most professional sports leagues generate per season. Total revenue has grown from $2.6B in the 1993-96 cycle to $12.4B in 2021-24, a 375% increase in three decades. Broadcasting accounts for roughly 60-70% of every dollar.
NBC alone pays $7.75B for US broadcast rights through 2032. This is why the 100m final is always scheduled for American primetime.
What a Medal Actually Costs
Rich nations spend $3-15M per medal. We compiled national sports budgets across seven countries and multiple Olympic cycles to calculate the real cost.
The UK Case Study
The most dramatic example of buying medals is the United Kingdom. After winning 1 gold medal at the 1996 Atlanta Games, the UK created UK Sport, funded it through National Lottery proceeds, and engineered a systematic rise.
The UK spent approximately $350M per cycle, roughly $5.2M per medal. The model worked. But note the plateau: funding kept rising after 2012, but medal counts didn’t. Diminishing returns set in around the $350M mark.
Hosting: The World’s Most Expensive Branding Exercise
Every Summer Olympics since 1960 has exceeded its budget. The average cost overrun is 170%. Montreal 1976 took 30 years to pay off its debt. Sochi 2014 cost $51 billion, the most expensive sporting event in history.
The one exception, LA 1984, used private financing and existing venues. Paris 2024 tried a similar approach (95% existing/temporary venues) and came in at only 17% over budget, a relative success.
The Wrong Medal Table
Here is the central finding. The traditional medal table ranks by raw count, which rewards size and wealth. When you adjust for population, an entirely different set of countries emerges.
Jamaica wins 3.91 medals per million people. The USA wins 0.37. China wins 0.05. India wins 0.001. The traditional table hides these ratios entirely.
Medal Concentration Is Slowly Declining
The good news: more countries win medals now than ever before. The number of medal-winning nations has grown from 10 in 1896 to 86 in 2016. The top 10’s share has fallen from 100% to 53%.
The two spikes (1976 and 1980) are the boycott years. When dozens of nations refuse to attend, concentration jumps mechanically. The post-1992 stabilization around 55% suggests a structural floor: the top 10 have deep enough pipelines to hold their share even as new competitors enter.
3.5 Billion People, Almost Zero Medals
India, Indonesia, Nigeria, Bangladesh, and Pakistan represent approximately 3.5 billion people, 44% of humanity. Combined, they produce fewer Olympic medals than Australia (population 26 million).
This is not a talent deficit. Athletic talent is presumably distributed randomly across the world’s 8 billion people. This is an infrastructure, investment, and institutional deficit.
| Country | Population | GDP | Rio 2016 Medals | Medals Per Million |
|---|---|---|---|---|
| India | 1,344M | $2,295B | 2 | 0.001 |
| Indonesia | 265M | $932B | 3 | 0.011 |
| Nigeria | 195M | $405B | 1 | 0.005 |
| Bangladesh | 170M | N/A | 0 | 0.000 |
| Pakistan | 230M | N/A | 0 | 0.000 |
| Australia | 24M | $1,212B | 29 | 1.20 |
India has roughly 1 sports facility per million people (vs. Australia’s ~100). Cricket absorbs virtually all athletic talent, sponsorship, and public attention, but cricket wasn’t an Olympic sport until 2028. Per-capita Olympic investment is ~42x lower than the UK’s.
The Synthesis
The traditional medal table measures three things:
- GDP: wealth funds training infrastructure, coaching, nutrition, equipment, travel, and full-time athlete status
- Institutional design: systematic pipelines (sports schools, lottery funding, centralized academies) convert raw talent into medals
- Political will: governments that prioritize Olympic success allocate disproportionate resources
The “true” winners are those who extract the most medals per unit of economic input. Jamaica, Kenya, Cuba, Ethiopia, Croatia, Georgia, New Zealand. Nations whose cultural, geographic, or institutional advantages produce medals far beyond what their GDP predicts.
The Olympics remain the world’s most watched sporting event because they tap into something genuine: the human desire to see extraordinary individual performance. But the system that produces those performances is not meritocratic, not equitable, and not transparent.
Understanding it requires looking at the industrial complex behind the ceremony.
Methodology
All data and analysis is open source in our olympic_villiage repository:
- Medal data: Kaggle “120 Years of Olympic History” (1896-2016), athlete-level, aggregated to country-year
- Economic data: World Bank Development Indicators via
wbgapi(GDP, population, 1960-2024) - Financial data: IOC annual reports, Oxford Olympics Study, national sports agency budgets
- Model: OLS regression following Bernard & Busse (2004)
- Tools: Python, pandas, statsmodels, plotly, Observable Plot
# The Bernard-Busse production function in three lines
import statsmodels.api as sm
X = sm.add_constant(df[["log_gdp", "log_pop"]])
model = sm.OLS(df["medal_share"], X).fit()
print(f"R² = {model.rsquared:.3f}") # Typically 0.30 - 0.60
Nine notebooks cover the full analysis: data collection, cleaning, the production function, cost per medal, IOC revenue flows, hosting economics, sports school pipelines, Cold War & doping, and reconceptualized rankings.