As accountants for plumbers, here’s a situation we see more often than not…
As accountants for plumbers, here’s a situation we see more often than not. You’re booked out three weeks. Both trucks are running. The phone rings all day. Then the year-end numbers come back, and you’re staring at a 3% net margin.
The thing is, busy and profitable are two completely different measurements. A lot of plumbing contractors run on 2 to 8% net margins their entire careers and never understand why, because the number they’re missing isn’t on their overall P&L. It’s hiding inside individual jobs.
A healthy plumbing company should be hitting 60 to 62% gross margin on jobs and 20 to 35% net at the end of the year, and the only way to know if you’re on track is to know what each job actually cost you to complete.
That’s what job costing for plumbers does. It tracks labor, materials, and a fair share of overhead on every ticket so you can see the real margin, not just the revenue.
Here’s how to build that system without turning yourself into an accountant.
Labor is the highest cost on most plumbing jobs, and it’s the one most owners get wrong.
Loaded cost means everything a tech costs you per hour, beyond the wage. Add payroll taxes, workers comp, health insurance, PTO, training time, and the hours they sit in traffic between calls. A tech earning $35 an hour costs you $50 to $60 an hour once you load it up.
Now do this for each tech individually. Averaging your whole crew into one blended rate hides the truth.
Let’s look at an example. This scenario comes from a plumbing job costing breakdown published by a bookkeeping firm that works with contractors. A customer calls with a clogged kitchen drain. The dispatcher sends the master plumber because he’s closest. The job takes 1.5 hours and bills at $350. His loaded cost is $150 an hour. That’s $225 in labor before you count the truck roll, parts, or overhead.
That “high-margin service call” earned 36% gross margin. Sending an apprentice-journeyman team earns 55% on the same drain.
Our Tip: Post each tech’s loaded hourly cost where your dispatcher can see it. Routing decisions become margin decisions the moment someone assigns the truck.
Every job gets a number. Every dollar that touches the job gets tagged to that number.
That includes:
Truck stock is the leak everyone forgets. Those parts came from somewhere, and if they never land on a job, they land on your P&L as a mystery expense. Have techs scan or list parts used on every ticket.
Yes, it takes 90 seconds. It also protects your margins.
This step separates real job costing from wishful thinking.
Your office staff, truck payments, insurance, licensing, marketing, and software all get paid out of job revenue. Skip the allocation and every job looks better than it is. One contractor accounting analysis walks through a job with $110,000 in revenue and $75,000 in direct costs. The $35,000 gross profit shrinks to $5,000, or even a loss, once overhead gets applied properly.
The simple method works fine for most shops:
If your overhead runs $300,000 a year and your crew bills 6,000 hours, every billable hour carries $50 of overhead. A 4-hour job carries $200 before you touch profit.
One thing to note is that overhead quietly eats margin at scale. A $1.5M plumbing company with 50% gross margins and 46% overhead nets 4%. The same company with 35% overhead nets 15%. Same jobs, same pricing, wildly different outcome.
A single blended margin across your whole business hides where money gets made and where it gets destroyed.
Industry benchmarks for plumbing gross margins by service line look roughly like this:
Tag every job by category in your software. Within 60 days you’ll see which work funds your business and which work funds your builder’s business. Once you know, you can price accordingly, chase more of the good work, and walk away from bids that only look good on the surface.
Job costing done once a year is an autopsy. Job costing done weekly is a checkup.
Every week, pull completed jobs and compare estimated hours, materials, and margin against actuals.
Look for patterns:
The payoff here is real. Small pricing and efficiency gains compound fast. Moving from 48% to 51% gross margin on a $1,200 average ticket adds $300 to $500 per job. Across 160 jobs a month, that’s several thousand dollars in extra monthly profit, from decisions you made before the truck left the shop.
The first month of job costing usually delivers some uncomfortable news. A favorite service line loses money. A longtime customer costs more than they pay. Your best tech is being wasted on drain snakes.
Good. Now you can act on facts instead of vibes.
Raise prices where the math demands it. Re-route your dispatch by loaded cost. Drop the work that only pays in exposure. Every one of those moves comes straight from the numbers you now track.
We help small business owners in the trades build exactly this kind of system, then we stick around all year to make sure the numbers keep telling you the truth. If you want to know whether your jobs are actually making you money, get in touch with us here.
We promise the conversation will be less painful than a 3% net margin.
Until next time!
Adam Traywick, CPA is the President and founding CPA of Adam Traywick, LLC, a Adam Traywick CPA small-business accounting firm. He has over 20 years of experience helping small business owners across home-services trades, hair salons, real estate, and insurance agencies optimize taxes, run cleaner books, and avoid the surprises that come from once-a-year accountants.