How to Tell If Your Labor Rate Is Covering Its Cost

Why this matters

A labor rate is a bet, and the bet has two halves. The first half is what an hour of a tech's time costs you fully loaded, which most shops calculate once and then trust. The second half is how many of the hours you pay for actually get invoiced, and almost nobody measures that after the fact. A rate built on the assumption that three-quarters of paid hours are billable will quietly fail if only half of them are, and it will fail without any single job looking wrong. Every ticket hits its target margin, the year still comes up short, and the owner concludes the problem must be volume.

This is the back-check, not the build. Building the burdened rate is a forward calculation from wage, taxes, insurance, vehicle, and overhead. This article is the audit that tells you whether the rate you built is landing.

The test in one sentence

Over a closed period, divide the hours you actually invoiced by the hours you actually paid for, and compare that ratio against the one your rate was built on. That comparison is the entire test, and the size of the gap tells you how much of your labor cost the rate is failing to recover.

Step 1: Use a closed period, and use a real one

Pick a quarter that is fully invoiced and reconciled. Not the current month, because the billing lags the work and you will count paid hours against an incomplete set of invoices, which manufactures a gap that does not exist. Not a projection, because a projection is the assumption you are trying to test.

Thirteen weeks is the shortest window worth using for a service tech. A single month contains too few jobs and too much seasonality to be readable.

Step 2: Count paid hours, all of them

Everything you write a check for. Scheduled hours, overtime, paid time off, paid training, paid travel, the two hours a tech sat at a supply house. If it is on payroll, it is in the denominator. The most common error at this step is starting from scheduled hours and forgetting that PTO and overtime are both paid and both real.

If a tech is salaried, use the hours actually worked plus paid absence, not a nominal 40 per week.

Step 3: Count billed hours, at what you actually collected

The numerator is labor hours that appeared on an invoice a customer paid. Three deductions matter and all three are usually missed.

Hours logged on a job that never made it onto the invoice come out. Hours written off as a courtesy or absorbed on a callback come out. And if you routinely discount, the discounted portion has to come out too: 312 invoiced hours with an 8% average discount on labor collects like 312 x 0.92 = 287 hours, so use 287.

Run the raw number first and the discount-adjusted number second, because the difference between them is a separate finding about your discounting habit.

Step 4: Compute the recovery ratio and compare it to your assumption

Billed hours divided by paid hours is the recovery ratio. Now find the ratio your rate assumed. It is either written in whatever you used to build the rate or it is not written anywhere, which is itself the answer to why nobody noticed the gap.

If you genuinely do not know what your rate assumed, start from 65% for a residential service tech and correct it from your own first measurement. Service work carries more drive and more short visits than install work, so an install crew commonly lands higher and a diagnostic-heavy service tech lower. Do not adopt someone else's ratio as a target. Measure yours, then decide whether it is movable.

The comparison has one useful form. Divide your actual ratio by your assumed ratio to get the share of intended cost the rate is recovering, then invert it to get the rate increase that would close the gap at today's billable ratio.

Step 5: Split the gap into its three causes, because they have three different fixes

The unbilled hours are not one thing.

  • Structural non-billable time. Drive between jobs, truck stocking, shop time, training, meetings, PTO. Real, largely unavoidable, and the reason a recovery ratio is never 100%. This bucket gets recovered through the rate, not eliminated.
  • Leakage. Work performed on a job that never got invoiced: hours logged and dropped, scope done and not added, warranty and callback time absorbed silently. This is pure loss. You paid for it, a customer received it, and nothing was billed.
  • Idle. Paid hours with no work assigned. A scheduling and demand problem, not a rate problem.

Sizing all three separately is the whole point of the step, because the wrong response to a leakage problem is a rate increase, and a rate increase applied to a shop with a leakage problem raises the price of the work you do bill while continuing to give away the rest.

Step 6: Pull the cheapest lever first

Rank the three buckets by how much of each is recoverable at what cost. Leakage almost always goes first: it is a process fix, it needs no customer conversation, and closing it raises recovery without touching price. Idle is second, and it is a dispatch and demand question. Structural time is third and largely immovable, which is exactly why it belongs in the rate.

Only after you have taken the recoverable hours back do you size the rate change, because otherwise you will raise the rate by enough to cover waste you were about to eliminate, and then quietly become expensive.

A worked audit: one tech, one quarter

Thirteen weeks, one service tech, all invoices settled.

Paid hours. Scheduled 40 hours per week for 13 weeks is 520 hours. The tech took 40 hours of PTO, which is inside that 520 because it is paid. Overtime added 26 hours. Total paid hours: 546.

Billed hours. Labor hours appearing on paid invoices: 312.

Recovery ratio. 312 / 546 = 57.1% of paid hours billed.

The rate was built assuming 75% of paid hours would be billable. That assumption is optimistic for a residential service tech and is a finding on its own, but take it at face value for the comparison. Actual 57.1% against assumed 75% means the rate is recovering 57.1 / 75 = 76% of the labor cost it was designed to recover. To cover that same cost at today's billable ratio, the rate would need to be 75 / 57.1 = 1.31 times what it is, about 31% higher.

Before touching the rate, split the gap. Paid hours minus billed hours is 546 - 312 = 234 unbilled hours in the quarter:

Bucket Hours Share of the 546 paid hours
Drive between jobs and to suppliers 96 17.6%
PTO 40 7.3%
Shop time, stocking, meetings, training 44 8.1%
Leakage: job hours logged, never invoiced 30 5.5%
Idle: paid, scheduled, no work assigned 24 4.4%

Those five sum to 234 hours, which reconciles to the gap.

The reading: drive is the largest single non-billed bucket at 96 of 546 paid hours, but most of it is structural in a residential service model and belongs in the rate rather than in an improvement plan. Leakage is only 30 of 546 paid hours, about 5.5%, and it is the one bucket that is pure loss, because the cost was incurred and the customer got the work. It is also the cheapest to fix.

What the fixes are worth. Close leakage entirely and cut idle in half, and billed hours go from 312 to 312 + 30 + 12 = 354. Recovery becomes 354 / 546 = 64.8%. The remaining gap against the 75% assumption then needs a rate of 75 / 64.8 = 1.157 times today's, about 16% higher, rather than the 31% the raw audit called for. Half the required increase came out of process rather than price.

Then the discount check. If that 312 hours carried an average 8% labor discount, the collected equivalent is 287 hours and true recovery is 287 / 546 = 52.6%, not 57.1%. Discounting is silently doing a fifth of the damage here, and it is invisible on every individual invoice because each one looked like a small concession.

What changes the answer

Role. Run this per role, not per shop. An install crew with two long jobs a week and a service tech with five short calls a day will not share a recovery ratio, and averaging them hides both.

Season. One quarter tells you about that quarter. A shop with a real peak and a real slow season should run the audit on both and set the rate against the blended year, otherwise a peak-quarter measurement will make the rate look adequate right up until the slow quarter arrives.

Owner-on-the-tools. If the owner runs calls, decide in advance whether owner hours are in the denominator. Both choices are defensible. Mixing them between periods makes the trend meaningless.

Apprentices. A first-year tech should have a lower recovery ratio and a rate built to expect it. Judging an apprentice against a senior tech's ratio produces a personnel conversation where a pricing decision belongs.

How to verify you got this right

Reconcile both sides against something you already trust. Total paid hours across all techs for the quarter, times average pay, should land close to the payroll figure on your books. Total billed labor hours times your rate should land close to the labor revenue line. If either side is off by more than a rounding difference, your hour counts have a mapping error and the ratio built on them is not usable yet.

Then re-run the audit one quarter after you deploy any fix, and check the direction and the size. In the example, closing leakage should move recovery from 57.1% toward roughly 64.8%. If it moves by far less, the leakage hours did not actually get invoiced, they moved to a different unbilled bucket, and you have found where the work is really going.

References

  • U.S. Small Business Administration (SBA), pricing and cost recovery guidance for service businesses
  • IRS, employer payroll tax and employee cost concepts (Publication 15 concepts)
  • Trade-standard practice for billable-hour and labor-recovery measurement
  • See related: Fully Burdened Labor Rate Calculation, Labor Burden: The Real Cost of an Employee, Overhead Recovery: Are You Charging Enough, How to Read Your Own Job Costing Data