About SalaryScope

We built SalaryScope because we got frustrated looking up salaries and finding either a paywall, a survey that required us to submit our own salary first, or numbers that seemed completely disconnected from reality — especially for cities outside the US.

The Bureau of Labor Statistics publishes the most rigorous salary dataset in existence — 1.1 million employer payroll records across 800+ occupations, collected and audited by the federal government. For the US, it is the gold standard. It just happens to be buried in an API that is annoying to query.

For the rest of the world, we built a 5-factor mathematical model anchored in OECD Average Wages (38 countries, 2023 actuals), ILO ILOSTAT (65+ countries total), and World Bank GNI/cap — the same sources that economists and central banks use. We don't take a US salary and multiply it by a cost-of-living index. We start from what local employers actually pay.

Where the Numbers Come From

U.S. Bureau of Labor Statistics — OEWS Program

The Occupational Employment and Wage Statistics program is the US government's primary employer wage survey. Every 6 months, BLS collects payroll data from roughly 1.1 million non-farm establishments — that is about 57% of all US wage and salary employment. Participation is mandatory for most industries. Results cover over 800 occupations and are published as national and metropolitan-area wage percentiles.

When we say our data comes from BLS, we mean we query the BLS Data API v2 directly using the occupational series IDs (format: OEU0000000000000{SOC-no-dash}08) and store the returned median annual wage. We do not manually input numbers. The API call is logged, and the timestamp is published on every salary page.

Source: bls.gov/oes · Survey frequency: semi-annual · Published: annually · Data coverage: 800+ SOC occupations

OECD Average Wages — 38 Countries (Tier 1)

The OECD publishes annual average wages in PPP-adjusted USD for all 38 member countries via the AV_AN_WAGE dataset. These are employer-survey wages — the same methodology as BLS OEWS, applied to Germany, Japan, UK, France, Australia, and 33 more countries. The 2023 release is the latest published as of mid-2025.

This is how SalaryScope knows a German software engineer earns roughly €62,400/yr on average — not because we estimated it, but because German employers reported it to the OECD. Data refreshes every 30 days via the OECD SDMX-JSON API.

Source: stats.oecd.org · Coverage: 38 OECD member countries · 2023 actuals · PPP-adjusted USD · Free API, no key required

ILO ILOSTAT — Non-OECD Countries (Tier 2)

For high-income and upper-middle-income countries not in the OECD (Singapore, UAE, Saudi Arabia, China, Brazil, India, and others), SalaryScope uses mean wage estimates from the ILO ILOSTAT database— the International Labour Organization's comprehensive wage statistics covering 190+ countries. Values are PPP-converted to USD for cross-country comparability.

Source: ilostat.ilo.org · Coverage: 70+ countries · 2023/2024 estimates · Shown as ILO estimate on salary pages

World Bank GNI per Capita PPP — Remaining Countries (Tier 3)

For lower-income countries without reliable ILO wage data, we use the World Bank's GNI per capita (PPP) — indicator NY.GNP.PCAP.PP.CD— multiplied by the labor income share for that country's income tier (40–60%). This gives an approximate average annual wage for countries like Nigeria, Bangladesh, and Ethiopia. These are labeled GDP estimate on salary pages.

Source: data.worldbank.org · License: CC BY 4.0 · Refreshed every 30 days

European Central Bank — Reference Exchange Rates

Salaries on SalaryScope are stored in USD internally. When you select a currency, your browser fetches the latest ECB reference rates via the Frankfurter open-source API, which distributes ECB data. This is a server-to-server call on our end — your browser does not contact the ECB directly. Rates are cached locally for 4 hours.

ECB reference rates are not bid/ask spreads — they are the official interbank reference rates published each working day at approximately 16:00 CET by the European Central Bank. They are the most neutral exchange rate source available publicly.

Source: frankfurter.app · ECB reference rates · Updated each banking day · No license restrictions

Why Government Data Beats Self-Reported Surveys

Glassdoor, Payscale, and similar sites collect salary information from employees voluntarily reporting what they earn. There are several reasons this produces systematically inaccurate data:

  • Selection bias: People are more likely to submit their salary when they feel they are underpaid (to validate their feeling) or significantly overpaid (to show off). The middle of the distribution is underrepresented.
  • Definitional confusion: Some people report base salary. Others include bonus. Others include the value of unvested equity. Without standardisation, aggregated averages are meaningless comparisons.
  • Geographic blur: Remote workers often report their salary against their employer's headquarters city rather than where they live, distorting city-level figures.
  • Stale data: Self-reported entries do not expire. A salary report from 2021 counts the same as one from this month in most aggregation models.

BLS OEWS avoids all of these problems. Employers report their actual payroll figures to a government agency using a standardised form. There is no ambiguity about what counts as wages. Participation is not voluntary in most industries. Data is collected twice a year, not whenever someone feels like submitting.

The trade-off is that BLS reports medians — it does not capture the full distribution of compensation at specific companies, the equity component of tech jobs, or the true upside for top performers at high-growth companies. For those use cases, Levels.fyi and Glassdoor are actually useful. We are not trying to replace them. We are the right tool when you want to know what the market actually pays for a role — not what someone at Google decided to share anonymously.

How Data Updates Work

DataSourceFrequencyHow
US median wagesBLS OEWS APIEvery 24 hoursserver.mjs scheduler calls /api/cron/update-salaries
City cost multipliersWorld Bank APIEvery 24 hoursserver.mjs calls /api/cron/update-cities
International country wagesOECD API + World Bank GNIEvery 30 daysserver.mjs calls /api/cron/update-international
H-1B company wagesBLS OEWS + USCISEvery 7 daysserver.mjs calls /api/cron/update-h1b
Exchange ratesECB via FrankfurterEvery 4 hoursClient-side fetch, cached in memory

Coverage

288+
Job titles
All mapped to BLS SOC codes
173+
Cities worldwide
65+ countries, OECD verified
3 tiers
Data sources
OECD → ILO → World Bank
30+
Currencies
ECB reference rates
1.1M
Surveyed employers
BLS OEWS sample size
2026
Data vintage
Most recent OEWS release cycle

What SalaryScope Does Not Cover Well

Equity and total compensation at specific companies. If you want to know what Meta pays L5 engineers including RSU vesting, use Levels.fyi. BLS only covers wage income — it does not capture equity, signing bonuses, or profit sharing.

Self-employed and freelance income. BLS OEWS covers wage and salary workers only. Freelancers, independent contractors, and the self-employed are not included in the underlying survey.

Very new job titles. BLS SOC codes are updated on a ~10-year cycle. Job titles like "AI engineer" or "prompt engineer" do not yet have their own SOC codes. We estimate these using category-level BLS averages. These are labeled as estimates in our data files.

~

Within-country city variation is modeled, not measured. We apply city-specific metro premiums for all major international cities (e.g. London 1.28× vs UK national average, Bangalore 1.52× vs India national average). These are derived from labor economics research on agglomeration effects — they are well-grounded but not employer-survey data like BLS. For country-level comparisons the figures are solid. For the difference between two cities in the same country, treat as directional.

Data Corrections & Contact

If you spot a salary figure that looks significantly wrong, check our methodology page first — some figures are intentional adjustments rather than errors. If you believe there is a genuine data issue (wrong SOC mapping, outdated BLS series, formula bug), please email us. We do fix things. We have updated our SOC mappings three times since launch based on reader feedback.