Markup vs. Margin: Why Your Pricing Math Is Wrong
Markup vs. Margin: Why Your Pricing Math Is Wrong
In 2019, I pulled the P&L of a 14-truck residential HVAC shop that Atlantic Comfort Partners was preparing to acquire. The owner had been in the trade over two decades, looked at that P&L every month, and had been losing money on every install for nearly three years. The loss was distributed across cost of goods in a way that only became visible when we rebuilt the margin calculation from the cost basis up. That moment is why I write about pricing math more than anything else.
The error was not exotic. He was pricing at 40% markup and calling it 40% margin. Those are different formulas that produce different numbers, and the gap between them was approximately $340,000 in gross profit that had never existed.
Markup and Margin Are Not the Same Calculation
Markup is calculated on cost. You buy a part for $100, mark it up 40%, sell it for $140. That feels like 40% gross margin. It is not.
Margin is calculated on revenue. That $140 sale has $40 of gross profit on $140 of revenue — which is 28.6%. Same transaction, same dollars, two different percentages depending on which direction you run the math.
The trade historically teaches markup. You learn to price in the field by taking what something costs and adding a percentage. That habit is intuitive and it is wrong for measuring business performance, because your overhead and profit targets are set as a percentage of revenue. When you budget for the year, you say "I need 35% gross margin to cover overhead and hit my number." That is a margin figure. If you are pricing to a markup figure and calling it a margin target, you will miss the target on every ticket and the P&L will not tell you why.
The 14-truck owner was running the business the way he had been taught. The math error was invisible because the flat-rate book showed prices, not cost bases, and the accounting software reported a gross margin percentage without anyone checking whether the pricing inputs were margin-based or markup-based. By the time I rebuilt the model, his effective installed margin was running about 11 points below where he believed it was.
The Formula
One ticket. $1,000 in parts and labor combined.
Priced at 40% markup on cost: Sale price = $1,000 × 1.40 = $1,400 Gross margin = $400 / $1,400 = 28.6%
Priced to 40% gross margin on revenue: Sale price = $1,000 / (1 − 0.40) = $1,666.67 Gross margin = $666.67 / $1,666.67 = 40.0%
The difference on that one ticket is $266.67 in gross profit — present in one scenario, absent in the other. On a $1,000 cost basis, the pricing error is roughly a quarter per dollar of cost you incur.
The formula you want:
Sale price = Cost ÷ (1 − desired margin %)
Put it in a spreadsheet column. That is the whole fix.
One layer deeper: most shops I work with conflate gross margin with contribution margin. Gross margin is revenue minus direct cost of goods — parts, materials, direct labor on the job. Contribution margin is revenue minus variable costs only, which tells you how much each additional ticket covers toward fixed overhead. The practical question is whether your technicians are salaried (fixed cost, higher contribution margin) or hourly and only paid per call (variable cost, lower contribution margin). Most shops have a mix and don't know which number they're looking at when the accounting software reports "gross margin."
What the Flat-Rate Books Are Not Telling You
The major flat-rate pricing tools do one thing well: they give you a defensible number to show a customer when they ask why a capacitor replacement costs what it costs. That is a real service. It takes the price conversation out of the field.
What the books do not do is calculate your margin on that ticket.
Here is the mechanism. The book sets a price derived from a cost model built on national averages — for labor rates, parts cost, overhead allocation. Your shop's actual cost basis is not that model. Your technician wages here are not the national average. Your parts cost from your specific distributor at your specific volume tier is not the national average. The book's price minus your actual cost produces your actual margin. If your cost basis runs above the model, your margin is below what the book implies — and you will not see that difference unless you run the check yourself.
The flat-rate book sets a price. It does not set your margin. Your margin is what remains after your actual costs, and the book does not know your actual costs.
At Atlantic Comfort Partners, when I was reviewing acquired shops across multiple residential HVAC markets, I went through the pricing structures of shops using several of the major flat-rate vendors. Shops using those books had predictable revenue per ticket and variable margin per ticket — which is the opposite of what an owner believes they are buying. The shops where the gap was widest were in higher-wage, higher-insurance markets where the cost basis had drifted furthest from the national-average model embedded in the book. No vendor flags this for you. Their incentive is the book and the annual update subscription, not your effective margin on the capacitor replacement.
How the Error Compounds
A $267 per-ticket gap on a $1,000 cost basis sounds containable. It is not.
Consider what I saw in the 14-truck shop: the gross profit on a $12,000 residential system install went from a number that looked like $4,400 to a number that was actually $3,200 once we rebuilt the model correctly. That is a $1,200 difference on a single ticket, before touching overhead allocation. The owner had completed 280 residential installs that season. The gross profit he had been counting on that did not exist totaled $336,000.
He did not argue with the spreadsheet once the formula was visible. That is almost always what happens.
The bank account told him something was wrong. The P&L did not, because the P&L showed the revenue that came in and the costs that went out and the difference — which was the actual margin, not the intended margin. He was diagnosing slow-paying customers. That was not the problem.
If you carry net-30 commercial accounts or customers who routinely pay on day 45, you can have two problems running simultaneously: a margin error that means the gross profit you think you earned is smaller than it is, and a cash timing problem that means the gross profit you actually earned has not arrived yet. Owners see the slow invoices because those are visible. The margin error is distributed across every ticket and shows up nowhere as a line item. It shows up in the checking account at 2 a.m.
The SEER2 Addendum
If you went through the SEER2 transition and absorbed any of the equipment cost increase without repricing to a corrected margin target, run the numbers again from scratch.
The shops I work with that are still hurting from that transition are not hurting because the new equipment costs more. They were already pricing on the wrong formula before SEER2. The transition widened the gap. If your effective margin was 29% when you believed it was 40%, and equipment costs rose 8-12% and you passed through half of that, your installed margin on residential systems is now sitting in the low 20s. A busy summer that leaves nothing in the bank is what that looks like from the outside.
The repricing conversation with customers is less difficult than most owners expect. The shops I've seen work through it that can explain what changed — equipment cost, what the new efficiency standards require, what the warranty covers — lose fewer jobs than they anticipate. If your only competitive position is a price that does not cover your costs, that is not a competitive position.
FAQ
What is the actual difference between markup and margin, in one sentence?
Markup is gross profit divided by cost; margin is gross profit divided by revenue — because revenue is always larger than cost, the same gross profit dollar amount produces a smaller percentage when expressed as margin than when expressed as markup. Pricing to 40% markup on cost produces a 28.6% gross margin, not 40%.
If I have been using a flat-rate book for three years, how do I find my real margin?
Pull at least 20 tickets across different ticket types — diagnostic, repair, install. For each one, find the actual cost you incurred and the amount you billed. Divide gross profit by revenue. Average the results. Compare that figure to what you intended and what your accounting software shows. The gap tells you how far your actual cost basis has drifted from the model baked into your pricing book.
My accountant says my gross margin is healthy, but my bank account is thin. What is wrong?
Two causes, often simultaneous. First: if you are a working owner not paying yourself a market-rate wage, your labor cost is understated and the reported margin is fictitiously high — the business looks profitable partly because your labor is subsidizing it. Second: if your days sales outstanding is long, the gross profit you earned has not converted to cash yet. A healthy P&L alongside a thin bank account is almost always a pricing problem, a timing problem, or both running at the same time.
How do I reprice without losing jobs to a competitor who is clearly pricing below cost?
A competitor pricing below true margin is spending equity they do not know they have. That is not a sustainable competitive position — it is a delayed exit. The near-term question is whether you can hold margin while you reprice. In the shops I have worked with through a repricing process, the job losses were consistently smaller than the owner predicted, particularly when the technician could explain what the pricing reflects.
Should I apply the same margin target to parts and labor?
No. Parts carry inventory risk, warranty liability, and distributor price fluctuation. Labor does not. Most shops I work with should be running a higher margin target on parts than on labor. If you apply a flat markup across both and call it a margin, you are likely underpricing parts and under-recovering on the supply chain risk you are absorbing. Price them separately with separate targets, then present a single total to the customer.
I run a 4-truck shop with no bookkeeper. What is the minimum I need to track?
Three numbers per ticket: what you paid for parts and materials, what you paid in direct labor hours at your fully-loaded tech wage (wages plus payroll tax plus burden), and what you billed. Gross profit is the third minus the first two. Gross margin is gross profit divided by what you billed. One spreadsheet row per ticket, one formula column. That is the whole system. Run it for a month and you will know whether your effective margin matches your intended margin.
Enjoyed this article?
Get articles like this in your inbox every Monday. Free, no spam.
