$
BLSSalary

Methodology

Data Source

All wage data comes directly from the BLS Occupational Employment and Wage Statistics (OEWS) program. We download the official all-data Excel file (all_data_M_2025.xlsx) published at bls.gov/oes and import it into a local SQLite database without modification to the underlying wage figures.

Filtering Applied

We apply two filters during import:

  • Cross-industry only — We keep rows where I_GROUP = 'cross-industry', discarding industry-specific breakdowns (e.g., healthcare workers in the finance sector). This gives the broadest, most representative wage figure for each occupation.
  • Detailed SOC level only — We keep rows where O_GROUP = 'detailed', discarding broad/major/minor group aggregates. Detailed occupations are the most granular classification.

Geographic Levels

The BLS file contains data at multiple geographic levels, identified by AREA_TYPE:

  • Type 1 — National: U.S. aggregate (one row per occupation)
  • Type 2 — State: All 50 states + D.C.
  • Types 3, 4, 5, 6 — Metro/Nonmetro areas: Metropolitan Statistical Areas, Metropolitan Divisions, Nonmetropolitan areas, and statewide metro aggregates

Suppressed Values

BLS suppresses some cells (shown as #or * in the source file) when there are too few employers to produce a reliable estimate, or when publishing would risk disclosing individual employer wages. These values are stored as NULLand shown as "N/A" on this site.

No Adjustments

We do not adjust wages for cost of living, inflation, or any other factor. All figures are nominal dollars as published by BLS. The survey reference period is May 2025.

URL Slug Generation

Occupation, state, and metro area URL slugs are generated by lowercasing the official BLS title and replacing non-alphanumeric characters with hyphens. Where two different areas share the same slug (e.g., Guam and Virgin Islands as statewide and nonmetro designations), the BLS area code is appended to ensure uniqueness.