Data checked · source: US Bureau of Labor Statistics
How we get our numbers
Short version: wages are US government data, billed rates are our model, and we show the model.
Wages
Every wage figure on this site comes from the Occupational Employment and Wage Statistics programme at the US Bureau of Labor Statistics, May 2025 release. We pull it through the BLS public API.
BLS data is public domain. In the Bureau's words: “You are free to use our public domain material without specific permission, although we do ask that you cite the Bureau of Labor Statistics as the source.” We cite it on every page.
We publish the median. Where BLS suppresses a figure for a metro area, we leave that metro out rather than estimating it.
Billed rates — this part is ours, not the government's
A wage is what the worker receives. A billed rate is what the customer pays. They are different numbers and conflating them is the most common mistake in cost articles.
We convert one to the other with two multipliers:
Billed rate = wage × 1.3 × 1.7 to 2.45
1.3× labour burden covers employer payroll taxes, workers' compensation, liability insurance and benefits.
1.7× to 2.45× overhead and profit covers the truck, fuel, tools, parts stock, dispatch, software, unbilled drive time, warranty work, and margin.
Combined: 2.21× to 3.19× the wage.
This is a judgement, not a measurement. A one-person operation working out of a pickup sits near the bottom of that range. A shop with a dispatcher, financed jobs and a warranty department sits at or above the top. We chose a range rather than a single number because the honest answer is a range.
If you run a shop and our multiplier does not match your books, we would like to know — write to us. Real numbers from real shops are how this gets better.
Reproduce our numbers yourself
Everything below is what you need to rebuild our wage tables from scratch without asking us for anything. If you are a journalist, a librarian, or somebody who thinks we are wrong, this section is for you.
The exact data we pull
- Programme: Occupational Employment and Wage Statistics (OEWS), US Bureau of Labor Statistics
- Release: May 2025 — the most recent at the time of writing
- Endpoint:
https://api.bls.gov/publicAPI/v2/timeseries/data/(BLS Public Data API v2, no key required for 25 series per query) - Retrieved: August 6, 2026
Series ID construction
OEWS series IDs are 25 characters:
OE + U + areatype(1) + area(7) + industry(6) + occupation(6) + datatype(2)
Area type N = national, M = metropolitan area. Industry
000000 = all industries (what we use). Data type 08 = median hourly wage,
07 = 25th percentile, 09 = 75th percentile.
Worked example — median hourly wage for plumbers in the Chicago metro area:
OEUM00169800000004721520 8 → area 0016980 (Chicago-Naperville-Elgin),
occupation 472152, data type 08.
The occupations we track
| Trade on this site | SOC code | BLS occupation title |
|---|---|---|
| Hvac Technician | 49-9021 | Heating, Air Conditioning, and Refrigeration Mechanics and Installers |
| Plumber | 47-2152 | Plumbers, Pipefitters, and Steamfitters |
| Electrician | 47-2111 | Electricians |
| Roofer | 47-2181 | Roofers |
| Carpenter | 47-2031 | Carpenters |
| Painter | 47-2141 | Painters, Construction and Maintenance |
| Tile Setter | 47-2044 | Tile and Stone Setters |
| Equipment Operator | 47-2073 | Operating Engineers and Other Construction Equipment Operators |
Occupation definitions: 2018 Standard Occupational Classification. Metro area codes are CBSA codes as used by BLS; we cover 49 metropolitan areas.
Known limitations — read these before citing us
- OEWS is a point-in-time survey, not a census. It is a model-based estimate from a rotating sample of establishments. Metro-level figures for small occupations carry wider error than national ones, and BLS does not publish standard errors through the API path we use.
- Suppressed cells are omitted, never estimated. Where BLS withholds a figure for confidentiality, that metro simply does not appear in that trade's table. A missing row means missing data, not a low wage.
- Self-employed workers are excluded. OEWS covers wage and salary workers. In trades with heavy owner-operator presence, the published wage understates what a working owner actually earns.
- Our billed-rate multiplier is an assumption, not a measurement. It is the one number on this site that is not sourced to anybody. Treat it as our editorial judgement and disagree with it freely.
- Material prices are single-retailer snapshots. One listing on one date, linked. They are not a market survey and they move.
- We do not use RSMeans or Craftsman cost data. Their licences prohibit building a derivative database. Every figure here traces to public-domain government data or to a public listing you can open yourself.
Update cadence
Wages are refreshed when BLS publishes a new OEWS release, normally once a year in spring. Material and equipment prices are re-checked quarterly. Every page carries the date it was last checked, and corrections are logged with dates on the corrections page.
Using our figures
You may cite, quote and reproduce any number on this site. We would appreciate a link, but we do not require one and we will not chase you for one. The underlying BLS data is public domain and belongs to everybody; our arithmetic on top of it is not something we intend to fence off.
Software prices
One source only: the vendor's own public pricing page, read on a stated date, with the page linked. Not review sites, not resellers, not last year's blog post.
Where a vendor does not publish a number, we write that the vendor does not publish it. We never calculate a discounted price the vendor did not print, and we never repeat a figure from another comparison site.
What we will not do
- Say we tested something we did not sign up for.
- Publish a price without the date we saw it.
- Put any of this behind a signup form, an email gate, or a login.
- Change a number because a vendor asked us to. We will change it if they show us it is wrong.
- Update a date without updating the content underneath it.
Update schedule
- Wages — once a year, when BLS publishes the new OEWS release, usually in spring.
- Software prices — on the first of each month. We keep the old file, so this builds into a price history rather than a snapshot.
- Corrections — as soon as we can verify them, logged with the date.
Current source list
- BLS Occupational Employment and Wage Statistics, May 2025
- BLS Public Data API v2
- BLS Standard Occupational Classification
- BLS copyright and public domain notice
- Vendor pricing pages, each linked from the software table
Median wages we currently publish, for reference: HVAC technician $29.33, plumber $30.67, electrician $30.38, roofer $26.65, carpenter $29.12, painter $23.75, tile setter $26.77, equipment operator $28.78 per hour.