How to Calculate Effective Labor Rate for an Auto Repair Shop
You know your posted rate to the dollar. It is on the wall, in the estimating software and on every invoice you have written this year.
Now answer a different question: across every hour you sold last month, what did an hour actually collect?
Most owners answer with the posted rate, because nothing they look at has ever suggested otherwise. In the worked sample shop used throughout this cluster, the posted rate is $145.00 and the answer is $138.91.
That is not a rounding difference. It is $6.09 an hour, and across 141.3 hours sold it is $861 that exists in no expense category, in no P&L line, in nothing you could have found by looking harder at your books. It never arrived, so it was never recorded as leaving.
The Formula
Effective labor rate = (total labor billed − total labor discounts) ÷ total labor hours sold
Three inputs. Two of them you almost certainly have. The third — discounts, recorded as their own column rather than absorbed into a lower price — is the one that is usually missing, and it is missing for a reason we will come back to.
One note on the denominator that catches people out: hours sold, not hours worked. You are asking what an invoiced hour collected. If you divide by clock hours instead you get labor revenue per hour present, which folds technician efficiency into the same number and makes it impossible to tell a rate problem from a productivity problem. Those are two separate diagnoses with two separate fixes.
A Worked Month
Here is a month built from round numbers so the mechanics are visible. Assumptions are mine and labelled.
| Work type | Hours sold | Rate billed | Labor revenue |
|---|---|---|---|
| Standard retail work | 88.0 | $145.00 | $12,760.00 |
| Fleet account (contracted) | 26.0 | $128.00 | $3,328.00 |
| Warranty / internal | 6.0 | $105.00 | $630.00 |
| Total | 120.0 | $16,718.00 |
Then the discounts, which were given as goodwill and never posted anywhere:
| Discount given | Amount |
|---|---|
| Diagnostic comped on 4 jobs (0.5 hr each, not invoiced) | −$290.00 |
| Two tickets rounded down to a flat figure | −$185.00 |
| Long-standing customer, 10% off labor | −$143.00 |
| Total | −$618.00 |
Effective labor rate = ($16,718.00 − $618.00) ÷ 120.0 = $134.17
Against a posted $145.00, that is a $10.83 gap — 7.5%. Over a year at this volume, roughly $15,600.
One note on the comped diagnostic hours: they never went onto a ticket, so they are not in the 120 hours sold. Treating them as a discount rather than as unsold hours is the harsher of the two readings — it charges the write-off against the rate you did collect, which is the point of the exercise. If you would rather see them as capacity you gave away, put the 2 hours in the denominator and take the $290 back out of discounts instead — the rate comes out at $134.34, near enough the same answer. What matters is that you pick one treatment and keep it, so the figure is comparable month to month.
And notice where the gap came from. The discounts are the smaller half. The larger half is the 32 hours sold at a rate below posted, which nobody in the building thinks of as a discount at all, because it is “the fleet rate” and “warranty” — two things that feel like categories rather than decisions.
The Five Leaks, In the Order They Usually Matter
1. Fleet and contracted rates that were never revisited. A fleet rate set three years ago against a posted rate that has risen twice since. This is normally the largest single component and the easiest to fix, because fleet contracts have renewal dates and the customer is expecting a conversation.
2. Comped diagnostic time. Half an hour written off to “look at it” before the job is sold. Reasonable once. Standing policy by accident, and invisible because it was never on a ticket to begin with. If you comp diagnostic time, decide it deliberately and log it as a discount so you can see the annual cost of the policy.
3. Quoted hours that undershot. A job quoted at 2.5 and taking 3.1, billed at 2.5 because that is what was agreed. Correct behaviour with the customer, but the 0.6 is real. If a particular job type does this repeatedly your book time for it is wrong, and that is a fixable estimating problem rather than a rate problem.
4. Round-number tickets. $942.68 becomes “call it $900.” The $42.68 is a labor discount and almost never gets written down as one, because rounding down feels like courtesy rather than cost.
5. Percentage discounts on labor. Visible, at least, but often given at the counter without ever being totalled at the end of the month.
Notice that four of these five never touch an expense account. That is the whole problem: the erosion is entirely on the revenue side, entirely in small pieces, and entirely invisible to anything that reports totals rather than rates.
Why Recording Discounts Separately Is Harder Than It Sounds
The reason most shops cannot calculate this is not arithmetic. It is that a discount given at the counter is a slightly uncomfortable moment, and the natural way to record it is to simply write a smaller number. The invoice says $900 and everyone moves on.
Recording $942.68 with a −$42.68 discount column takes four more seconds and produces an entirely different year. It is the same information; it is just kept in a form you can add up later. The difference between a shop that knows its effective rate and one that does not is almost always that single column.
What to Do With the Number
Once you have it, track the gap rather than the rate — the gap is comparable across time even when you change the posted rate, and it is the thing you can act on.
- Under 3%. Tight. Leave it alone and look at technician efficiency instead, which is where the larger money usually sits.
- 3% to 8%. Normal, and worth one afternoon. Sort the month’s discounts largest first; the top three lines will usually explain most of it.
- Above 8%. Structural. Something has become policy without being decided — nearly always a stale fleet rate or comped diagnostic time. Find it before considering a rate rise, because a rate rise will not touch either.
That last point is worth sitting with. A $10 increase on the wall lifts your retail hours by $10 and your contracted fleet hours by nothing. If a third of your hours are fleet, you have just bought a $6.67 average increase, with all of the customer friction of a $10 one. The leaks are free to fix and cost you no goodwill at all.
Effective labor rate is one of two halves of a repair shop’s margin. The other half is priced at the parts counter and works completely differently — the full picture is in tracking parts and labor profit separately.
Featured on ReadySheetGo
Auto Repair Shop & Mobile Mechanic Job Tracker — $16.99
Eleven linked tabs and 11,763 working formulas, with 53 closed repair orders pre-filled so the effective labor rate calculation above is already running when you open it.
Settings holds your posted rate, your fleet rate, your target gross margin and your minimum parts margin. Repair Orders gives discount its own column on all 200 rows — the column that makes this calculation possible — alongside parts sold, parts cost, hours, rate, sublet, supplies, travel and rework. Shop Stats returns your effective labor rate, the gap against your posted rate, and that gap multiplied by every hour you sold, so the leak reads in dollars rather than cents. Jobs still in the bay are held out of the calculation as work in progress, because half-logged hours would drag the rate down for no reason.
Also inside: Technicians setting hours billed against hours actually worked; Declined Work with follow-up dates; Parts Inventory priced by your own matrix; Vehicles by VIN with service intervals; Monthly & Trends across twelve rolling months and shop against mobile; and a Dashboard of twelve figures including effective labor rate, parts and labor margin separately, average repair order and comeback rate.
Works in Excel and Google Sheets. No macros, no add-ons.
Get the Auto Repair Shop & Mobile Mechanic Job Tracker →
Frequently Asked Questions
What is the formula for effective labor rate?
Total labor dollars billed, minus every discount given against labor, divided by total labor hours sold. Not hours worked — hours sold. The result is what a sold hour actually put in the till. In the worked shop on this page, a $145.00 posted rate returns a $138.91 effective rate across 141.3 hours sold.
Should hours worked or hours sold go in the denominator?
Hours sold. Effective labor rate answers 'what did each hour I invoiced actually collect', so the denominator is billed hours. Putting hours worked in the denominator answers a different and also useful question — labor revenue per clock hour, which folds in efficiency — but it is not the effective labor rate and mixing the two makes benchmark comparisons meaningless.
What is a good effective labor rate?
There is no universal dollar figure because rates vary enormously by region, specialism and whether you carry fleet accounts. The useful benchmark is internal: the gap between your posted rate and your effective rate, measured as a percentage. Under about 3% is tight. Above 8% means something structural is happening — usually undiscounted fleet work billed at a rate nobody ever revisited, or comped diagnostic time that has quietly become policy.
Does raising my posted labor rate fix a low effective rate?
Only partly, and usually by less than you expect. Discounts given as a percentage scale up with the rate, so they take a bigger bite. Fleet accounts on a fixed contracted rate do not move at all. And comped diagnostic time is unaffected by the rate on the wall. If a large share of your gap comes from fleet or comped hours, a $10 rate rise can move the effective rate by $6 or less. Fixing the leaks first is cheaper and does not cost you a single customer.