
Markup vs Margin in Construction: Why Your 30% Isn't 30%
If You're Adding 30% to Every Job, You're Keeping 23% — Not 30%
You set 30% on every job. You expected 30%. The jobs close and the number isn't there.
You look at the bank. You look at what you billed. You try to find where it went. The crew worked. The materials were close. Nothing blew up. But the margin at the end is 22%, maybe 23%. Not 30%.
It happens on the small jobs. It happens on the big ones. It's quiet. No one flags it. The business keeps moving and you keep pricing the same way.
The problem isn't the job. The problem is the math you used to price it.
Markup and margin are not the same number. Markup is the amount you add to your cost. Margin is the percentage of your sell price you keep as profit. A 30% markup on a $10,000 job gives you a $13,000 sell price — but you only keep $3,000 out of $13,000, which is 23% margin, not 30%. To keep 30% margin, you need to divide your cost by 0.70, not multiply by 1.30.
The Number You Add and the Number You Keep Are Not the Same Thing
Here is the math in plain numbers. Say your cost on a job is $10,000.
You add 30%. That gives you a sell price of $13,000. You feel good. You bid 30%. The job runs clean. You invoice $13,000.
But look at what you actually kept: $3,000 profit on a $13,000 invoice. That is 23.1% — not 30%.
Why? Because markup is calculated from your cost. Margin is calculated from your sell price. They use different starting points. So they give different answers.
Here is the formula that shows the difference:
- Markup: Sell Price = Cost × (1 + markup %)
- $10,000 × 1.30 = $13,000
- Margin: Margin % = (Sell Price − Cost) ÷ Sell Price
- ($13,000 − $10,000) ÷ $13,000 = 23.1%
To actually earn 30% margin, you need to use this formula instead:
Sell Price = Cost ÷ (1 − Target Margin)
- $10,000 ÷ (1 − 0.30) = $10,000 ÷ 0.70 = $14,286
- Check: ($14,286 − $10,000) ÷ $14,286 = 30.0% ✓
That is a $1,286 difference on a $10,000 cost job. On a $100,000 cost job, it is $12,860 you did not keep.

The Conversion Table
Use this every time you set a price:
Print it. Put it next to your estimate sheet. The number in the right column is the one you use when you price a job.
Why This Happens on Almost Every Quote
Adding a percentage to your cost feels like math. It is math. Just the wrong math for what you are trying to measure.
Nobody sits down and explains the difference between markup and margin when you are learning the trade. You watch someone more experienced. They multiply cost by 1.3. The job closes. The business looks busy. You copy it. It feels right.
Years go by. The business grows. The margin still is not landing where you expected.
Every contractor I have sat down with who said "I am making 30%" was actually keeping 23%. Not because they were sloppy. Because nobody ever showed them that markup and margin are calculated from different numbers.
The Way Most Contractors Were Taught to Price a Job
The common approach looks like this: figure out your cost, then add a percentage on top. Simple. Fast. It feels like a safety buffer. The bigger the number you add, the safer you feel.
The problem is that your target margin — the number you use to judge whether a job is worth taking — is a percentage of revenue, not a percentage of cost. So when you add 30% to cost and call it "30% margin," you are comparing two different things. And the gap between them costs you money on every single quote.
The Quiet Cost of 7 Missing Points
Here is what that gap costs you every year, at different revenue levels:
- $1M revenue — 7% missing = $70,000 per year
- $2M revenue — 7% missing = $140,000 per year
- $5M revenue — 7% missing = $350,000 per year
These are not jobs that went over budget. These are jobs that ran fine. The crew did the work. The client paid the invoice. The margin just was not there — because the sell price was set with the wrong formula from the start.
At $2M revenue, that is $140,000 a year you worked for and did not keep. That number does not show up on one bad job report. It hides across dozens of jobs that each look okay on the surface.
The Fix Is One Formula
There is no quote template, estimating software, or industry habit that automatically corrects this. Most of the time the wrong formula gets passed down — someone showed a multiplier, it got used, and it felt right because the business stayed busy enough to cover the gap.
The fix is one formula:
Sell Price = Cost ÷ (1 − Target Margin)
Say it out loud: divide your cost by whatever is left after your target margin.
- Want 30% margin? Divide by 0.70.
- Want 25% margin? Divide by 0.75.
- Want 40% margin? Divide by 0.60.
That is it. No spreadsheet required. You can do it on a phone calculator in ten seconds.
Let us walk through it on a $10,000 cost job where you want 30% margin:
1. $10,000 ÷ 0.70 = $14,286 sell price
2. Profit = $14,286 − $10,000 = $4,286
3. Margin check: $4,286 ÷ $14,286 = 30.0% ✓
Compare that to the old way: $10,000 × 1.30 = $13,000. You left $1,286 on the table. On one job. Every job.
### How to Use This on Your Next Quote
Follow these steps on every quote from here forward:
1. Add up your real costs — include labor burden, not just wages. If you are not sure what your labor truly costs per hour, start at [/true-labor-cost-contractors](/true-labor-cost-contractors) before you set any markup.
2. Set your target margin % — pick the number from your right column in the table above.
3. Divide total cost by (1 − target margin) — this is your minimum sell price.
4. That number is your floor — quote at or above it, never below.
5. Check your math before the quote goes out — divide profit by sell price and confirm it matches your target.
That is five steps. They take less than two minutes. They close the gap between what you expected to keep and what you actually keep.
This Works the Same Way in Every Trade
The formula does not care what trade you are in. The cost inputs are different. The math is the same.
- General contractor — your costs include subs, materials, and your own overhead. Divide the full number by (1 − margin).
- HVAC contractor — equipment cost is often 60–70% of the job. The formula keeps you from discounting margin when equipment prices spike.
- Fabrication shop — your material and labor mix shifts job to job. The formula gives you a consistent floor regardless of the mix.
- Painting and coating — labor-heavy jobs are where this gap hits hardest. Seven points of missing margin on a $200,000 coating job is $14,000 gone quiet.
Same formula. Every trade. Every job size.

What to Do With Quotes You Have Already Sent
You cannot reopen every past quote. The jobs are closed. The invoices are paid.
But you can fix the next one. And you can run your closed jobs to find out how much margin was actually left on the table. That number is worth knowing before you price the next year of work.
In almost every Profit Recovery Review I run, this math error shows up. Not always as the only problem — but often as the one nobody noticed because the business was busy enough to cover it. John McCabe, 20+ years working inside contractor financials, and it is on almost every job cost report: the markup was set, the job ran, and the margin came back 6–8 points light.
The fix costs nothing to apply going forward. The cost of not applying it is $70,000 to $350,000 per year, depending on your revenue. Those are recoverable numbers. Not theoretical ones.
If you want to know exactly where your margin is going — not just on this one issue, but across all the layers of your pricing — the [Profit Health Roadmap](#wrap-up-cta) walks you through it in one session.
Key Takeaways
- Markup is added to cost; a 30% markup on a $10,000 cost gives a $13,000 sell price
- Margin is calculated from sell price; that same job keeps $3,000 ÷ $13,000 = 23% margin — not 30%
- The gap between a 30% markup and a 30% margin is 7 percentage points — on a $2M business that is $140,000 per year
- The fix: divide cost by (1 − target margin) to get the right sell price
- Labor cost is the most common undercount inside the cost number — see [/true-labor-cost-contractors](/true-labor-cost-contractors) before setting any markup
- Every trade faces this — it is a math problem, not an industry problem
FAQ
What is the difference between markup and margin in construction?
Markup is the percentage you add on top of your cost to get your sell price. Margin is the percentage of your sell price that is profit. They start from different numbers, so they give different results. A 30% markup on cost gives 23.1% margin on sell price — not 30%. See also: [how overhead affects your margin](/construction-overhead-rate-calculation).
Is a 30% markup the same as 30% margin?
No. A 30% markup on a $10,000 cost job gives a $13,000 sell price and $3,000 profit. That $3,000 is 23.1% of $13,000 — not 30%. To earn 30% margin, divide your cost by 0.70. On a $10,000 cost job, that gives a $14,286 sell price and $4,286 profit, which is exactly 30% of revenue.
How do I calculate the right markup to hit a specific margin?
Use this formula: Sell Price = Cost ÷ (1 − Target Margin). For 30% margin, divide cost by 0.70. For 25% margin, divide by 0.75. For 40% margin, divide by 0.60. The result is your minimum sell price. Divide profit by sell price to confirm you hit your target.
Why are my construction profits lower than my markup suggests they should be?
The most likely cause is the markup-vs-margin gap. If you are adding 30% to cost and expecting 30% margin, you are leaving 7 points behind on every job. A second common cause is undercounting your real labor cost — wages are only part of what labor actually costs. Start at [/true-labor-cost-contractors](/true-labor-cost-contractors) to check that number. A third cause is margin that erodes during the job — see [/profit-fade-construction](/profit-fade-construction) for how that happens.
Does the markup vs margin problem affect all trades, or just general contractors?
It affects every trade. GCs, HVAC, fabrication, painting, electrical, plumbing — if you set price by adding a percentage to cost, the gap is there. The formula to fix it is the same across all trades: Cost ÷ (1 − Target Margin) = Sell Price. The cost inputs change by trade, but the math does not.
How do I fix this if I have already sent quotes with the wrong math?
You cannot change sent quotes. But you can apply the right formula starting today. Pull your last 10 closed jobs, recalculate what your sell price should have been, and find out how much margin you left behind. That number tells you what the fix is worth on an annual basis. Then change your default pricing formula before the next quote goes out.

