Markup vs Margin: The Two-Number Mistake That Costs Contractors Real Money
Talk to ten contractors and at least three will tell you they "mark up 30%." Ask them what their gross margin is and they'll say "30%." It's not. It's 23%. The difference between those two numbers — $7,000 on a $100,000 job — is the difference between a profitable year and a year you can't take a vacation.
The two definitions
Markup is what you add on top of cost. Margin is what you keep after cost.
A $100 cost item bid at 30% markup is $130. The profit is $30 on $130 in revenue. That's a 23.1% gross margin, not 30%.
If you want a 30% gross margin, you need a 42.9% markup. The formula:
markup % = margin % / (1 - margin %)
A 40% margin needs a 66.7% markup. A 50% margin needs a 100% markup. Most contractors who say "I double my cost" actually have a 50% gross margin, which is healthy. Most contractors who say "I add 30%" think they have a healthier business than they actually do.
Why this matters on every bid
A roofing contractor with $480,000 in annual cost of goods sold who thinks they're running a 30% gross margin is planning to have $144,000 to cover overhead and salary. They're actually running a 23% margin, which is $110,400. That $33,600 gap is the contractor's salary in a slow year.
The fix is upstream of the bid: choose a target margin, not a target markup, and let the spreadsheet (or Estimate.Pro) compute the markup needed to hit it.
How to pick a target margin
A residential remodeling contractor with a real overhead structure (truck, tools, insurance, office, owner draw) typically needs 35-45% gross margin to net 10-15% after overhead. A trade subcontractor with lower overhead can run 25-32%. A spec-home builder running a thin operation can survive at 18-22% but doesn't have to.
The right number is whatever lets you cover overhead and net 10% — work backward from your P&L, not forward from a guess.
The line items markup hides
The other failure mode is applying a flat markup to material and labor together. A 30% markup on $40,000 of labor and $30,000 of cabinets makes the cabinets look like the cabinets cost $39,000, when the contractor really wants to mark up labor by 50% and cabinets by 15%.
The fix is separate markup columns: material at one rate, labor at another, subs at a third. Most contractors who say their bids are "all over the place" haven't separated the columns.
How Estimate.Pro handles it
Estimate.Pro lets you set per-trade and per-category markup independently, then displays the resulting margin on every bid in real time. You set "I want 40% margin on labor" and the engine handles the math. The bid review pass catches a sub-target margin before the bid goes out — you get a "this bid is at 24% margin, target is 32%" warning, not a surprise.
The bottom line
Markup and margin are not the same number. Pick a target margin, compute the markup that gets there, and write the bid against that. The eight-minute Estimate.Pro bid hits the margin on purpose, not by accident.