About
The data
Every figure comes from the U.S. Bureau of Labor Statistics (BLS) Occupational Employment and Wage Statistics (OEWS) survey, May 2025 estimates, retrieved November 7, 2026. BLS updates them once a year, in spring; this site is refreshed after each release.
What the numbers mean
Median: half of the people in the job earn less, half earn more. Mean: the average, which a few high earners can pull up. Percentiles: the 25th percentile is the wage that a quarter of people earn less than.
Wages are what employers pay before taxes, including tips and commissions but not overtime, bonuses or benefits. They cover employees of businesses and governments, not the self-employed.
Annual wages are hourly wages times 2,080 hours (40 hours for 52 weeks), unless BLS publishes only one of the two. For jobs that are not usually full-time all year, such as teachers or actors, BLS gives only annual or only hourly figures, and so does this site.
Where your pay falls
BLS publishes five percentiles. When your pay falls between two of them, this site estimates your position in a straight line between them, so “around the 40th percentile” is an estimate, not a BLS figure.
The bell curve under “The spread” is also an estimate: a smooth log-normal curve fitted to those five percentiles. The dots on it are the published figures.
Gaps
BLS leaves out wages it cannot estimate reliably, often because few people do that job in that area; those show as n/a. For some jobs, mostly physicians, it withholds high wages and says only that they are at or above $115.00 an hour or $239,200 a year; those show with a “+”.
Areas
Metro areas follow the federal definitions BLS uses, and the rest of each state is split into nonmetropolitan areas. A metro area that crosses a state line is listed under each state it covers.
About this app
paycheck is a small, free tool built and published by Velocity Labs.
- Server: Node.js 26 and Express 5, written in TypeScript and run directly by Node's built-in type stripping, with no build step.
- Pages: rendered on the server with Nunjucks templates. The charts, the bell curve and the state map are plain HTML, CSS and inline SVG; the only JavaScript is the theme switch and the pop-up windows, and everything works without it.
- Data: the BLS flat files (about 330 MB) are loaded once into a read-only SQLite database of about 40 MB, read with Node's built-in
node:sqlite. Each page is a handful of indexed queries; nothing calls BLS while you browse. - Privacy by design: your pay is sent only in a form post, never in a link, and is not stored or logged. No cookies, accounts or tracking.
- Hosting: a Docker container deployed with Kamal, behind HTTPS, with a strict content security policy.
- Tests: Vitest and Supertest, against a small database built from hand-made files in the BLS format.
BLS.gov cannot vouch for the data or analyses derived from these data after the data have been retrieved from BLS.gov. This site is not affiliated with or endorsed by BLS.