How to Write a Competitive Trade Job Offer (That Doesn't Get Countered)
By Rovaryn Digital · May 27, 2026 · 9 min read

The Counter That Cost You Three Weeks
Your foreman interviews a journeyman electrician on Thursday. By Friday afternoon you've decided he's the one — solid hands, showed up on time, crew liked him. You send the offer Monday morning: $27/hr. He replies Tuesday: he needs $31. You go back to your owner, spend two days negotiating internally, come back at $29 — and on Thursday he texts to say he accepted somewhere else.
That's five business days and one great candidate gone. If replacing him runs through a recruiter, you're looking at a fee that commonly runs 15%–25% of first-year base salary (SHRM/ANSI benchmark). If you absorb the search yourself, SHRM pegs the average cost per hire at roughly $4,700 — and that's before you count the lost field productivity while the seat sits empty.
The problem usually isn't that you were cheap. It's that you guessed. This article shows you how to write a trade job offer that's anchored to real market data, structured so the candidate can see you've done your homework, and presented in a way that closes — without a counter.
Start With the Right Number: What BLS Data Actually Tells You
Before you draft a single line of an offer letter, you need a wage anchor — a defensible, market-grounded number that isn't your gut feeling or what you paid the last person who held the role.
The best public source for that anchor is the BLS Occupational Employment and Wage Statistics (OEWS) survey, released annually by the U.S. Bureau of Labor Statistics. The OEWS is built from a sample of about 1.1 million establishments and covers 800+ occupations across national, state, and metropolitan geographies (BLS, bls.gov/oes). Every OOH wage figure traces back to it.
Here's what the May 2024 OEWS release shows for three of the most-hired trade occupations — nationally:
| Occupation | 10th Pct | Median (50th) | 90th Pct |
|---|---|---|---|
| Electricians (SOC 47-2111) | $39,430/yr | $62,350/yr | $106,030/yr |
| HVAC Mechanics & Installers (SOC 49-9021) | $39,130/yr | $59,810/yr | $91,020/yr |
| Welders, Cutters, Solderers & Brazers (SOC 51-4121) | $38,130/yr | $51,000/yr | $75,850/yr |
Source: BLS OEWS, May 2024 (national). For your metro's current figures, visit bls.gov/oes.
What a percentile actually means in an offer context: the 50th percentile (median) means half of workers in that occupation nationally earn less and half earn more. The 75th percentile means 3 out of 4 workers in that role earn less than this figure — it's where you go when you need to win a competitive hire or when the candidate has rare experience. The 90th percentile is your ceiling for a top-of-market specialist.
A critical caveat: these are national figures. If you're hiring in a high cost-of-labor metro — think coastal metros or major Sun Belt markets — the local rate may be meaningfully higher or lower. Always check bls.gov/oes for your state or metro's specific OEWS figure, tagged by SOC code and geography, before finalizing an anchor. If the metro cell is suppressed (BLS suppresses estimates based on small samples, including occupations with estimated employment under 10), fall back to your state figure and say so in your internal notes.
For a full walkthrough of how to read and apply OEWS data to your specific trade, see our skilled trades wage benchmarking guide.
Build a Band, Not a Point
The single most common offer-writing mistake in trade contracting is presenting a single number: "$27/hr." That creates one of two bad outcomes — the candidate counters (because any single number reads as an opening bid) or you overpay (because you anchored too high to avoid a counter).
The better structure is a salary band: a min, a midpoint, and a max built from a percentile anchor and a deliberate spread. Here's how to construct one:
Worked example (electrician, journeyman-level hire):
- Anchor: BLS May 2024 national median for electricians = $62,350/yr (≈ $30/hr for a 40-hr week)
- You're targeting a journeyman with 4–6 years of experience — above median, so you anchor at the 60th–65th percentile. Round to $66,000/yr as your midpoint.
- Apply a ±15% spread buffer: Min = $56,100 / Midpoint = $66,000 / Max = $75,900
This is a worked example using a round spread buffer to illustrate the method — your actual band should be calibrated to your local OEWS figure and your specific experience tier.
Now you have something to offer against: you can open at the midpoint for a strong candidate, at the min for an entry-level journeyman, or at max for someone who will immediately run a crew. The candidate who counters at $31/hr ($64,480/yr) lands comfortably inside your band — and you can say so, which ends the negotiation.
This is exactly what a salary-band generator does: it converts BLS percentiles into an offer-ready min/midpoint/max without the spreadsheet archaeology. Learn how to build the full structure in our guide to how to build a salary band for trades, and see our breakdown of which percentile you should anchor to for different experience levels and market conditions.
The Anatomy of a Trade Offer Letter That Closes
Once your band is set, how you present it matters as much as the number itself. A trade candidate — especially one fielding multiple offers in a market growing at +9% for electricians and +8% for HVAC (BLS OOH, 2024–34 projections) — reads an offer letter in about 90 seconds. Here's what needs to be in it.
1. A clear, specific title and classification. "Journeyman Electrician — Residential Service" is infinitely better than "Electrician." It signals you know what the role actually is, and it anchors the wage to a specific scope of work. If you're still working on role definitions, our trade job descriptions guide covers exactly how to write them — or you can start with a ready-made template from our Trade Job Description Pack, which includes SOC-coded descriptions for the most commonly hired trade roles.
2. The wage, presented as a range with your opening offer marked. Don't bury a range in a footnote. State it directly: "This role is budgeted at $62,000–$72,000/yr based on experience and market data. Based on our conversation, we're offering $66,000." This framing does three things: it shows you have a system, it closes off the expectation that you'll go higher than your max, and it makes the candidate feel like the offer was reasoned rather than pulled from thin air.
3. Benefits and total compensation, itemized. In a competitive market, an offer letter that lists only base pay is leaving comp on the table. Spell out: health insurance contribution (dollars per month, not just "we offer health insurance"), any retirement match, paid time off, tool allowance or per diem, and license/certification reimbursement. These line items often represent thousands of dollars in annual value that never appear in a wage comparison.
4. A start date and a short response window. "We'd love to have you start on [date]. Please let us know by [date — typically 3–5 business days]." Vague timelines invite candidates to use your offer as leverage with a competing employer. A firm but reasonable window respects the candidate while protecting your timeline.
5. A brief, human closing. Not legal boilerplate. One sentence: "We're genuinely excited about what you'd bring to the crew and look forward to hearing from you." Candidates remember tone.
How to Write a Trade Job Offer That Survives a Counter
Even a well-structured offer gets countered occasionally — and that's not always a bad sign. Here's how to handle it without losing the hire or your margin.
Know your walk-away before you send. Your salary band's max is your walk-away. If a candidate counters above it, you have two clean options: explain honestly that the max is the max and why (labor budget, pay equity with current crew, internal band integrity), or decline to proceed. What you should never do is blow past your band ceiling because you're tired of interviewing — that creates internal equity problems and sets a precedent. For a real-dollar look at what a bad hire actually costs when you do overpay or rush a decision, see our breakdown of the cost of a bad skilled-trades hire.
Respond to a counter with data, not just dollars. If a candidate counters at $31/hr and your midpoint is $30/hr, don't just say "we can do $29.50." Say: "Our offer is anchored to BLS May 2024 data for this occupation in [your state/metro], which puts the median at [figure]. Our band runs from [min] to [max], and our opening offer of [amount] reflects your experience level and where you land in that range." Candidates who are negotiating in good faith respect specificity. Candidates who are fishing for any number they can get will often drop the counter when they realize you have a structure.
Non-wage levers are real. If you're genuinely at your wage ceiling, signing bonuses, an accelerated 90-day review with a defined raise trigger, an extra week of PTO, or a tool allowance can close a gap without permanently inflating your payroll. State these explicitly in writing — a verbal promise doesn't survive onboarding.
The Fastest Way to Get Your Band Right Before the Next Offer
The hardest part of all of this — in practice — is Step 1: getting the right wage anchor for the right trade occupation in the right geography, without spending two hours navigating BLS CSV files.
That's the problem SkilledMarkets is built to solve. Our platform pulls BLS OEWS + O*NET data by trade SOC code × geography × experience percentile and outputs an offer-ready salary band — min, midpoint, max — so you can go from "we're making an offer Friday" to "the band is built" in minutes, not an afternoon.
You can explore the platform with a free trial and run your first band for the trade and metro you're hiring in right now. Or if you want to get an offer letter in front of a candidate this week without waiting, start with a ready-made, SOC-coded job description from our Trade Job Description Pack — it's the fastest way to get the role defined so the wage anchor makes sense.
The next counter doesn't have to cost you the candidate. It just needs a number you can defend.
This article includes information from O*NET OnLine, developed by the U.S. Department of Labor, Employment and Training Administration. O*NET is a registered trademark of the U.S. Department of Labor, Employment and Training Administration.
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.


