PriceTuneupFind your margin leaks

Price book audit

What one real 86-service HVAC price book was losing

A residential HVAC shop sent us their Housecall Pro services export. Of the 86 items in it, exactly 3 carried enough information to calculate a margin. All 3 were losing money against target, and one of them was losing money outright. Here is the whole audit, including the number we decided not to put in the headline.

The book we opened

It was a normal book for a small shop: 86 services spanning tune-ups under $100 up through heat pump installs in the $7,000 to $15,000 range. Nothing about it looked broken from inside the app. The service list was populated, prices were filled in, techs quoted from it every day. The shop is anonymized here at their request — the numbers are unedited.

The problem only shows up in the CSV export, where every item lays out side by side with its Price and its Cost. Seventeen of the items were also priced at $0.00 — online-booking and quote-on-site placeholders, which is legitimate, but it means the usable book is smaller than the item count suggests.

83 of 86 services had no cost data

That is the finding everything else hangs off. Housecall Pro treats the Cost column as optional, so it stays empty unless someone deliberately fills it in, and almost nobody does. Without a cost number there is no margin number — not in the app, not in a report, not in anyone’s head. The shop could tell you what they charged for a compressor. They could not tell you whether they made anything on it.

A detail worth knowing: Housecall Pro writes those empty costs as $0.00, not as a blank cell. Our own analyzer originally counted blanks only, so on this real export it reported zero missing costs instead of 83. We found the bug because of this book and fixed it — anything treating cost as “zero” rather than “unknown” will quietly report a 100% margin on most of your book.

The 3 items we could actually measure

Target prices below are what the engine returns at a 60% target gross margin with 25% overhead. Every one of the three sat below target, and the first sat below its own cost.

ItemPriceCostGross marginPrice at 60% GMGap per sale
Out-of-warranty compressor replacement$1,500$1,800−20.0%$5,625$4,125
In-warranty compressor replacement$900$80011.1%$2,500$1,600
Filter dryer replacement$125$1250.0%$390.63$265.63
Total left on the table, one sale of each$5,990.63

Average gross margin across those three: −3.0%. The shop was running its measurable work at a small loss and had no way to see it.

What that adds up to in a year

$5,990.63 is the gap on one sale of each of the three items. At twelve sales per item per year — a deliberately modest assumption for a shop this size — that is $71,888 a year undercharged, from 3 line items. That is the number we quote publicly, and now you know exactly what it rests on: three items, twelve sales each, one year.

The other 83 items are the part that should worry an owner more. They are not known to be fine. They are unknown. Among them are the install jobs — the $7,000 to $15,000 tickets that decide whether the year works — priced with no recorded cost against them at all.

The number we decided not to publish

We built a working cost estimate for all 83 uncosted items so the owner would have something to correct rather than a blank column. Run the same 60% target across that whole worksheet and the annual figure lands north of a million dollars. We did not put that number in front of the shop, and it is not on this site, for two reasons.

  • A 60% margin is wrong for installs. Equipment-heavy jobs price in the 30 to 45 percent range in the real market. Applying a repair-side target to a $14,000 heat pump produces a price nobody signs.
  • The volume assumption breaks at scale. Twelve sales a year is conservative for a capacitor. Twelve sales a year of each of twenty-two different install configurations is not a shop this size.

The defensible version is smaller and still large: roughly $42,000 a year recoverable on the repair side once real costs are entered, plus the $71,888 already measurable. Both are estimates, and we label them that way. A pricing number you cannot defend line by line is worse than no number, because the first person to check it stops believing the rest.

Four other things the export showed

None of these are margin problems exactly. All of them cost money, and all of them are invisible until the book is laid out flat.

  • Duplicate items at different prices. The same in-warranty compressor job existed twice, once at $900 and once at $600. Which one a customer paid came down to which one the tech tapped.
  • An inverted price ladder. A 3.5-ton system was priced below the 3.0-ton system above it. Bigger unit, smaller price.
  • Placeholder items priced at $0.00. Seventeen of them. Fine by design, but they inflate the apparent size of the book and skew any average computed over it.
  • Typos and stray whitespace in names. Trailing tabs and a misplaced character in a model name. Cosmetic on an invoice, but they break the sorting and matching that any re-import depends on.

What the rebuild actually does about it

A done-for-you rebuild is three concrete deliverables, not advice:

  1. Reprice what can be repriced. The 3 costed items came back at their target prices in a Housecall Pro import-ready file, item IDs intact, so nothing has to be retyped by hand.
  2. Turn the blank column into a worksheet. Every uncosted item gets a starting estimate and a note explaining where it came from, so the owner corrects a column against their own invoices instead of starting from nothing. Those estimates are labeled as estimates on every row.
  3. Flag the junk. Duplicates, inverted ladders, placeholder rows and name errors get listed for a decision. The shop keeps working out of the same Housecall Pro price book afterward — no new subscription, no migration, no retraining.
Where this stands.The repriced file and the cost worksheet are built and reviewed. Nothing has been imported into the shop’s live account yet — their real invoice costs go in first, and the per-category margin targets get settled before anything is published to techs. When the after-numbers exist — average ticket before and after, measured margin once the cost column is filled — they get added to this page. We would rather show you a half-finished audit with real numbers than a finished story with invented ones.

Run the same check on your own book

The first two findings here — how many items have no cost, and which costed items sit below target — take about two minutes to reproduce on your own export. Pull your services CSV out of Housecall Pro and drop it into the free Margin Leak Finder. It parses the file in your browser and never uploads it anywhere. If you want the reasoning behind the target margins first, the HVAC flat rate pricing guide walks through the same math on a blank sheet.

PriceTuneup’s rebuild is $249 one time and comes with the 60-Day Ticket-Lift Guarantee: If your average ticket doesn't go up within 60 days of importing your new price book, we refund the full price — and you keep every file.

Frequently asked questions

How many price book items typically have no cost data?

In the 86-service Housecall Pro book audited here, 83 of them had no cost recorded — about 96% of the book. Housecall Pro treats the Cost column as optional, so it stays empty unless someone deliberately fills it in. Without a cost, the app cannot tell you the margin on a job, and neither can any report built on top of it.

What does a negative gross margin on a price book item mean?

It means the price is below the direct cost of doing the work, so the shop loses money on every one of those jobs before overhead is even counted. In this book the worst item was an out-of-warranty compressor priced at $1,500 against an $1,800 cost — the shop paid $300 for the privilege of doing the job, every time it sold one.

How do you calculate what a flat-rate item should be priced at?

Take the direct cost, add overhead, then divide by one minus your target gross margin: price = cost x (1 + overhead %) / (1 - target margin). At 25% overhead and a 60% target margin, an item costing $1,800 prices at $5,625. The formula is only as good as the cost number you feed it, which is why the missing Cost column matters more than the pricing math.

Should every price book item target a 60% gross margin?

No. Sixty percent is a reasonable target for diagnostic and repair tasks, but equipment installations usually run in the 30 to 45 percent range because the equipment itself dominates the cost. Applying a repair-side margin target to install SKUs produces prices no customer will accept. Set the target per category, not once for the whole book.

Can you run the same audit on my price book?

Yes. Export your services price book from Housecall Pro as a CSV and drop it into the free Margin Leak Finder — it parses the file in your browser and never uploads it. You get the same three numbers this audit started with: how many items have no cost data, which items lose money, and what the gap adds up to. The 249 dollar done-for-you rebuild is the version where we do the whole book for you.

Find out what your book is hiding

Same audit, your export, two minutes — or hand us the file and get the whole book back priced.