Short answer: a good gross margin for an independent repair shop is roughly the mid 50s to the high 60s, measured as sales minus parts cost, sublet and technician wages, divided by sales. Below 50% the shop is usually underpricing labor, discounting parts, or giving away time it never captured on the ticket. Shops running Pista sit at 68.9% gross margin, and the reason is boring: every ticket is written from real MOTOR labor times and real parts cost, so nothing walks out the door unpriced. Margin is not a mystery number you discover at tax time. It is the sum of a few hundred small pricing decisions your service writer makes each month.
What is gross margin at a repair shop, exactly?
Gross margin is what is left after the direct cost of doing the work. Three things come out of sales: the cost you paid for parts, anything you sublet out, and what you paid technicians to turn the wrenches.
Rent, insurance, your service writer, the software, the coffee, those are not in gross margin. They come out of what is left. That is the whole point. Gross margin tells you how much money each repair order generates to cover the building and everybody standing in it.
So a shop doing $100,000 a month with $27,000 in parts cost and $14,000 in tech pay has $59,000 of gross profit, or 59% gross margin. That $59,000 is what the rest of the business lives on.
Why the blended number lies to you
Here is the trap. A shop can post a perfectly respectable 58% blended margin while half the business is bleeding. Heavy parts jobs with thin markup drag the average down. High labor jobs with no parts prop it back up. The average looks fine and nobody looks closer.
Split it. Look at parts margin and labor margin as two separate numbers, every month. If you only track one number, you will fix the wrong thing. Our reports break the two apart by ticket, by writer and by month so you can see which half is actually sick.
What is a good parts margin for an independent shop?
Parts margin for most independent shops should land in the 40s to low 50s as a percentage of the parts sale. That is not a markup number, that is a margin number, and the two get confused constantly.
- Markup is on cost. A $100 part sold at $180 is an 80% markup.
- Margin is on the sale. That same part is a 44% margin.
Shops lose real money confusing those two. Somebody decides "we run 40%", applies it as markup instead of margin, and the shop quietly runs 28% margin on parts for two years.
The other parts leak is cost drift. You priced the job off a quote from six weeks ago. The part went up. Nobody changed the ticket. When parts pricing flows straight from PartsTech ordering into the estimate, the price on the ticket matches the price on the invoice, and the matrix does the math every time instead of when somebody remembers.
What is effective labor rate and why does it matter more than your posted rate?
Your posted labor rate is the number on the wall. Your effective labor rate is labor dollars collected divided by hours actually paid to technicians. It is the honest one.
A shop with a $180 posted rate and a $128 effective rate is giving away about 29% of its labor. That gap is not theft. It is a hundred small moments: the diagnostic that got discounted to close the sale, the hour of comeback nobody billed, the "while you're in there" the tech did for free, the labor time guessed low because looking it up took too long.
Closing that gap is the fastest margin fix in the shop, because it costs nothing. You are not buying more cars. You are billing the work you already did. That is why MOTOR labor times sit inside the ticket instead of in a separate tab. The time gets looked up because looking it up is now the path of least resistance.
What do the numbers look like side by side?
| Measure | Struggling shop | Healthy shop | Shops running Pista |
|---|---|---|---|
| Blended gross margin | Under 50% | 55% to 62% | 68.9% |
| Parts margin | Under 35% | 40% to 50% | Matrix applied every ticket |
| Effective vs posted labor rate | 25%+ gap | Under 12% gap | Labor times on every line |
| Where the number comes from | The accountant, in March | A spreadsheet, monthly | Live, in reports |
Why do shops running Pista sit at 68.9% gross margin?
Not magic, and not a pricing trick. It comes down to the ticket being complete and correctly priced the first time.
The AI service writer builds the repair order from a VIN and one sentence. It pulls the labor time, pulls the parts and prices, and writes the lines. The writer reviews it and sends it. What that removes is the rushed ticket: the one written between two phone calls where the labor got rounded down and the shop supplies line got skipped.
Then digital inspections put the rest of the car on the ticket with photos, so the additional work gets sold instead of mentioned. Every approved line is labor time plus parts margin you would have otherwise driven away.
Across 2,600+ repair orders written and 3,200+ customers managed on the platform, the pattern holds. The shops are not charging more than the shop down the street. They are capturing what they already earned.
Margin problems almost never look like margin problems. They look like a busy week that somehow did not pay for itself.
How do you raise gross margin without raising your labor rate?
Raising the posted rate is the last lever, not the first. Pull these first:
- Bill the real labor time. Stop guessing. The guide time is already in the ticket.
- Apply a parts matrix to every ticket. No exceptions, no "this customer is a regular."
- Charge for diagnostics. Diag is the highest margin labor in the building and the most commonly given away.
- Sell the inspection findings. The car is already on the lift. That is free car count.
- Stop losing calls. A missed call is a 100% margin loss. The phone system with AI receptionist answers and books while you are under a hood.
Want to run your own numbers before you change anything? The shop calculators will do effective labor rate, parts margin and breakeven car count in about five minutes.
What to do this week
- Pull last month's totals and calculate your blended gross margin: sales minus parts cost, sublet and tech pay, divided by sales.
- Split parts margin and labor margin apart. Write both numbers on a sticky note and put it on your monitor.
- Divide labor dollars collected by technician hours paid. Compare that effective labor rate to your posted rate. The gap is your first project.
- Audit ten recent tickets for missing labor time, missing shop supplies and unapplied parts matrix. Count the dollars.
- Book a call with a Pista expert and have your margin numbers in hand. Setup runs 24 to 48 hours, migration is free, and the first 30 days are free. See pricing.