About this site

Why I Built This

About three years ago I spent an entire weekend trying to figure out if a job offer was worth taking. It was in a different state. The salary looked fine on paper, but I had no way to tell if it was fine for that market.

So I did what most people do: opened Glassdoor, then Payscale, then Indeed, then LinkedIn Salary, then back to Glassdoor because maybe I'd missed something. An hour in I had five ranges that didn't agree with each other, half behind some signup wall, and none of them could tell me where in the distribution I'd actually land. Frustrating in a way that feels disproportionate to how simple the question is.

Here's the thing nobody really says out loud: most of that data is self-reported. Companies tell Glassdoor what they want to tell them. Employees type in whatever number feels right. There's no auditing, no consistent methodology, and honestly no good reason to think that 47 responses for "marketing manager in Denver" tells you much about the actual market. It might. It might not. You can't tell.

The Bureau of Labor Statistics surveys about 1.1 million employers every year. Mandatory participation. Consistent methodology going back to 1988. They publish the whole dataset for free, covering 800-plus occupations across every state. I found it after about two hours of digging through bls.gov (not a great website, for the record). The data was all there, just buried in Excel files with column names like A_PCT25 and H_MEDIAN that require cross-referencing a 40-page data dictionary to make sense of.

So I built StateWages. That's the whole story.

What the data actually is

Every number on this site comes from the BLS Occupational Employment and Wage Statistics program, May 2024 release. That's the most recent data available right now. The next release (May 2025 data) is scheduled for sometime in spring 2026, and I'll update the site within a few days of that coming out.

I download the raw file from bls.gov, run it through a processing script, and generate a page for every occupation-state combination that has enough observations to report. When the sample size for a particular job in a particular state is too small, BLS suppresses the data and I show "N/A." That's not a bug. That's the data telling you there aren't enough observations to give you a number worth trusting, and I'd rather show nothing than show something misleading.

The tradeoff (and I want to be straight about this) is that BLS data is a snapshot. It reflects employer survey responses from late 2023 and early 2024. Job markets move. If you're in a field that changed a lot in the last year, treat these numbers as a floor, not a ceiling, and check recent job postings too.

How to actually read a percentile

Most people see the median and stop. The percentile table is way more useful than that, and I think it's worth explaining what those numbers mean in plain terms.

The 10th percentile is roughly what someone just starting out earns, or what the job pays in a low-cost area with a small employer. The 90th percentile is a senior person at a large employer in a high-cost city. The median (50th percentile) is the middle of the market: half earn more, half earn less. When you're looking at a job offer and you want to know if it's good, the relevant question isn't whether it's above the median. It's where it falls relative to what someone with your experience level typically earns. That's usually somewhere in the 25th to 75th range, and the specific number shifts a lot by location.

A registered nurse in California earns a median of about $125,000. In Mississippi it's around $63,000. Same license. Same job title. Same BLS occupation code. The state is doing almost all the work there, and that's a real thing worth knowing before you take a job or move.

What this site isn't

Not a job board. Not trying to sell you a resume service or connect you with recruiters (though I'd be lying if I said I never thought about adding affiliate links to job boards). There are no accounts, no surveys, no premium tiers. The data is public and the site is free because there's really no reason it shouldn't be.

The site runs display ads. That's how it stays free and how I cover the time I put into it. I'd rather be upfront about that than pretend it's purely altruistic.

If a number looks wrong: the most likely explanation is data suppression or a rounding difference in how BLS reports certain fields. The raw source is always bls.gov/oes and that's the ground truth. If you find a genuine error in how I've processed the data, I want to know about it.