Two contractors tell you they "make 20% on a job." One means they add 20% on top of costs. The other means 20% of what the client pays stays with them. Those are different numbers — the first contractor is earning noticeably less than the second — and mixing them up is one of the quietest ways a small outfit underprices itself for years.
This guide untangles the two, gives you the conversion table, and then goes after the harder problem: the gap between the margin you price for and the margin you actually achieve — which is where the 20% on your estimate becomes 12% in your bank account.
The two numbers, plainly
Markup is measured against cost: what you add on top. Cost $10,000, markup 20%, price $12,000.
Margin is measured against price: the share of the client's money that isn't cost. That same job — price $12,000, cost $10,000 — leaves $2,000, which is $2,000 ÷ $12,000 = 16.7% margin.
Same job, same dollars, two percentages. Neither is wrong; they're answers to different questions. The trouble starts when you want one and apply the other: aim for a 20% margin, add a 20% markup, and every job you price is short 3.3 points. On $500,000 of annual work, that's over $16,000 a year — gone via arithmetic, not via any job going badly.
The conversion table
| Markup (on cost) | Margin (of price) |
|---|---|
| 10% | 9.1% |
| 15% | 13.0% |
| 20% | 16.7% |
| 25% | 20.0% |
| 33% | 25.0% |
| 50% | 33.3% |
| 67% | 40.0% |
| 100% | 50.0% |
The formulas, if you'd rather compute than look up:
- margin = markup ÷ (1 + markup) — a 25% markup is 0.25 ÷ 1.25 = 20% margin
- markup = margin ÷ (1 − margin) — a 20% margin needs 0.20 ÷ 0.80 = 25% markup
And the rule that prevents the whole class of mistakes when pricing a job: to hit a target margin, divide by (1 − margin) — don't multiply by (1 + margin). Cost $10,000, target 20% margin: $10,000 ÷ 0.80 = $12,500. Multiplying by 1.20 gives $12,000 and quietly hands the client your missing $500.
If you'd rather not do the division at all, the markup to margin calculator converts in both directions and prices a job for the margin you want.
What margin has to cover — why 20% isn't greed
The margin on a job is not your pay for that job. It's the pool that has to cover everything the job's cost lines don't: the truck, insurance, the phone, the storage unit, tax prep — and every unbilled hour of your own time spent quoting jobs you didn't win, running for materials, and handling callbacks. Only what's left after all of that is profit.
That's the difference between gross margin (job level: price minus job costs) and net margin (company level: what's left after overhead). Ask around and you'll hear the rules of thumb: remodelers advised to mark up 50% or more, general contractors netting single digits in a normal year. Both can be true at once — a healthy gross margin shrinks to a thin net one precisely because overhead eats first. Which is why "what should I charge?" has no universal number; it has a procedure, and the procedure needs your figures:
- Add up a year of overhead — everything not attributable to a specific job.
- Divide by your realistic annual revenue. Say $60,000 over $400,000: overhead is 15% of every job's price.
- Add the net profit you want the business to earn — say 10%. Target margin: 25%.
- Divide by (1 − 0.25): price each job at cost ÷ 0.75 — a 33% markup.
Different overhead, different volume, different answer. A number borrowed from a forum thread is someone else's overhead wearing your prices.
The overhead and break-even calculator runs that procedure on your own figures — six overhead lines in; overhead rate, required margin and the matching markup out.
Why your 20% might be 12%
Here's the harder gap, and the one the table can't fix: the margin you priced for assumes the job costs what you estimated. It won't.
Say you priced Westlake at a clean 20% margin. Then labor ran 27% over the estimate — the most common overrun there is. A couple of supply runs never got photographed at the counter, so they're missing from the job (though not from your bank account). And one "while you're here" extra never became a change order, so its costs went in while its revenue didn't. Add it up and the achieved margin is 12% — while the estimate still says 20%, and next season's prices get set from the estimate.
The only margin that means anything is the achieved one, and it's only computable if each job's costs are actually tracked — every receipt, coded consistently, priced against what was really agreed. That's the job costing loop, and its bid-versus-actual payoff is exactly this number: which line of the next estimate to fix, so priced margin and achieved margin stop drifting apart.
Watching the gap while you can still close it
A spreadsheet computes achieved margin after the job — useful for the next bid, too late for this one. The version that changes outcomes is seeing the gap mid-job, while there's still schedule left to manage.
Obra keeps that view current: your crew sends receipts as photos, WhatsApp messages, or email, you confirm each to its job and category, and every job shows its costs against the agreed price — this week's, not last month's. When you want to look ahead, Obra builds a final-cost forecast from inputs you review yourself, telling you where the margin is at risk while "at risk" is still a warning and not a result. Start free if you'd rather learn about the 12% in week three than at tax time.
Get the template
If you're starting with the spreadsheet, start with one that keeps the numbers honest. The template below is our free job costing sheet — one sheet per job, costs and payments separated, so achieved margin comes from real figures. Enter your email below and the download starts right away.