How we calculate every number on this site
We publish salary, cost-of-living, and take-home pay numbers for hundreds of cities and roles. This page documents exactly how each figure is produced, which public datasets feed it, where the formula has limits, and how to report a problem.
Last reviewed: May 2026
TL;DR
- National salary baselines (25th / 50th / 75th / 90th percentile) come from BLS Occupational Employment & Wage Statistics (OEWS), the federal government's annual wage survey.
- City-level salaries are computed as national percentile Γ locality multiplier. Multipliers are derived from BLS metro-area OEWS data where it exists, and fall back to the C2ER cost-of-living index where it doesn't.
- Take-home pay uses the 2026 federal tax brackets, the city's state income tax rate, and FICA (Social Security + Medicare). Filing status assumed: single, no dependents.
- Cost-of-living index is from C2ER, with housing components cross-checked against HUD Fair Market Rents and Zillow ZHVI.
- Growth projections use BLS Employment Projections 2022β2032 for the underlying CAGR, supplemented by the WEF Future of Jobs Report 2025 for emerging occupations.
- The full pipeline refreshes quarterly.
1. National salary baselines
For every role, we publish four percentile points:
- Entry (25th percentile) β 25% of workers in this occupation earn less, 75% earn more.
- Median (50th percentile) β the middle of the distribution.
- Senior (75th percentile) β top quarter of the distribution.
- Top earner (90th percentile) β top 10% of the distribution.
The source is the BLS Occupational Employment & Wage Statistics (OEWS) program, which surveys roughly 1.1 million establishments every six months and is published annually in May. BLS OEWS does not publish 90th-percentile figures for every occupation, so for the top decile we use the 90th-percentile value where BLS publishes it, and for occupations where BLS only publishes a 75th and a top-coded figure we estimate the 90th by interpolation against the published distribution (and flag the occupation in our internal data as "estimated 90th").
For technology and engineering roles, we cross-check the BLS percentiles against the DOL H-1B disclosure database, which publishes the exact prevailing wage employers attest to when sponsoring foreign workers. Where the two sources disagree by more than 15%, we manually review and document the choice.
2. City-level salaries (the formula)
Most users want to know what a role pays in their city, not nationally. We compute that with a locality multiplier:
city_salary_pXX = national_salary_pXX Γ city_multiplier(role_category)
The multiplier is selected in this priority order:
- Direct BLS MSA wage data β if BLS publishes a wage for this occupation in the city's Metropolitan Statistical Area, we use
BLS_MSA_p50 Γ· BLS_national_p50as the multiplier. This is the most accurate path and is used for ~60% of role/city combinations. - Category-level MSA multiplier β when BLS doesn't publish a specific occupation at the metro level, we use the average wage ratio across all occupations in that broad category (Technology, Healthcare, Finance, etc.) for that MSA. Stored in our
city_multiplierstable. - C2ER cost-of-living fallback β for smaller cities not covered by BLS MSA data, the multiplier defaults to the C2ER cost-of-living index Γ· 100. This is the least precise tier and we mark it accordingly.
Worked example. Software Engineer in Houston, TX:
- BLS national p50 for Software Engineers (SOC 15-1252): $130,160
- BLS Houston MSA p50 for Software Engineers: $136,800
- Multiplier: 136,800 Γ· 130,160 = 1.051
- Final published Houston Software Engineer median: $130,160 Γ 1.051 β $137,000 (rounded to the nearest $1,000)
3. Cost-of-living index
The COL index shown for each city (e.g., "Austin = 110") is the C2ER Cost of Living Index, where 100 = US urban average. C2ER tracks six categories: groceries, housing, utilities, transportation, healthcare, and miscellaneous. A city with an index of 110 is approximately 10% more expensive than the US average for a comparable consumption basket.
The per-category breakdown ("Housing 125, Groceries 91, β¦") is also C2ER, except when a city is too small for C2ER coverage β in that case we substitute:
- Housing: HUD Fair Market Rents (1-bedroom) Γ· national median FMR Γ 100
- Groceries: BLS Average Price data for the metro area
- Transportation: AAA average operating cost adjusted by gas-price differential
- Healthcare: BLS CPI-U regional component
4. Take-home pay
The "Take-home pay" figure is gross salary minus three deductions:
- Federal income tax β 2026 IRS tax brackets, single filer, standard deduction ($15,000 for 2026). We do not model itemized deductions, 401(k) contributions, or dependents.
- State income tax β the city's state effective rate. For states with progressive brackets, we use the marginal rate at the salary in question, then add back the difference between marginal and effective for accuracy.
- FICA β 6.2% Social Security (up to the 2026 wage base of $176,100) plus 1.45% Medicare on the full amount.
Local (city/county) income taxes are not currently modeled β this affects ~15 cities including NYC and parts of Pennsylvania and Ohio. We flag this on affected city pages.
5. Year-over-year growth and forecasts
The YoY growth % shown for each role is computed from the latest two BLS OEWS data releases (year N median Γ· year Nβ1 median β 1). For occupations that are too new to have two years of OEWS data (e.g., AI Engineer, Prompt Engineer), we use the WEF Future of Jobs Report 2025 growth indicator combined with H-1B prevailing wage trend.
The salary projection to 2030 on each role/city page is a CAGR projection using the BLS Employment Projections 2022β2032 employment-growth and median-wage-growth rates. These are projections, not predictions β actual outcomes depend on labor market conditions we can't forecast. Every projection is labeled "Projected" on the chart and excluded from any "current salary" claim.
6. ZIP-code salary pages
The /salaries/zip/[zip]/ pages use the nearest city's locality multiplier, adjusted by the ZIP's own COL index where C2ER provides one. These are useful for exploration but are not as precise as the city-level pages, so they are marked noindex in search engines β they're discoverable through internal navigation but we don't claim them as authoritative reference pages.
7. Job postings
Job listings come from two sources:
- Paid postings β employers post jobs directly through our employer flow. These are reviewed before publication.
- Aggregated postings β we cache results from the Adzuna API for discovery. Aggregated postings are clearly labeled and link back to the original employer or aggregator.
What we do not claim
- We do not conduct direct employer salary surveys. Our city-level numbers are derived from BLS, not from collecting offer letters.
- We do not publish salary projections beyond 2030. Anything further is speculation.
- We do not model equity compensation, sign-on bonuses, or RSU grants. The published numbers are base salary only.
- We do not distinguish remote-from-office in the city-specific figures. A fully remote role paid on California rates would show up as a California salary in our data.
- We do not provide financial, tax, or career advice. Numbers are informational.
Refresh cadence
- BLS OEWS β pulled annually each May after the BLS release, propagated through derived pages within 2 weeks.
- BLS MSA wage data β pulled annually each May.
- H-1B disclosures β pulled quarterly when DOL publishes new data.
- C2ER COL index β pulled quarterly.
- HUD Fair Market Rents β pulled annually each October.
- Pipeline run β first week of every quarter (Jan / Apr / Jul / Oct). Recomputation touches every locality multiplier and every derived figure.
Data refresh log
What's currently powering the numbers on the site, with vintage and last-pulled date for each source. This table is the same data that appears in the "Last verified" badges on individual pages.
Editorial standards
SalaryOptics is published as a data-publisher, not a personality blog. Articles and analysis are reviewed and produced by the SalaryOptics Editorial team and attributed at the organization level rather than to individual authors. Every figure that appears in an article or on a salary page can be traced back to a primary source listed above. Where we infer or estimate (e.g., 90th-percentile interpolation, locality multiplier fallback), we say so on the page in question and document the technique on this methodology page.
If you spot a calculation that doesn't match its cited source, treat it as a bug worth reporting β see Corrections below.
Corrections & contact
If a published number doesn't match what you know to be true for your role and city, please tell us. Be specific: the URL, the field you're disputing, and (if you can share it) the source you'd point to. We read every email and update the data where the case is supported.
Email: corrections@salaryoptics.com
Source citations
- BLS Occupational Employment & Wage Statistics (OEWS)
- BLS Employment Projections 2022β2032
- O*NET Online (US Department of Labor)
- DOL H-1B Performance & LCA Disclosure Data
- US Census American Community Survey (ACS)
- C2ER Cost of Living Index
- HUD Fair Market Rents
- IRS Tax Tables (2026)
- WEF Future of Jobs Report 2025