Salary Data Methodology

SalaryScope uses a 6-layer intelligence pipeline — not self-reported surveys, not simple cost-of-living adjustments. Every figure is derived from official government data and updated automatically.

This page explains each layer so you can verify any number yourself.

The 6-Layer Pipeline

1
Official Data ArchiveBLS, OECD, ILO — raw, never overwritten
2
Economic SignalsInflation, wage growth, FX — refreshed daily
3
SalaryScope EstimateOfficial × inflation × wage growth × demand
4
Enhanced Confidence ScoreSource + freshness + agreement − estimate weight
5
Data VersioningArchive by year — official and estimated side by side
6
Smart ISR RegenerationOnly rebuild affected pages, not the whole site
The critical difference from competing sites: we never display stale official data as if it were current. Layer 3 always adjusts for the time since publication using live economic signals.
1

Layer 1 — Official Data Archive

Government salary data is stored permanently and never overwritten. Each update adds a new year entry alongside the previous ones. This lets us show historical trends and clearly distinguish official figures from current estimates.

Why most salary sites get international figures wrong

Most sites calculate international salaries as:US salary × cost-of-living indexThis is wrong. A German engineer does not earn "US salary × Germany cost-of-living." They earn a salary set by German labor market conditions.

SalaryScope uses each country's actual average wage from OECD/ILO, then applies how much that occupation earns above the national average in that country's labor market.

TierSourceCountriesConfidence
BLS OEWSBLS May 2025 (latest)
Employer-reported, 1.1M payrolls, released May 2026
United States — all metro areas96% Official
OECDOECD AV_AN_WAGE 2024
PPP-adjusted USD, annual averages, released late 2025
38 OECD members96% Official
ILOILO ILOSTAT 2024
Mean wages, PPP-converted
Singapore, India, Brazil, UAE, China…89% Adjusted
World BankWorld Bank GNI/cap 2024
GNI × labor income share (0.40–0.60)
Nigeria, Bangladesh, Ethiopia…74% Estimated
2

Layer 2 — Economic Signals (Daily)

Government data is published annually. Economic conditions change constantly. Layer 2 fetches current macroeconomic signals daily and stores them per country:

// data/economic-signals.json (refreshed daily)
{
"US": {
"inflation": 0.028, // CPI-U YoY — FRED
"wageGrowth": 0.042, // avg hourly earnings — FRED AHETPI
"unemployment": 0.041, // BLS U-3
"jobOpeningsRate": 0.054, // BLS JOLTS
"demandMultiplier": 1.02, // derived from openings rate
"fxToUSD": 1.000
}
}

When the FRED API key is configured, US signals use live data. Other countries use calibrated fallback values updated quarterly from OECD Economic Outlook and ECB Statistical Warehouse.

3

Layer 3 — SalaryScope Estimate

The SalaryScope Estimate adjusts official salary data forward to current market conditions. It is computed per country per occupation and shown alongside the official figure:

SalaryScope Estimate =
Official Salary // Layer 1, government reported
× (1 + inflation)^yearsElapsed // CPI compound adjustment
× (1 + wageGrowth)^yearsElapsed // wage growth compound
× demandMultiplier // job market demand factor
// Example: Singapore MOM 2024 = S$105k → SalaryScope 2025 Estimate
S$105k × 1.021^1 × 1.045^1 × 1.03 = S$112k

The Full Salary Formula

salary(job, city, country) =
countryAvgWage(country) // OECD / ILO / World Bank
× OccupationPremiumRatio(job) // BLS OES: job ÷ all-occ avg
× skillElasticity(job, country) // scarcity premium in dev countries
× incomeTierCompression(country) // Europe pays lower tech premium
× cityMetroPremium(city) // metro area vs national average
× deterministicJitter(job, city) // ±3%, reproducible per pair
× Layer3EconomicAdjustment // inflation × wage growth × demand
4

Layer 4 — Enhanced Confidence Score

Every salary figure shows a confidence score that reflects how reliable the underlying data is. The formula has four components:

Confidence (0–100) =
Source Reliability (0–40) // BLS=40, OECD=36, ILO=24, GDP=16
+ Data Freshness (0–30) // 30 points, lose 5 per year stale
+ Source Agreement (0–20) // multiple sources agree = 20, single = 10
− Estimated Weight (0–10) // penalise L3 divergence >15% from official
96%
Official
Score ≥85
BLS or OECD, 0–1 years old
89%
Adjusted
Score 70–84
OECD or ILO, 1–3 years old
74%
Estimated
Score <70
World Bank, or significantly stale data
5

Layer 5 — Data Versioning

Old data is never deleted. Each update adds a new year entry. This lets SalaryScope show: the official published salary, the current market estimate, and historical trends — all distinguished clearly on every page.

// salary-history.json (never overwritten)
"software-engineer": {
"2019": 107510,
"2020": 110140,
"2021": 120990,
"2022": 128640,
"2023": 136620,
"2024": 142000 ← official (BLS May 2025)
}

The 6-year trend is displayed on every salary city page. CAGR (compound annual growth rate) is computed automatically and shown on the Top Movers page.

6

Layer 6 — Smart ISR Regeneration

Rather than rebuilding the entire site on every data update, SalaryScope uses Next.js Incremental Static Regeneration (ISR) with staggered revalidation periods. Only affected pages are rebuilt when data changes — saving compute and improving deploy reliability.

Data sourceCron scheduleRationale
Economic signals (inflation, FX, demand)Every 4 hoursFX and macro move frequently
BLS OEWS job salariesMonthlyBLS publishes annually — monthly is sufficient
OECD / ILO international wagesMonthlyAnnual releases; monthly catch updates
Government occupation dataMonthlyStable data, infrequent revisions
H-1B employer wagesWeeklyNew DOL disclosure filings weekly
Auto job expansionWeeklyDiscover new SOC codes weekly
City cost-of-living dataWeeklyCoStar / MIT Living Wage updates

Supporting Algorithms

Occupation Premium Ratio (OPR)

How much more does this job pay than the average of all jobs?

OPR = jobMedianWage_US / allOccupationAvg_US
// allOccupationAvg_US = $84,500 (BLS OEWS 2024)
// Software Engineer: $142k / $84.5k = 1.68×

Skill Elasticity

In lower-income countries, skilled workers earn a disproportionately larger premium above national average due to scarcity and international demand.

skillElasticity = 1 + SI × 0.17 × ln(usAvgWage / countryAvgWage)
// SI = Skill Intensity (0–1 by category, e.g. Technology = 0.92)

Log-Normal Percentile Bands

Salary distributions follow a log-normal model validated by BLS, NBER, and Federal Reserve research.

P(x) = Median × exp(z_score × σ)
// P10: z=−1.282 | P25: z=−0.674 | P75: z=+0.674 | P90: z=+1.282
// σ by category: Technology=0.34, Finance=0.46, Healthcare=0.27

Fair Pay Score™

SalaryScope's signature feature — answers "Is my salary fair?" by computing where a given salary sits in the market distribution (0–100). Score of 50 = exactly at median; 75+ = top earner; <30 = underpaid.

Underpaid
0–29
Fair
30–49
Well-paid
50–74
Top earner
75–100