How to Know If You're Charging Enough: A Contractor's Guide to Margins
Most contractors price by gut feel. Here are the actual margin benchmarks for your trade, the signs you're undercharging, and how to use data to justify a price increase.
On this page
The Question Nobody Wants to Answer
Here's the uncomfortable truth about pricing in home services: most contractors set their rates once, maybe adjust them every couple of years, and spend the rest of the time hoping it's enough.
You know the feeling. You look at your bank account and things seem fine. Trucks are rolling, phones are ringing, crews are busy. But at the end of the year, you wonder where all the money went. Revenue was up. So why doesn't it feel like it?
The answer, almost always, is margins. Not revenue. Margins.
Revenue is vanity. Margin is sanity. You can do $2 million in revenue and take home less than a guy doing $800K, if his cost structure is tight and yours isn't.
This guide gives you the actual numbers to compare against, broken down by trade. Not generic "small business" advice. Real benchmarks for plumbers, HVAC techs, electricians, roofers, and general contractors. Plus the external data signals that tell you when the market is forcing your margins down, whether you realize it or not.
The Markup vs. Margin Trap
Before we get to benchmarks, we need to clear up the single most expensive math mistake in contracting.
Markup and margin are not the same thing. Confusing them costs contractors thousands of dollars every year.
Here's the difference:
- Markup is how much you add on top of your cost.
- Margin is what percentage of the final price is profit.
Let's say a job costs you $1,000 in labor and materials. You apply a 50% markup. That means you charge $1,500.
Sounds like you're making 50%, right? You're not.
Your margin on that job is 33%. Not 50%.
Here's the math:
Revenue: $1,500
Cost: $1,000
Profit: $500
Margin = (Revenue - Cost) / Revenue x 100
Margin = ($1,500 - $1,000) / $1,500 x 100
Margin = $500 / $1,500 x 100
Margin = 33.3%
You marked up 50%. But your actual margin is only 33%. That's a 17-point gap between what you think you're making and what you're actually making.
Now multiply that across every job you do in a year. If you're running $1.5 million in revenue and you think you're at 50% margin but you're actually at 33%, that's a $255,000 difference in gross profit that exists only in your head.
Here's a quick reference:
| Markup Applied | Actual Margin |
|---|---|
| 25% | 20% |
| 33% | 25% |
| 50% | 33% |
| 75% | 43% |
| 100% | 50% |
The takeaway: If you want a 50% gross margin, you need a 100% markup. Not a 50% markup. If you've been using markup and margin interchangeably, you've been undercharging on every single job.
What "Healthy" Actually Looks Like
Generic business advice says "aim for 50% gross margin." That's useless for contractors because the right number depends entirely on your trade. A plumber and a general contractor have completely different cost structures, and comparing them to the same benchmark is like comparing a service call to a ground-up build.
Here are the real benchmarks, sourced from industry consultants, trade associations, and financial data across thousands of home services companies. (For a deeper comparison of how these trades differ beyond just margins, see HVAC vs Plumbing vs Electrical: How Financial Patterns Differ by Trade.)
Gross Margin Benchmarks by Trade
| Trade | Healthy Range | Struggling | Notes |
|---|---|---|---|
| Plumbing | 60-62% | Below 50% | High labor skill, lower material cost relative to ticket |
| HVAC | 50-55% | Below 40% | Equipment-heavy installs compress margins vs. service |
| Electrical | 50-55% | Below 40% | Similar profile to HVAC; code compliance adds value |
| General Contracting | 35-45% | Below 25% | Material-heavy, subcontractor costs reduce gross margin |
| Roofing | 40-50% | Below 30% | Weather-dependent, material costs are a larger share |
Net Margin Benchmarks
Gross margin tells you how profitable your jobs are. Net margin tells you how profitable your business is after overhead, marketing, insurance, trucks, office costs, and everything else.
Most home service companies net 5-12%. That's the reality for the average contractor.
Well-run operations hit 15-20%. Same trades, same markets, same customers. The difference is cost structure understanding.
The gap between 8% net and 18% net on a $1.5 million company is $150,000 per year. That's not a rounding error. That's a life-changing difference in take-home pay.
Cost Structure Targets
If your margins are off, the fix is somewhere in this breakdown:
| Cost Category | Target % of Revenue | What to Watch |
|---|---|---|
| Labor (direct) | 25-35% | Billable hours, overtime, crew productivity |
| Materials | 15-25% | Supplier pricing, waste, theft, trade-specific |
| Overhead | 20-30% | Rent, insurance, vehicles, office, admin staff |
| Marketing | 5-10% | Higher end for growth-mode companies |
| Net Profit | 10-20% | What's left after everything |
If your labor is eating 45% of revenue, your margins will never be healthy regardless of what you charge. If materials are running 35%, you either have a waste problem, a theft problem, or you're in a trade where material costs are genuinely high and you need to price accordingly.
Average Ticket Benchmarks
Your average ticket tells you whether your pricing is in the right ballpark for your trade:
| Trade | Service Call | Install/Replacement |
|---|---|---|
| Plumbing | $250-500 | $2,000-8,000 |
| HVAC | $150-400 (repair) | $5,000-15,000 (system) |
| Electrical | $200-500 | $1,000-5,000 |
If your average service ticket is $180 as a plumber, you're leaving money on the table. Period. The market supports $250-500 for standard service calls, and your pricing should reflect the value and expertise you bring.
The 5 Signs You're Undercharging
You don't need a consultant to tell you your pricing is off. Your own QuickBooks data will tell you, if you know what to look for.
1. Your Gross Margin Is Below Your Trade Benchmark
This is the most direct signal. Pull your gross margin from your P&L (Revenue minus Cost of Goods Sold, divided by Revenue). Compare it to the benchmarks above.
If you're a plumber at 48% gross margin, you're in the "struggling" zone. If you're an HVAC company at 38%, same story. The benchmark exists for a reason: companies below it consistently have cash flow problems, can't invest in growth, and burn out their owners.
2. Your Average Ticket Is Declining Over Time
This one sneaks up on you. Revenue might be flat or even growing, but if your average invoice amount is dropping quarter over quarter, you're doing more work for less money per job.
Common causes: discounting to win work, taking on smaller jobs to fill the schedule, not raising prices to match rising costs. Whatever the reason, a declining average ticket is a pricing problem disguised as a volume problem.
3. Revenue Is Growing But Profit Is Flat (or Declining)
This is the classic margin compression signal. You're busier than ever. More trucks, more jobs, more invoices. But your bank account doesn't reflect it.
If revenue grew 15% and net profit grew 2%, your costs are growing faster than your prices. You're scaling a broken model. Every new dollar of revenue is worth less than the last one.
4. Your Booking Rate Is Above 90%
This one is counterintuitive, and it's the insight that makes contractors stop and think.
If nearly everyone who calls you says yes to your price, you're too cheap.
Think about it. A healthy booking rate for home services is 70-85%. That means some people hear your price and say no. That's normal. That's healthy. It means you're priced at a level that reflects your value.
If your booking rate is 92%, you're not winning on quality or reputation. You're winning on price. And you're leaving significant money on the table with every single customer who would have said yes at a higher number.
A 5% price increase with a 90%+ booking rate will almost never cost you enough jobs to offset the additional revenue per job. Do the math: if you do 500 jobs a year at $400 average and raise prices 5% to $420, even if you lose 5% of your jobs (25 jobs), you still come out ahead. 475 jobs at $420 = $199,500 vs. 500 jobs at $400 = $200,000. You're within $500 of the same revenue, working 25 fewer jobs. And in reality, you won't lose anywhere near 5% of your jobs over a 5% increase.
5. Materials as a Percentage of Revenue Is Rising Faster Than Market Costs
If your materials percentage went from 18% to 23% of revenue over the past year, one of two things happened: either material costs rose industry-wide (which we can check with PPI data), or you're absorbing cost increases without passing them to customers.
If the Producer Price Index for your trade's materials rose 3% but your materials percentage rose 5 points, the market didn't do that to you. Your pricing did.
How External Data Tells You When to Raise Prices
Here's where most pricing advice falls short. They tell you to "review your pricing regularly." Great. Based on what?
External economic data gives you objective, defensible reasons to raise prices. Not gut feel. Not "I think costs went up." Actual data that proves it.
Producer Price Index (PPI): Your Material Cost Early Warning System
The Bureau of Labor Statistics tracks producer prices for specific categories, including plumbing fixtures, HVAC equipment, electrical components, and construction materials broadly.
If PPI for your trade's materials rose 5% this year and you didn't raise your prices, your margin dropped by roughly that amount. It's that direct. PPI is one of several leading indicators that predict your next bad month before it shows up in your bank account.
This isn't theoretical. PPI data is published monthly. You can see exactly how much material costs moved industry-wide. If your margins are compressing and PPI is rising, the market is doing it to you. Raise your prices to match.
But here's the more powerful insight: if your margins are compressing and PPI is flat, the problem is internal. You're either taking on lower-margin work, experiencing labor inefficiency, or under-pricing new jobs. That's a different problem with a different fix.
Construction Wages: The Labor Cost You Can't Control
Construction wages rose 4.1% year-over-year nationally according to BLS data. That's not a one-time blip. Wages in the trades have been climbing steadily as the labor market stays tight.
If you haven't adjusted your labor rates in the past 12 months, your margins are being compressed by market forces you can't control. Every tech on your payroll costs more than they did last year. If your prices don't reflect that, the difference comes straight out of your profit.
The Cross-Source Pattern That Reveals Everything
The real power is combining these signals:
| Your Margin Trend | PPI Trend | What It Means |
|---|---|---|
| Dropping | Rising | Market costs are up. Raise prices. You have cover. |
| Dropping | Flat | Internal problem. Labor efficiency, job mix, or pricing. |
| Stable | Rising | You're keeping up. Good. Keep watching. |
| Rising | Flat | You're improving operationally. Nice work. |
This is the kind of analysis that turns "I think I should raise prices" into "material costs rose 4.2% this quarter and my margins dropped 3 points. I'm raising prices 5% effective next month." One is a guess. The other is a business decision backed by data.
The Price Increase Playbook
Knowing you need to raise prices is one thing. Actually doing it without losing customers is another. Here's how contractors who do it well approach it.
1. Raise Prices on New Customers First
This is the lowest-risk move. New customers don't know your old prices. They're comparing you to the market, not to what you charged last year. Update your price book for all new quotes immediately. This alone can move your margins 2-3 points within a quarter without touching a single existing relationship.
2. Use External Data as Your Justification
"We're raising prices because costs went up" is vague and feels arbitrary. "Material costs rose 5% industry-wide this year, and labor costs rose 4%. We're adjusting our rates to reflect current market conditions" is specific, professional, and hard to argue with.
You're not gouging. You're keeping up with the market. Frame it that way.
3. Raise by 5-8% Annually, Not 20% Every Three Years
Small, regular increases are barely noticed. Large, infrequent increases feel like a shock and trigger price shopping. If you haven't raised prices in three years and costs have risen 15% cumulatively, you're going to have a harder conversation than if you'd done 5% each year.
4. Grandfather Maintenance Contract Customers (Temporarily)
If you have service agreement customers, consider holding their rate for one renewal cycle while raising rates for everyone else. Then bring them up to current pricing at their next renewal. This preserves the recurring revenue relationship while still getting to market rates within 12 months.
5. Add Value When You Raise Prices
Pair a price increase with something tangible. Extended warranty on parts. Priority scheduling. A follow-up check included. The price went up, but so did what they get. This reframes the conversation from "you're charging more" to "you're offering more."
6. Track the Impact
After a price increase, watch two numbers: booking rate and average ticket. If your booking rate drops from 88% to 82%, that's healthy. You're still winning plenty of work at better margins. If it drops to 60%, you overcorrected. But that almost never happens with a 5-8% increase in home services.
What Weekly Monitoring Catches
The problem with annual pricing reviews is that margin compression happens gradually. By the time you notice at year-end, you've already lost months of profit. Weekly monitoring catches these patterns early, when they're still small and fixable.
Here's what shows up in weekly data that you'd miss in a quarterly or annual review:
"Your gross margin dropped from 58% to 54% over the past 6 weeks. PPI for plumbing materials rose 4.2% this quarter. The market is getting more expensive. Consider a price increase to protect margins."
That's a $60,000 annual difference on a $1.5M company, caught six weeks in instead of six months in.
"Your average ticket declined from $485 to $420 over the past 8 weeks. Revenue is flat, but you're completing more jobs for less money per job. Review your pricing or upsell strategy."
Without weekly tracking, this looks like "a slow quarter." With it, you can see the trend forming and correct it before it becomes your new normal.
"Revenue is up 12% but gross margin dropped 4 points. Material costs (PPI) are flat. You're either taking on lower-margin work, experiencing labor inefficiency, or under-pricing new jobs."
This is the cross-source pattern that separates "the market did this to me" from "I did this to myself." One requires a price increase. The other requires an operational fix. Without external data context, you can't tell which is which.
"Your booking rate has been above 92% for 4 consecutive weeks. In home services, a booking rate this high typically indicates room for a price increase without meaningful volume loss."
Most contractors would see a 92% booking rate and think "business is great." And it is. But it's also a signal that you could be charging more and still staying busy.
Stop Guessing. Start Knowing.
Pricing by gut feel works until it doesn't. And when it stops working, you don't get a warning. You just look up one day and realize you've been running hard for a year and have nothing to show for it.
The contractors who consistently hit 15-20% net margins aren't smarter than you. They aren't better at their trade. They just know their numbers. They know what healthy looks like for their specific trade, they watch for compression early, and they raise prices based on data instead of waiting until it's painful.
Your QuickBooks already has the data. The question is whether anyone is reading it.
Streett Reports tracks your margins weekly and alerts you when they start slipping. No spreadsheets. No guessing. Just a plain-English report every Monday that tells you exactly where your money is going.
Your first report is free, no credit card required.
See what this looks like for YOUR business
Connect your QuickBooks in 30 seconds. Your first report is free.
Get Your Free Report →