
A roof can look profitable when the customer signs and finish with far less profit than expected.
Maybe the salesperson discounted the job without updating the margin. Maybe production inherited work that wasn’t included in the estimate. Or the extra labor showed up in the books weeks after everyone considered the job finished.
You need a way to catch those changes while there’s still something you can do about them. That starts with three checks: before the estimate goes out, before production starts, and when the job closes.
The margin you sold versus the margin you earned
Consider this illustrative job:
Select a checkpoint to see what changes.
$6,000 expected gross profit
SalesThe estimate allows $14,000 in direct costs. Sales checks scope, selling price and approved exceptions.
See the estimate and closeout side by side
| Job numbers | At the estimate | At closeout |
|---|---|---|
| Selling price | $20,000 | $20,000 |
| Direct job costs | $14,000 | $16,000 |
| Gross profit | $6,000 | $4,000 |
| Gross margin | 30% | 20% |
The revenue stayed the same. The job lost $2,000 in expected gross profit, and its margin dropped 10 percentage points.
Gross margin is gross profit divided by revenue. For this job, that means subtracting direct job costs from the selling price, then dividing the result by the selling price.
Markup uses a different denominator: cost. Adding 30% to a $14,000 cost produces an $18,200 selling price and roughly 23.1% gross margin. To earn 30% gross margin on that same cost, the selling price would need to be $20,000.
That distinction matters when you’re building estimating rules.
Gross profit also has to cover overhead and other business expenses before you arrive at net profit. A job’s gross margin and the company’s bottom line answer different questions.
Use consistent cost definitions throughout. If an expense belongs in your direct job costs, it needs to appear in both the estimate and the actual-cost comparison.
Check 1: Before the estimate goes out
The first margin check belongs in the sales process.
Before the salesperson sends an estimate, the job should have a defined scope, current cost assumptions, and a selling price that reflects any discounts or concessions.
Review what you’re actually committing to deliver. That includes the materials, labor or subcontractor work, disposal, and other job-specific costs under your accounting setup. Any allowance or unresolved scope question should be visible.
For the example above, the sales process should show that $14,000 in expected direct costs against a $20,000 price leaves $6,000 in gross profit.
If the salesperson offers a $1,000 discount and costs stay unchanged, that profit falls to $5,000. The margin becomes approximately 26.3%. The person approving the discount should see that before it reaches the customer.
Set a margin target appropriate to the work, define who can approve exceptions, and record the reason for each exception. An owner might knowingly accept a lower-margin job. The decision should be visible to the people responsible for delivering it.
This is useful CRM and estimating workflow work: required cost fields, margin calculations, and an approval step when a quote falls outside the company’s rules.
The salesperson owns the completed estimate. A designated manager owns exceptions. Production gets the approved version.
Check 2: Before the crew starts
Production needs to check whether the sold job can still be delivered for the expected cost.
Compare the approved estimate with the materials being ordered, the labor plan, and the scope the customer agreed to. Look for anything that changed between the quote and the scheduled start.
Return to the same example. Suppose updated purchasing and labor information now puts expected costs at $15,000. At the agreed $20,000 price, the projected margin is already down to 25%.
That needs a decision before the crew arrives.
The production lead should identify what changed and who can resolve it. Was a cost missed in estimating? Did the customer request additional work? Has the installation plan changed? Different causes need different responses.
You might correct a purchasing error, revise the work plan, or document and price a customer-requested scope change. Where appropriate, get the customer’s approval before carrying out additional work. An internal estimating mistake doesn’t automatically become something you can charge the customer for.
Keep the original estimate alongside approved revisions so you can explain the difference later.
The check also needs to continue during the job. Give the crew or production manager a simple way to flag extra labor, material changes, and additional work as they happen. Assign someone to approve the response and record its cost and revenue impact.
Otherwise, a good pre-production review can still be overtaken by changes nobody tracks.
Check 3: When the job closes
Finance closes the loop by comparing the estimate with what the job actually earned and cost.
Bring the original estimate, approved changes, final invoiced revenue, and actual direct costs together under the same job record. Account for supplier credits, additional labor, and attributable rework or callback costs consistently.
A finished roof may still have incomplete financial records. If a subcontractor invoice is missing, mark the result as provisional and assign someone to resolve it. A blank cost field can make the margin look better than it is.
In our example, final direct costs reached $16,000. The next step is to explain the $2,000 difference from the original estimate.
“Labor was high” won’t tell the estimator what to change. A useful explanation identifies the additional work, why it happened, and whether the original estimate allowed for it.
An omitted scope item points back to estimating. Repeated extra trips may point to purchasing or scheduling. Unbilled approved work needs a billing correction. Those are different actions with different owners.
Your job-cost and margin reporting should make those differences visible. Track the action alongside the variance, then check whether the same problem appears on later jobs.
How we built these controls for a roofing client
In one Full Throttle engagement, we built margin checks into three parts of a roofing company’s workflow.
Salespeople used estimating margin guardrails in the CRM. Production ran another margin check before work started. Finance completed job costing at the end.
That work was part of a broader engagement that included rebuilding the CRM, implementing lead nurturing and speed-to-lead processes, developing and training the sales process, and reorganizing responsibilities around it. The owner also hired a general manager and a sales manager.
Over approximately two years, the company grew from $4M to roughly $10M in annual revenue, while company-wide gross margin increased from 15% to more than 30%. Those results reflect the broader engagement and the company’s execution. The three margin checks were one part of the work.
Read the roofing growth and margin case study.
Start with five completed jobs
You can start this review with your current records.
Choose five recently completed jobs and have sales, production, and finance review them together. Use a consistent selection, such as the last five with complete cost records, so you aren’t only looking at jobs everyone already knows went wrong.
Build one row per job with these fields:
| Record | What to capture |
|---|---|
| Job and revenue | Job identifier, original selling price, approved changes, final revenue |
| Estimated costs | Direct costs used to approve the original estimate |
| Actual costs | Recorded direct costs, with missing items flagged |
| Margin difference | Estimated and actual gross profit dollars and margin percentages |
| Cause | The specific reason the result changed |
| Follow-through | One responsible person, a corrective action, and a due date |
Separate margin lost through higher costs from margin lost through discounts or missed billing. Also keep collection timing separate: a late payment affects cash flow, but it doesn’t automatically mean the job’s gross margin changed.
Look for a repeated cause you can fix in the next estimate or production handoff. Review the next group of jobs to see whether that change helped.
For a broader look at where your process may be losing revenue or margin, use the free Roofing Revenue Leak Checklist.
If the gaps run across several teams or systems, the Full Throttle Business Diagnostic maps the process and produces a findings report with a prioritized action plan. It’s $1,000, credited in full toward a follow-on project of $2,000 or more.

