How to calculate your real margin (the arithmetic, worked in the open)
“Margin” is the vaguest word in the trades. It gets said in every shop and computed in almost none. Ask ten owners what theirs is and you’ll get a shrug, a guess, or a number that turns out to be markup on parts. So here is the whole calculation, done out loud, with every division on the page. No benchmark report, no gate, no jargon. The math fits on the back of an invoice.
I’ll run it on Northside Comfort, our labeled sample shop (a fictional HVAC and plumbing business Guidepost reads for demonstrations). Every Northside figure below is sample data, not a real customer.
What margin actually is
Margin is what’s left after you pay to earn the money. There are two numbers, and shops mix them up constantly.
Gross margin is revenue minus the direct cost of the work: parts and field labor. Net margin is what’s left after overhead too: rent, insurance, the office, the software. Gross tells you whether the jobs make money. Net tells you whether the business does.
Here is Northside’s sample month, pulled the way Guidepost pulls it, revenue from Jobber, costs from QuickBooks:
- Revenue: $22,000
- Parts and materials (QuickBooks): $6,600
- Field labor and payroll taxes (QuickBooks): $7,000
Direct cost is $6,600 + $7,000 = $13,600. So gross profit is $22,000 − $13,600 = $8,400, and gross margin is:
$8,400 ÷ $22,000 = 38.2% (sample)
Now overhead. Northside’s sample month carried $4,500 in rent, insurance, office, and software. Net profit is $8,400 − $4,500 = $3,900, and net margin is:
$3,900 ÷ $22,000 = 17.7% (sample)
Two numbers, both real math, both computed from rows you already have. A shop that only ever eyeballs the bank balance never sees either one.
Per job, so you can feel it
Whole-month percentages are abstract. Per-job is where an owner actually decides things.
Northside completed 44 jobs in the sample month. Average ticket is $22,000 ÷ 44 = $500. Gross profit per job is $8,400 ÷ 44 = $190.91 (sample). That’s the number that tells you whether the next dispatch is worth the truck.
And it’s the number callbacks quietly eat. Dwight Okafor has 3 callbacks in the sample month. A callback is a truck roll and roughly two hours of a tech’s day with no invoice at the end, call it $220 in the sample. Three of them is 3 × $220 = $660. Against $8,400 of gross profit, that’s:
$660 ÷ $8,400 = 7.9% of the month’s gross profit gone to redos (sample)
Same math, everywhere it’s tracked. There’s a fuller version in how callbacks eat your margin.
The gotchas that make the number lie
The arithmetic is easy. The inputs are where shops fool themselves.
Overhead you forgot to count. If your “labor” line is just wages and skips payroll taxes, workers’ comp, and the phone the tech carries, your gross margin reads high and your net gets a nasty surprise at tax time. Count the fully loaded cost of a body in a truck, not the hourly rate.
Concentration you didn’t price in. A margin computed across the whole shop can hide the fact that one person is carrying it. In the sample, Tina Alvarez ran nearly all of Northside’s plumbing revenue; when she was out a week, plumbing fell and the blended margin barely twitched. That’s the primary-tech caveat spelled out in the six numbers every shop should watch: a healthy average can sit on top of a single point of failure.
Markup mistaken for margin. Marking parts up 40% is not a 40% margin. The markup lives on one line; the margin is the whole shop after labor and overhead. Keep them apart or the number means nothing.
Compare it to you, not to a chart
The temptation with any margin number is to ask “is that good?” and go hunting for an industry benchmark. Skip it. Your margin is worth watching against your own last three months, not against a shop with different pay, a different market, and a different truck payment.
Which raises the honest question: when has your margin actually moved, and when is it just noise? On a shop Northside’s size, small swings are noise. Say net margin reads 17.7% one month and 15.9% the next. That’s $3,900 against $3,500, a gap of $400. One displaced job at the $500 average ticket, or one heavier parts order, erases it. A swing under about 2 points on a $22,000 month is the arithmetic breathing, not a trend. Three months moving the same direction is the trend. Watch the line, not the dot.
What your field-service software can’t tell you
Here’s the part that catches people. You cannot compute real margin inside Jobber or Housecall Pro alone.
Your field-service software knows revenue and job counts cold. It does not know your parts cost, your loaded labor, or your overhead. Those live in QuickBooks. Margin is a subtraction across two systems, and if you only ever open one of them, the number you’re quoting is the top line wearing a margin’s clothes. This is the same seam behind why Jobber and QuickBooks never quite agree: the jobs are in one place, the money is in another, and nobody stitches them by Monday.
Nobody’s hiding this from you
ServiceTitan publishes trades benchmarks, but the substance tends to sit behind a webinar registration or a report you trade an email for. That’s an observation, not a knock; gated benchmarks are a fine way to run a marketing team. It’s just worth saying plainly that the calculation above is not proprietary and never was. Revenue, minus direct cost, minus overhead, divided out. You can run it on a napkin, and now you can.
The catch isn’t the formula. It’s doing it every month, from two systems, without setting aside an evening. That’s the whole job Guidepost took: it reads Jobber or Housecall Pro against QuickBooks, works the subtraction, and writes you a short Monday note when your margin actually moves, with every figure traced back to the row it came from. If you want that arithmetic run for you instead of by you, get early access and I’ll email you when a spot opens. Bring your worst month; the math doesn’t flinch.
See it watch your numbers
Guidepost reads your Jobber, Housecall Pro, and QuickBooks numbers and tells you what needs attention, in plain English. Want to see the output first? Look at a sample digest.