SkilledMarkets.comTrade Wage Intelligence
HomeFeaturesPricingROI CalculatorBlogStoreAboutLog inStart Free Trial
SkilledMarkets.comTrade Wage Intelligence

SkilledMarkets gives specialty trade contractors — HVAC, electrical, plumbing, welding — instant BLS-powered wage benchmarks, full O*NET occupational profiles, and offer-ready salary bands. Stop guessing what to pay. Start hiring confidently.

Wage data from the U.S. Bureau of Labor Statistics OEWS · Occupational profiles from O*NET OnLine

Product

  • Features
  • Pricing
  • ROI Calculator
  • Store

Resources

  • Blog
  • About
  • Contact
  • Demo Request

Legal

  • Terms of Service
  • Privacy Policy
  • Refund Policy
  • Cookie Policy
  • Accessibility
© 2026 Rovaryn Digital Inc. · SkilledMarkets.comBuilt by Rovaryn Digital Inc.

We use cookies to analyze site traffic and improve your experience. See our Cookie Policy for details.

Home›Blog
How to Use BLS & O*NET Data

How to Read BLS OES Data for Your Trade Business (Without a Spreadsheet Headache)

By Rovaryn Digital · May 14, 2026 · 12 min read

How to Read BLS OES Data for Your Trade Business (Without a Spreadsheet Headache)

The Moment the Spreadsheet Breaks You

You posted the journeyman electrician role on Monday. By Wednesday you had three solid applicants, and by Friday the best one countered your offer by $6,000 — citing a number he'd seen on a salary site you've never heard of. You figured the BLS has the real data, so you went looking. Thirty minutes later you were staring at a tab-delimited text file with 800 rows and column headers like H_PCT75 and A_MEAN_SE, wondering which row was even the right trade.

You are not alone. The BLS Occupational Employment and Wage Statistics (OEWS) program publishes the most statistically rigorous wage data in the United States — built from a sample of approximately 1.1 million establishments covering roughly 55% of total national employment (BLS, May 2024). It is free. It is authoritative. And it is genuinely hard to use without a map.

This article is that map. By the time you finish, you'll know exactly which file to download, which row to find, which columns matter for a hiring decision, and what to do when the number you need isn't there. No prior data experience required.


Step 1 — Understand What the OEWS Actually Is (in 90 Seconds)

The Occupational Employment and Wage Statistics program — usually called OEWS, and formerly called OES — is a joint BLS and State Workforce Agency survey conducted twice a year. Each panel samples around 186,000–189,000 establishments; the full survey pools six panels across three years before publishing. The result, released every May, covers 800+ detailed occupations across national totals, all 50 states, and roughly 530 metropolitan and nonmetropolitan areas.

For a trade employer, what matters is this: OEWS is the source behind every wage figure in the BLS Occupational Outlook Handbook. When a journeyman electrician says he looked up "the BLS number," this is the database he (or the salary site he used) pulled from. Your offer needs to come from the same place — ideally with the right geography applied.

Two terms to pin down before we go further:

  • SOC code — Standard Occupational Classification code, a six-digit number that identifies a specific occupation. Electricians are SOC 47-2111; HVAC mechanics are SOC 49-9021; welders are SOC 51-4121. Every OEWS row is keyed to a SOC code. If you're not sure of the right code for a role, the plain-English SOC code guide for trade employers on this site walks through the most common ones.

  • MSA — Metropolitan Statistical Area, the Census Bureau's geographic unit for grouping counties into an economic labor market (e.g., "Houston-The Woodlands-Sugar Land, TX"). OEWS produces separate wage tables for each MSA, which is what makes local benchmarking possible. The guide to MSAs and wage data explains how boundaries are drawn and why the same state can have wildly different rates in its major metros versus rural areas.


Step 2 — Find the Right File on bls.gov/oes

Go to bls.gov/oes and click the current release (look for "May [year] OEWS Research Estimates"). You'll land on a page with several download options. Here's how to choose:

File What's in it When to use it
National industry-specific Wages by SOC × industry (NAICS) Benchmarking to specialty trade NAICS 238x
National cross-industry All employers, wages by SOC only Fastest lookup; good starting anchor
State Wages by SOC for each state When you hire in a single state
Metropolitan/nonmetropolitan areas Wages by SOC for each MSA Best for a specific labor market

For most trade employers: start with the national cross-industry file to get your bearings, then layer on the metropolitan file for the MSA where you're actually hiring. Download both as .xlsx (BLS now offers Excel format alongside the original tab-delimited .txt). If you only see .txt, it opens fine in Excel — File → Open → change file type to "All Files," then use the import wizard and select "Tab delimited."

The national file will have somewhere north of 800 rows when you open it. Don't scroll — use Ctrl+F or a filter.


Step 3 — Find the Right Row with the SOC Code

Once the file is open, look for a column called OCC_CODE (or "occ_code" — the capitalization varies by release). Filter or search that column for the six-digit SOC code of the role you're hiring.

Common trade SOC codes, with their BLS May 2024 national medians:

Occupation SOC Code National Median (May 2024)
Electricians 47-2111 $62,350/yr
Plumbers, pipefitters & steamfitters 47-2152 $62,970/yr
HVAC mechanics & installers 49-9021 $59,810/yr
Welders, cutters, solderers & brazers 51-4121 $51,000/yr
Carpenters 47-2031 $59,310/yr
Sheet metal workers 47-2211 $60,850/yr
Structural iron & steel workers 47-2221 $62,700/yr
Construction equipment operators 47-2073 $58,320/yr

All figures: BLS OEWS, May 2024 national. Current-year figures at bls.gov/oes.

One important note on plumbing and pipefitting: BLS publishes a single wage row for SOC 47-2152 covering plumbers, pipefitters, and steamfitters together. You'll see it described as "plumbers" on some job boards, but the OEWS does not split the three out into separate wage series. The O*NET profiles distinguish the work in detail — but the wage anchor is one number.

Once you've filtered to your SOC code, you have one row. Now the real decision starts: which columns do you read?


Step 4 — Decode the Percentile Columns (This Is Where the Hire Happens)

The OEWS file reports wages in two pay-period formats — hourly (H_) and annual (A_) — and at multiple statistical points. Here are the columns that matter for a hiring decision:

Column header What it means
H_MEDIAN / A_MEDIAN The 50th percentile — half of all workers in this occupation earn more, half earn less. Your market midpoint.
H_PCT25 / A_PCT25 The 25th percentile — 3 out of 4 workers earn more than this. A reasonable floor for entry-to-journey-level work.
H_PCT75 / A_PCT75 The 75th percentile — 1 in 4 workers earns more than this. Where you go for a competitive hire or a senior hand.
H_PCT10 / A_PCT10 The 10th percentile — the low end of the range; helpful for understanding the full spread.
H_PCT90 / A_PCT90 The 90th percentile — the top of the distribution; top-of-market for the most experienced or licensed workers.
H_MEAN / A_MEAN The average wage. Because high earners pull the mean up, median is the better hiring anchor for most trades.

A deeper walkthrough of what each percentile means for a specific offer decision — and when to anchor above or below the median — is in the wage percentiles explained for trade employers guide.

The plain-English translation: if you're trying to hire a mid-career journeyman electrician in a competitive market, the 75th percentile ($106,030/yr nationally, BLS May 2024) tells you that only one in four electricians in the country earns more than that — it's a strong offer almost everywhere. The median ($62,350/yr) is competitive for a hire you're confident about. The 25th percentile is where apprentice-level or entry-level work typically lands.

You'll also see a column called H_MEAN_SE or A_MEAN_SE — that's standard error, a statistical quality indicator. Ignore it for hiring decisions; it's mainly relevant if you're doing research-grade analysis.

What to do when a cell shows * or #

OEWS uses suppression to protect the quality of its estimates. A * means the estimate didn't meet BLS publication standards — typically because the occupation has fewer than 10 estimated employees in that area, or the sample was too small to produce a reliable figure. A # on an hourly column usually means the occupation is primarily salaried and BLS didn't compute an hourly rate.

When you see suppression at the metro level: step up to the state file for the same SOC code. If the state is also suppressed (rare for common trades), use the national figure and note that in your offer documentation. Never infer a local rate by adjusting a national figure — the geographic variation is real and can be large in either direction.


Step 5 — Layer On Geography: The Metro File

The national figures are your anchor. But a $62,350 national median for electricians tells you very little about what you'll need to offer in a high-cost coastal metro versus a mid-sized inland market. That's why the metropolitan area file exists.

Download the metro OEWS file from the same bls.gov/oes release page. It has an additional column — usually AREA or AREA_TITLE — that identifies the MSA. Filter to your MSA by name or the FIPS area code, then filter again to your SOC code. The percentile columns work identically to the national file.

The geography hierarchy when data is missing:

  1. Your specific MSA → if suppressed,
  2. Your state → if suppressed,
  3. National (with a note in your records that you used the national figure)

Because BLS doesn't publish every SOC × metro combination — suppression thresholds mean some smaller metros have gaps for less-common trades — this fallback chain is important to document. If you're building salary bands and the local cell isn't available, say so, and revisit when the next annual release drops. The OEWS release schedule guide explains when new data comes out and how to plan your benchmarking cycle around it.

State and metro medians for specific geographies are not included in this article's data library. For the live local figure for your MSA and trade, go directly to bls.gov/oes, select the current release, filter to your state or metro, and look up the SOC code.


Step 6 — Build a Salary Band From What You Found

Finding the median is step one. The median alone doesn't give you the offer range you need to walk into a negotiation. That's where a salary band comes in: a min, midpoint, and max that define the full acceptable range for a role.

Here's the method, shown as a worked example. These numbers are illustrative — anchored on a real BLS figure, with round spread buffers to demonstrate the formula.

Worked example — journeyman electrician, using the BLS May 2024 national median:

  • Midpoint anchor: $62,350 (BLS May 2024 national median, SOC 47-2111). Use your local metro figure here if available; this is a national stand-in.
  • Spread: ±20% is a common starting spread for skilled-trade bands, giving a min-to-max range of 40 percentage points.
  • Band minimum: $62,350 × 0.80 = $49,880 (round to $50,000)
  • Band maximum: $62,350 × 1.20 = $74,820 (round to $75,000)
  • Offer for a competitive mid-career hire: land near the midpoint to slightly above — $62,000–$66,000 — and have the flexibility to move toward the max for a candidate with documented specialty certifications or a strong local market pull.

The spread buffer is a choice you make based on how much variation your workforce has within a job title. Apprentice-to-journeyman spans might warrant 30–35%; a narrow senior-tech band might use 15%. The full wage benchmarking guide for skilled trades covers band design in depth, including how to tier bands by experience level.

If building the band formula in a spreadsheet every time sounds like work you'd rather skip, our Skilled Trades Salary Band Builder does this in one step — you enter the SOC code, the geography, and the percentile anchor, and it outputs the min/midpoint/max band as a formatted, shareable document.


The One Thing That Trips People Up Most

The single most common mistake when reading OEWS data: using a national median as if it's a local rate.

A national electrician median of $62,350 (BLS, May 2024) is exactly right for a nationally-framed comparison, and completely wrong as the offer anchor if you're hiring in a high-cost metro where the local rate is meaningfully higher — or, conversely, if you're in a lower-cost nonmetropolitan area where the national number would price you out of an otherwise winning offer.

The fix is simple: always pull the metro or state file alongside the national one, note which geography the figure comes from, and state that geography when you share or document the number. For a deeper look at why the free BLS data is powerful but requires this legwork — and when it makes sense to use a tool that has already done the SOC lookup and geography layer for you — see BLS free data vs. a wage tool: what's the difference?


What You Can Do Right Now

The BLS OEWS data is sitting at bls.gov/oes, free, waiting for you. The hardest part isn't the math — it's knowing which file, which row, and which column to trust, and then doing it quickly enough that the answer is ready before your next offer goes out.

Here's the fast version of everything above:

  1. Go to bls.gov/oes → current release → national cross-industry file (xlsx).
  2. Filter OCC_CODE to your trade's SOC code (see the table in Step 3).
  3. Read A_MEDIAN for your market anchor; A_PCT75 for a competitive offer on a senior hire.
  4. Download the metro file → filter to your MSA + SOC code for the local rate.
  5. If metro is suppressed, use the state file; if state is suppressed, use national and note it.
  6. Build your band: midpoint anchor ± your chosen spread.

If you'd rather have a spreadsheet that does steps 2–6 in one place — with the band formula pre-built and the output formatted for a hiring packet — grab the Skilled Trades Salary Band Builder. It won't replace bls.gov, but it turns a 45-minute CSV hunt into a five-minute lookup.

This article references publicly available BLS OEWS data. Wage figures are BLS estimates (May 2024 national release) and should be verified against the current release at bls.gov/oes before use in an offer. SkilledMarkets is not the BLS or the U.S. Department of Labor and does not produce the underlying wage data.

Get the report: Skilled Trades Compensation Guide 2026 →

Ready to go beyond the guide? Benchmark trade wages with live BLS data.

Start Free Trial

Get free wage guides in your inbox

BLS data explainers and salary band tips for trade contractors.

#BLS OEWS#data literacy#wage data#contractors

Related posts

Wage Percentiles Explained: 10th to 90th, and What Each Means for Your Offer
How to Use BLS & O*NET Data· 9 min read

Wage Percentiles Explained: 10th to 90th, and What Each Means for Your Offer

Percentiles sound like a math class flashback. Here's what each one tells you about the market - and where to anchor your offer.

Read More →
O*NET-SOC vs BLS SOC Codes: How the Two Datasets Connect
How to Use BLS & O*NET Data· 9 min read

O*NET-SOC vs BLS SOC Codes: How the Two Datasets Connect

47-2111 or 47-2111.00? Here's why both exist and how joining them gives you wages plus the full job profile in one place.

Read More →
O*NET Job Zones Explained: How to Read the Experience Level of Any Trade
How to Use BLS & O*NET Data· 9 min read

O*NET Job Zones Explained: How to Read the Experience Level of Any Trade

O*NET's Job Zones rank how much preparation a job takes. For trades, that maps neatly to apprentice, journeyman, and master.

Read More →