Updated August 6, 2026 · 10 min read
How we source salary data
What “observed” vs “modeled” pay means on Pay by Role, which public sources we use, and how often figures refresh.
Why transparency matters
Salary pages are only useful when you know what the numbers represent. A city median pulled from labour-market microdata is not the same thing as a national average scaled by a pay index — and treating them as identical misleads job seekers and reviewers alike.
Pay by Role is built as a research tool: we publish country and city pay ranges from public APIs at build time, label how each figure was produced, and refresh the dataset on a schedule. We do not invent national medians for roles that sources do not cover.
That labelling is intentional. When you open a salary page, you should be able to tell whether you are looking at a metro-specific percentile set or a national figure adjusted for local pay levels. Those two paths answer different questions, and mixing them up is how people over- or under-value an offer.
Primary sources
National and city percentiles primarily come from OfficialSalary aggregations of public statistical programmes (including BLS OEWS-style occupation wages, OECD, and ILO series where available), plus SalaryByRole for occupations OfficialSalary does not yet cover. FX rates come from a public exchange-rate feed so local-currency figures can be compared in a display currency of your choice.
Every country–job pair on the site requires a real median from one of those sources. If a source does not cover the pair, we simply do not publish that combination.
That coverage rule is why some careers appear in one country and not another. Gaps usually mean the underlying statistical programmes do not publish a usable median for that occupation–country pair — not that the role pays nothing. When you need a figure we do not have, use a closely related job family on this site and treat it as a peer benchmark, not a substitute for employer data.
Observed city data vs modeled city estimates
When OfficialSalary returns a full percentile set for a specific metro and occupation, we show those figures as observed city data. Those pages are our strongest local estimates and are the ones we prioritise for search indexing.
When a metro is not individually covered, we may still show a modeled city estimate: the real national median multiplied by that city’s pay index, with a spread model for entry-to-senior bands. Modeled pages are clearly labelled, kept for navigation and comparison, and are not treated as primary indexable content.
Cost-of-living adjustments, rent models, simplified tax take-home, and illustrative salary trends are derived helpers. They add context; they are not government statistics.
In practice: prefer observed city pages when you are deciding whether to relocate or accept a local offer. Use modeled pages when you need a directional sense of how a national median might look in a metro that sources do not break out separately — then verify with employer bands, recruiter feedback, or official local series.
Refresh cadence and limits
The dataset is regenerated by an automated pipeline (typically monthly). The About page shows the last build timestamp and raw source counts.
Figures are informational market estimates, not offers, contracts, or tax advice. Employer pay bands, equity, overtime, and local taxes can move individual outcomes well outside a published range.
Wage surveys and statistical programmes also lag the market. A fast-moving specialty (new AI titles, niche contractor rates) can shift between builds. If your offer sits far outside a published band, check whether the job title maps cleanly to the occupation we publish, and whether the employer’s geo tier matches the city you selected.