The Complete Guide to Benchmarking Skilled Trades Wages (BLS + O*NET) in 2026
By Rovaryn Digital · May 13, 2026 · 18 min read

The Candidate Just Countered Your Offer — Now What?
Your HVAC lead called on a Tuesday afternoon. You made what felt like a fair offer to the journeyman he's been chasing for three weeks — and the candidate came back $6 an hour higher than you expected. Your lead wants to know if you can move. You want to know if the counter is reasonable or a bluff. And right now, the only data you have is what you paid your last hire two years ago.
That moment — the counter-offer moment — is exactly why skilled trades wage benchmarking matters. Not as an annual HR exercise, but as a real-time hiring tool you can use between a first conversation with a candidate and the call back you're about to make.
This guide walks you through the complete process: how to find the right government wage data for your trade, how to read it without a spreadsheet degree, how to adjust for your geography and the seniority of the role, and how to turn raw percentile numbers into an offer-ready salary band. We use free, public BLS OEWS and O*NET data throughout — the same authoritative sources that power every benchmark on SkilledMarkets.
By the end, you'll know exactly what to look for, what the data can and can't tell you, and how to make the call.
Step One: Find the Right SOC Code for Your Trade Role
Before you can pull a single wage figure, you need to know which occupation code you're looking up. That's the SOC code — Standard Occupational Classification — a six-digit number the Bureau of Labor Statistics uses to organize every occupation in the country into one consistent taxonomy. Think of it as the ISBN for a job: it's the unique identifier that makes sure you're comparing apples to apples when you pull wage data.
Here's why this matters for trade contractors specifically: if you search for "plumber wages" on the BLS website, you'll land on the right page. But if you try to look up "HVAC installer" without knowing that the official SOC is 49-9021 (Heating, Air Conditioning, and Refrigeration Mechanics and Installers), you might end up on a maintenance mechanic page that covers a much broader pool of workers — and the median will be off. Getting the SOC code right is the first and most important step in skilled trades wage benchmarking.
Here are the SOC codes you'll use most often as a specialty trade contractor:
| Trade | SOC Code |
|---|---|
| Electricians | 47-2111 |
| Plumbers, Pipefitters & Steamfitters | 47-2152 |
| HVAC Mechanics & Installers | 49-9021 |
| Welders, Cutters, Solderers & Brazers | 51-4121 |
| Carpenters | 47-2031 |
| Sheet Metal Workers | 47-2211 |
| Structural Iron & Steel Workers | 47-2221 |
| Construction Equipment Operators | 47-2073 |
A few important notes on using this table. First, plumbing and pipefitting share a single BLS OEWS wage series under SOC 47-2152. The BLS combines plumbers, pipefitters, and steamfitters into one occupational estimate — there is one median wage for the group, not separate numbers for each specialty. If you're hiring a pipefitter specifically, the O*NET profile (covered below) helps you understand what distinguishes the work, but the wage benchmark you'll use is the same series. Don't let anyone show you two different BLS medians for plumbers versus pipefitters from the same OEWS release — that's a red flag.
Second, masonry work spans several SOC codes depending on specialty (brickmasons, blockmasons, stonemasons, cement masons, terrazzo workers). The trade wage data hub has the full breakdown — for this guide, we'll use the broader masonry category.
Want a deeper walk-through on navigating the SOC taxonomy? Our guide to SOC codes for trade employers covers every specialty trade code and common lookup mistakes.
Step Two: Pull the BLS OEWS Data at the Right Geography
Once you have your SOC code, you're ready to pull actual wage data. The source is the BLS Occupational Employment and Wage Statistics program — known as OEWS. It's a free, public dataset published annually by the U.S. Bureau of Labor Statistics. Every wage figure you'll see on a trade hiring guide, a salary calculator, or a government labor market report traces back here.
The OEWS is built from a sample of approximately 1.1 million establishments across the country (with roughly 186,000–189,000 establishments sampled per semiannual collection panel). It's a large-scale, methodologically rigorous survey — not a crowd-sourced estimate, not a job-posting database, not a model output. The resulting wage estimates cover more than 800 detailed occupations and are available at the national level, for every state, and for hundreds of metropolitan statistical areas. All wage figures cited in this article are from the BLS May 2024 OEWS release; for the most current data, visit bls.gov/oes.
National figures give you the baseline. Here's where the major trades sit as of May 2024:
| Trade | Median Annual Wage | 10th Percentile | 90th Percentile |
|---|---|---|---|
| Electricians (SOC 47-2111) | $62,350 | $39,430 | $106,030 |
| Plumbers, Pipefitters & Steamfitters (SOC 47-2152) | $62,970 | — | — |
| HVAC Mechanics & Installers (SOC 49-9021) | $59,810 | $39,130 | $91,020 |
| Welders, Cutters, Solderers & Brazers (SOC 51-4121) | $51,000 | $38,130 | $75,850 |
| Carpenters (SOC 47-2031) | $59,310 | — | — |
| Sheet Metal Workers (SOC 47-2211) | $60,850 | — | — |
| Structural Iron & Steel Workers (SOC 47-2221) | $62,700 | $42,000 | $107,520 |
These are solid anchors. But they're national figures — and your hiring market is almost certainly not the national average.
State and metro data is where benchmarking gets real. The OEWS publishes wage estimates for all 50 states and for hundreds of metropolitan statistical areas (MSAs — the government's term for a city and its surrounding economic area). An electrician's median in a high cost-of-living metro on the coasts may sit substantially above the national figure; a rural market in the interior of the country may sit below it. Using a national median to make an offer in a tight urban labor market is one of the fastest ways to lose a candidate.
The right workflow: start with the national median to orient yourself, then look up your state figure, and then — if your metro has enough trade employment to generate a reliable estimate — use the metro figure as your primary anchor.
One important caveat on metro data: the BLS suppresses wage estimates for an occupation in a given area when the sample is too small to meet publication standards, including when estimated employment is fewer than 10 people. For less common specialties (structural ironworking in a small metro, for example), you may hit a suppressed cell. When that happens, fall back to the state figure; if the state is also suppressed, use the national. Note in your records which geography you used.
Because state and metro medians for specific trades are not fixed in this guide's data library, we won't publish specific local figures here — pulling a number from memory or inference when the live OEWS has the authoritative figure would be doing you a disservice. Instead: go to bls.gov/oes, select your state or metro, then look up your SOC code. For a step-by-step walk-through of that interface, see how to read BLS OEWS data for trade contractors.
Step Three: Understand What Percentiles Actually Tell You
Here's where a lot of trade employers stop reading — and where the real value starts. The OEWS doesn't just give you one number per occupation. It gives you a distribution: the 10th, 25th, 50th (median), 75th, and 90th percentile wages for every occupation at every geography it publishes.
A percentile is simply your position in the ranking. If the median (50th percentile) electrician wage in your state is $62,350, that means half of all electricians in that sample earn less than $62,350, and half earn more. The 75th percentile means 75% of electricians earn less than that figure — in other words, only the top quarter earn more. The 90th percentile is where the top 10% start.
Why does this matter for a hiring offer? Because different candidates deserve different anchors:
- A new journeyman fresh out of an apprenticeship program probably anchors near the 25th–40th percentile range for your trade and geography.
- An experienced journeyman with 5–8 years in the field and a clean license record belongs somewhere in the 50th–65th percentile range.
- A lead tech or foreman you're pulling from a competitor — or a specialist whose skills are hard to replace — might justify a 75th percentile anchor or higher.
- A master electrician or senior pipefitter who's going to run your largest commercial accounts is a 90th-percentile conversation.
The mistake most trade employers make is treating the median as "the number" for every offer. It's not — it's the midpoint of the market. Using it as a ceiling for an experienced hire is a reliable way to generate exactly the kind of counter-offer that opened this guide.
For a deeper explanation of how to read and apply each percentile in an offer decision, see wage percentiles explained for trade employers.
Step Four: Use O*NET to Understand the Role — Not Just the Pay
Wage data tells you what the market pays. O*NET tells you what the job actually requires — and that distinction matters when you're writing a job description, evaluating a candidate's qualifications, or deciding whether to anchor an offer at the 50th or 75th percentile.
O*NET OnLine (onetonline.org) is a free occupational database maintained by the U.S. Department of Labor. For every SOC code, it publishes a detailed occupational profile covering:
- Tasks — the specific activities the worker performs day-to-day
- Skills — cognitive and interpersonal abilities applied on the job
- Knowledge — technical and domain knowledge required
- Abilities — physical and cognitive capacities
- Work context — environment conditions (outdoor work, confined spaces, heights, noise exposure)
- Job Zone — a 1-to-5 scale indicating the level of education, experience, and training required for the occupation
That last item — Job Zone — is particularly useful for trade hiring. Job Zone 1 means little preparation needed; Job Zone 5 means extensive graduate-level preparation. Most specialty trades land in Job Zone 3 (medium preparation: one to two years of training or apprenticeship) or Job Zone 4 (considerable preparation: several years of related work experience, often including a formal apprenticeship). An electrician, for example, typically requires three to four years of apprenticeship and must pass a licensing exam — that's a Job Zone 4 classification, and it should inform both your qualifications checklist and your percentile anchor.
The practical use case: before you post a journeyman electrician role, pull the O*NET profile for SOC 47-2111. Use the task list to make sure your job description reflects what the role actually does (not a copy-paste from three years ago). Use the knowledge and skills sections to frame your interview questions. Use the work context section to be honest in the posting about physical demands — candidates who know what they're getting into stay longer. Then use the Job Zone to cross-check your percentile anchor: a role that truly demands Job Zone 4 qualifications priced at the 25th percentile is going to attract Job Zone 2 candidates.
For a full walkthrough of reading an O*NET profile and connecting it to a salary decision, see O*NET Job Zones explained for trade employers.
This article includes information from ONET OnLine, developed by the U.S. Department of Labor, Employment and Training Administration. ONET is a registered trademark of the U.S. Department of Labor, Employment and Training Administration.
Step Five: Build an Offer-Ready Salary Band
You now have a SOC code, a percentile anchor for your geography, and an O*NET-grounded sense of where this specific role sits in the experience spectrum. The last step is converting that anchor into an actual salary band — a minimum, a midpoint, and a maximum — so that every offer your team makes for this role is consistent, defensible, and competitive.
A salary band (also called a pay range or compensation range) is the structured range of wages you're willing to pay for a given role. It prevents one manager from offering $28/hr to a candidate while another offers $33/hr for the same position — and it gives you a framework for internal equity as your team grows.
Here's a simple method anchored on the BLS OEWS percentile you selected:
The Percentile-Anchor Band Method:
- Choose your midpoint anchor. This is the percentile that reflects the typical fully qualified hire for this role in your market. For most experienced journeymen in competitive metros, this is the 50th–60th percentile.
- Set a spread buffer. A common band spread for trade roles is ±15–20% around the midpoint. Wider spreads accommodate more variation in experience; narrower spreads signal a well-defined, consistent role.
- Calculate min and max. Min = midpoint × (1 − spread); Max = midpoint × (1 + spread).
Worked example (for illustration only): Suppose you're building a band for a journeyman electrician role in your state, and your state median (from bls.gov/oes) is close to the national figure of $62,350/yr (BLS, May 2024). You decide to anchor your midpoint at the 50th percentile — $62,350 — and use a ±15% spread.
- Min: $62,350 × 0.85 = $53,000/yr (rounded)
- Midpoint: $62,350/yr
- Max: $62,350 × 1.15 = $71,700/yr (rounded)
An entry-level journeyman comes in near the min. An experienced journeyman with a specialty certification and a strong reference gets an offer in the midpoint-to-max range. No one on your team is improvising.
If you later hire a lead tech who genuinely belongs at the 75th percentile, that's a different band — build a separate one for the lead role rather than stretching this band until it's meaningless.
For a full guide to building and maintaining salary bands across your trade roles — including how to handle union vs. non-union differences and how to refresh bands when new OEWS data drops — see how to build a salary band for skilled trades.
Why Skilled Trades Wage Benchmarking Is Harder Right Now
Getting your benchmarking process right matters more in 2026 than it did five years ago — because the labor market for specialty trades has tightened in ways that aren't fully captured by any single median figure.
A few forces driving this:
Demand is outpacing supply. The construction and extraction occupations as a group posted median annual wages of $58,360 in May 2024 (BLS OEWS), well above the $49,500 median across all occupations — and projected growth for many trade occupations is running well above the economy-wide average. Electricians, for example, are projected to grow at 9% over the 2024–2034 decade (BLS Occupational Outlook Handbook), roughly three times the projected rate for all occupations combined. HVAC mechanics and installers are projected at 8% growth over the same period. That math — more demand, constrained supply — means candidates have options, and they know it.
The workforce is aging out. Roughly one in five construction workers is over age 55 (Associated Builders and Contractors). Retirements are removing experienced workers from the pool faster than apprenticeship pipelines can replace them. The workers who remain — especially licensed journeymen and master tradespeople — are in a stronger negotiating position than the median wage figure alone will suggest.
Wages are still moving. Private-industry wages and salaries rose 3.4% year-over-year as of March 2026 (BLS Employment Cost Index). A May 2024 OEWS figure is a snapshot — useful as an anchor, but worth adjusting upward when you're making an offer in mid-2026 and the local market has been running hot.
The cost of getting it wrong is real. SHRM research suggests that replacing an employee can cost anywhere from 50% to 200% of that worker's annual salary — meaning a mis-priced offer that turns over a $62,000 technician could cost you somewhere in the range of $31,000–$124,000 in recruiting, onboarding, and lost productivity costs. That's a modeled range based on published SHRM benchmarks, not a measured outcome from any specific hire — but it illustrates why the stakes justify spending time on a real benchmark rather than guessing. For a fuller look at those cost mechanics, see the cost of a bad skilled trades hire.
None of this means you need to panic-price every offer at the 90th percentile. It means your benchmark needs to be current, local, and role-specific — not last year's number applied universally.
The Manual Process vs. the Tool: What You're Actually Trading Off
Everything in this guide is doable with the free BLS OEWS and O*NET portals. Both are public, authoritative, and updated annually. So what's the actual friction?
The honest answer is time and lookup expertise. The BLS publishes its OEWS data as downloadable tab-delimited files — one file per geography, each containing hundreds of SOC codes across dozens of columns. To pull a metro-level electrician median, you download the metro file, filter by SOC code, pull the right wage columns, and cross-reference the O*NET profile in a separate browser tab. If you need to compare three trades across two geographies to scope a new division, that's a meaningful afternoon of spreadsheet work, done carefully.
That's the gap SkilledMarkets was built to close: not that the data is missing, but that the workflow between "I need to make an offer" and "I have a number I trust" is longer than it should be for a 40-person contractor who doesn't have a comp analyst on staff. The platform queries the same BLS OEWS and O*NET data, surfaces the percentile breakdown for your trade and geography in seconds, and lets you generate a formatted salary band you can drop into an offer letter.
If you want to see how that compares to doing it manually from the raw BLS files, this breakdown walks through both approaches side by side.
You can also explore all the trade-specific wage data the platform covers at the trade wage data hub — or head straight to pricing if you want to see the plan options.
Putting It All Together: Your Benchmarking Checklist
Here's the end-to-end skilled trades wage benchmarking process in one place:
1. Identify the SOC code for the specific trade role you're hiring. Confirm it's the right code — not a broader maintenance or construction manager code.
2. Pull the OEWS data at the right geography. Start national, then state, then metro. Use the most local figure that isn't suppressed. Find it at bls.gov/oes or let the SkilledMarkets platform surface it directly.
3. Note the release year and geography of every figure you use. Never use a national median as a stand-in for a local rate without flagging it.
4. Choose your percentile anchor based on the seniority and scarcity of the role. Junior hires anchor lower; experienced, hard-to-find specialists anchor higher.
5. Pull the O*NET profile for that SOC code. Use it to check your job description, inform your interview process, and validate whether your percentile anchor matches the actual experience level the role demands.
6. Build the salary band using a percentile anchor and a spread buffer. Document the band, the anchor source, and the date so you can refresh it when the next OEWS release drops.
7. Make the offer — and make it with confidence. You have the data. You know the market. You know where this candidate lands in the distribution.
What to Do Right Now
If you have a trade offer to make this week and you've never done a formal wage benchmark before, start with step two: go to bls.gov/oes, look up your trade's SOC code, and find the national and state medians. That alone will tell you whether the number you're about to offer is competitive or not.
If you want a pre-built resource to shortcut the research, our Skilled Trades Compensation Guide 2026 compiles BLS OEWS wage data across the major trade SOC codes into a single formatted PDF — useful as a quick-reference for offer conversations or onboarding your ops team to the benchmarking process.
And if you're making trade offers regularly — multiple roles, multiple geographies, a team that needs consistent band references — the SkilledMarkets platform does the whole workflow for you: SOC lookup, percentile breakdown, geographic filter, salary band generator, and O*NET profile, all in one place. Start a free 14-day trial and run a benchmark for the next role on your list. No spreadsheet required.
For trade-specific deep dives — what electricians in your region actually earn, the full breakdown for plumbers and pipefitters, or how HVAC wages vary by metro — start with the individual guides: electrician salary guide, plumber salary guide, HVAC technician salary guide. And if you want to model out what the right or wrong offer actually costs your business over a year, the ROI calculator can run those numbers with you.
The data is free. The workflow is learnable. Go make the offer you can defend.
Ready to go beyond the guide? Benchmark trade wages with live BLS data.
Get free wage guides in your inbox
BLS data explainers and salary band tips for trade contractors.


