Methodology
How we calculate every salary you see.
Transparent, repeatable, and continuously refined.
1. National wages
Every wage figure on this site is published by the U.S. Bureau of Labor Statistics in the Occupational Employment and Wage Statistics (OEWS) release for May 2025. Each of our 58 occupations carries the BLS occupational code (SOC) it belongs to, and the page shows the five annual wage percentiles the BLS publishes for that code — 10th, 25th, 50th, 75th and 90th — exactly as published. We do not round them, adjust them, or blend them with anything else.
Some job titles are not occupations the BLS counts separately. It publishes one figure for Software Developers, for example, not separate ones for engineers and senior engineers. Where that is the case the page says so and names the occupation the figures belong to, so you can see exactly which group you are being compared against.
2. Percentiles, not seniority
You will not find an "entry level" or "senior" salary here. OEWS records what people in an occupation are paid; it does not record how long they have been doing it, so any mapping from years of experience onto a wage would be ours rather than the data's. The site used to publish exactly such a ladder, built from hand-set multipliers. It has been removed. What you get instead is the published spread: a 10th percentile means one in ten people in that job earn less.
3. City wages
OEWS also publishes wages by metropolitan area, and we load that file too. Each of our 340 US cities is mapped to the metro area the BLS publishes it under — Plano appears under Dallas-Fort Worth-Arlington, for instance — and the city page shows that metro's published figures. About 92% of our city and occupation pairings have published metro figures. For the rest the BLS suppressed the pairing because the local sample was too small; those pages show the national figure and say that is what they are showing.
Earlier versions of this page described a different method: a national baseline multiplied by the city's cost-of-living index. That was wrong. Pay and cost of living do not move together one-for-one, and in expensive cities the result overstated wages badly. The cost-of-living index is still on the site, but only for what it measures — purchasing power and affordability. It is never applied to a wage.
4. Taxes
Our after-tax calculator stacks the current federal brackets, the appropriate state or provincial brackets, FICA (Social Security + Medicare) for the US, and CPP + EI if you pick Canada. The tax calculator runs on a salary you enter, so it works for Canada even though no Canadian wage data is published here. Standard deductions are applied by filing status.
5. Refresh cadence
Wage figures are loaded from a specific OEWS release, named on every page. The BLS publishes OEWS once a year, so the figures change when we load the next release — there is no automated import and no daily refresh. Tax brackets are updated for each tax year.
Published wages describe a whole occupation across a whole area. What any one person is paid varies by employer, industry, credentials and local demand.
6. Known limitations
- Equity compensation (RSUs, stock options) is not yet modeled.
- Bonus structures vary widely by employer; our medians reflect base + typical performance bonus only.
- Smaller cities (under ~200k population) fall back to regional-average COL indices.
Formula at a glance
salary = base_median × experience_multiplier × (city.col_index / 100)
Why ranges, not single numbers?
Every page shows p10, median, and p90. Treating salary as a range is more useful than a single point estimate, especially during negotiation.