Data Methodology
A plain-language explanation of where our salary data comes from, how we process it, and what to keep in mind when using it.
Last updated:
Data sources
Salary data is aggregated from multiple publicly available sources and cross-referenced to reduce outliers. No single survey is used in isolation.
Salary percentiles
We report salaries as a distribution rather than a single number, because "average salary" can be heavily skewed by a small number of very high earners. Instead, we use five percentile benchmarks:
We also break down salary by experience level — junior (0–3 years), mid (3–7 years), and senior (7+ years) — where the underlying data has sufficient sample size to support that split reliably.
PPP adjustment
Purchasing Power Parity (PPP) adjustment is a method of normalizing salaries for the cost of living in each country. A $60,000 salary in India is worth far more in real purchasing power than $60,000 in Switzerland, because prices for goods and services differ enormously between the two countries.
We source PPP conversion factors from the World Bank International Comparison Programme (ICP) and the OECD Purchasing Power Parities dataset. Each country has a ppp_factor which represents the number of local currency units needed to buy what $1 USD buys in the United States.
PPP-adjusted salary is displayed alongside the raw USD figure on every role and country page so you can compare real purchasing power, not just nominal pay. The ppp_factor is also included in the public API response for programmatic use.
Currency conversion
All salary figures in our database are stored in USD. When displaying local currency equivalents (e.g., GBP for the United Kingdom, EUR for Germany), we convert using live exchange rates from the European Central Bank (ECB) via the Frankfurter API. Rates are updated daily.
Note that the Currency Converter tool on this site uses the same ECB source and is independent from salary data — it is useful for real-time spot conversions, not salary normalization. Salary pages use a daily-refreshed snapshot to keep figures stable across page loads.
Update frequency
Salary data: Updated at least monthly. We re-run our aggregation pipeline at the start of each month and tag records with the survey year. Role and country pages display a "Last updated" timestamp.
Exchange rates: Refreshed daily from the ECB. Currency converter pages fetch live rates on every page load.
Cryptocurrency prices: Updated every 60 seconds from CryptoCompare. Historical data is not stored — the crypto tool is for real-time reference only.
PPP factors: Updated annually following the World Bank ICP release cycle (typically Q2).
Limitations
- Self-reporting bias: Glassdoor and LinkedIn data relies on voluntary submissions, which tend to skew toward tech, finance, and white-collar roles in major cities. Lower-paid or informal sectors are underrepresented.
- Geographic granularity: Figures represent country-level medians. Within-country variation (e.g., New York vs. rural Mississippi) is not captured. A country median for the United States will differ significantly from a New York City figure.
- Sample size: For smaller countries or niche roles, data points may be limited. Where sample size falls below a confidence threshold we show a wider range and flag lower reliability.
- Currency volatility: Local-currency equivalents are converted using daily ECB rates, which can shift significantly for countries with volatile currencies (e.g., TRY, ARS). Treat local currency figures as approximate.
- Total compensation: Figures represent base salary only unless explicitly noted. Bonuses, equity, benefits, and other compensation are excluded because they vary widely and are harder to survey reliably.
Methodology questions
The median (p50) is more representative than the mean for salary data because it is not pulled upward by a small number of extreme earners. A few very high salaries at a tech company can inflate the mean significantly while most workers earn much less — the median reflects the typical experience.