Contractor business guide
Estimated vs Actual Job Costs: How Contractors Find Profit Leaks
A completed job can still look “profitable” and underperform badly.
Suppose you expected a job to produce $6,000 of Job Profit at a 30% margin. After the work is complete, the actual result is $5,100 at a 24.3% margin.
The difference is visible.
The useful question is:
Where did the expected profit go?
That answer rarely comes from looking at one total.
You need to move through four steps:
Variance → category → root cause → corrective input
A labor overrun, for example, does not automatically mean your labor rate was wrong. You may have underestimated hours, used a different crew, incurred overtime, performed rework, completed extra scope, or simply coded time to the wrong job.
The same logic applies to materials, subcontractors, equipment, overhead, and revenue.
Start by comparing the estimated and actual economics of the job in the Contractor Job Profit & Costing Calculator. Once you know which numbers changed, use this guide to determine why they changed and what should be corrected before the next estimate.
Start with the profit and margin change
Before reviewing individual receipts or time entries, understand the top-level result.
Compare:
- estimated job revenue;
- actual job revenue;
- estimated Job Profit;
- actual Job Profit;
- estimated Job Margin;
- actual Job Margin.
The first question is:
Did the job miss expectations because revenue changed, costs changed, or both?
A lower margin does not automatically mean costs went over estimate.
For example:
- revenue may have been reduced by a credit;
- extra work may have been performed without additional billing;
- costs may have risen while revenue also increased;
- direct costs may have stayed close to plan while allocated overhead increased.
Start with the overall movement, then work downward.
If expected Job Profit was $6,000 and actual Job Profit was $5,100, you have a $900 unfavorable profit variance.
Now the diagnostic work begins.
Then find the largest cost variance
Do not treat every difference as equally important.
Review the major categories:
- labor;
- materials;
- subcontractors;
- equipment;
- other direct costs;
- allocated overhead.
Rank the dollar variances first.
If labor is $1,800 over estimate and disposal cost is $70 over estimate, labor deserves attention first.
The objective is not to make every estimate equal actual cost to the dollar.
The objective is to find the assumptions that materially changed the job economics.
For each significant variance, ask:
- Was the original estimate wrong?
- Did the rate or unit price change?
- Did execution consume more resources than planned?
- Did the scope change?
- Is the apparent variance actually a coding or data problem?
Those five root-cause categories should drive the analysis.
Labor variance: separate hours from labor cost
Labor overruns are especially important because one dollar variance can come from two very different problems:
more hours
or
higher cost per hour.
Those require different fixes.
More labor hours than estimated
Suppose a job was estimated at:
80 productive labor hours
but actually required:
105 hours.
The first question should not be:
Should we increase our labor rate?
The problem may be the quantity of labor, not its hourly cost.
Possible causes include:
- the original estimate missed part of the scope;
- productivity was lower than assumed;
- jobsite conditions slowed the crew;
- travel, setup, cleanup, or mobilization time was underestimated;
- crew size was inefficient;
- materials were not ready when needed;
- rework or callbacks added hours;
- a new employee required more supervision;
- the job sequence was poorly planned.
The corrective input depends on the cause.
If similar installations repeatedly require 25% more hours than estimated, update the labor-hour assumption.
If the excess came from one unusual jobsite condition, changing every future estimate may be the wrong response.
Higher labor cost per hour
The hours may be close to estimate while labor dollars still run over.
Possible causes include:
- overtime;
- wage changes;
- a higher-cost technician or foreman performed the work;
- the planned crew mix changed;
- benefits or other employee costs increased;
- the productive-hour labor cost used in estimates is outdated.
If the productive-hour cost assumption itself is wrong, update that input before changing job markup.
Use the Labor Burden Calculator when the problem is the employee’s true productive-hour cost rather than the number of hours required.
This distinction matters:
Hours problem → fix productivity or estimating.
Rate problem → fix the labor-cost assumption.
Raising prices without knowing which one changed can hide the problem without correcting it.
Material variance: price, quantity, waste, or scope?
A material overrun also has multiple possible causes.
Suppose you estimated:
$4,000 of materials
and actual material cost was:
$5,200.
That $1,200 variance could mean very different things.
Estimate error
The original takeoff or material allowance was incomplete.
Examples:
- missing fittings;
- incorrect quantity;
- forgotten consumables;
- underestimated waste.
Corrective input:
material quantity or allowance.
Rate or price change
The estimated quantity was correct, but purchase price changed.
Examples:
- supplier price increase;
- rush order;
- different product specification;
- freight or delivery increase.
Corrective input:
unit cost / supplier price assumption.
Productivity or execution
The material was wasted or had to be replaced.
Examples:
- damaged product;
- incorrect cuts;
- installation error;
- failed component;
- avoidable reordering.
Corrective action:
process, training, quality control, or waste assumption.
Scope change
The customer or job required additional work.
The material cost may be legitimate.
The key question becomes:
Was corresponding revenue added?
If not, the leak may be on the revenue/change-order side rather than the estimate itself.
Coding or data problem
The invoice may belong partly or entirely to another job.
Do not increase future material allowances because of a bookkeeping error.
The lesson is simple:
Do not respond to every material overrun by blindly adding more markup.
First determine whether the problem was quantity, price, execution, scope, or data.
Subcontractor variance: check scope and change control
Subcontractor costs often move because the scope assumed in the estimate and the scope actually purchased are different.
Possible causes include:
- the original subcontractor quote expired;
- the estimate used an allowance rather than a firm quote;
- excluded work was discovered later;
- site conditions required additional work;
- the subcontractor issued a change order;
- a second subcontractor was needed;
- the contractor absorbed work that was not passed through to the customer;
- the invoice was coded incorrectly.
A subcontractor overrun should therefore trigger two questions:
Why did subcontractor cost change?
and
Did job revenue change with it?
If a legitimate $2,000 subcontractor change was fully approved and billed to the customer, the cost variance alone does not describe the economic result.
If the work was necessary but never added to revenue, the issue may be change-order discipline.
The same cost variance can represent either a successful scope change or a profit leak.
Equipment and other direct-cost variance
Equipment and miscellaneous direct costs are often smaller than labor or materials, but recurring misses still matter.
Examples include:
- rental equipment kept longer than expected;
- additional mobilization;
- job-specific fuel;
- disposal;
- permit cost;
- delivery charges;
- temporary equipment;
- site access fees;
- other job-specific costs.
Again, classify the cause.
A rental extending because the job ran five days late is likely connected to a broader productivity or schedule problem.
A permit fee omitted from the estimate is an estimate error.
A disposal charge assigned to the wrong project is a data problem.
Avoid treating the category name as the diagnosis.
Revenue variance: did the job earn what the estimate assumed?
Profit leaks do not occur only on the cost side.
Revenue can change too.
Suppose estimated revenue was:
$20,000
but actual revenue was:
$19,200.
Possible causes include:
- discounting;
- customer credit;
- scope removed;
- unapproved extra work;
- a change order never documented;
- a change order documented but never billed;
- final invoicing lower than the pricing assumption;
- revenue recorded against the wrong job.
An unfavorable revenue variance deserves the same attention as an unfavorable cost variance.
Favorable revenue variance
Revenue may rise because of:
- approved change orders;
- additional scope;
- additional billable work.
That does not automatically mean the job improved.
If revenue increased by $2,000 but costs increased by $3,000, the job still lost expected profit.
Unfavorable revenue variance
Revenue may fall while costs remain unchanged.
That can destroy margin even when field execution was perfectly efficient.
This is why contractors should analyze:
revenue variance and cost variance together.
A cost overrun can sometimes be commercially acceptable if it came with enough additional revenue.
Unbilled scope cannot.
Overhead variance: cost problem or allocation problem?
Allocated overhead deserves a different diagnostic approach.
Suppose the job estimate included:
$2,000 allocated overhead
but actual analysis assigns:
$2,500.
That does not necessarily mean annual company overhead suddenly increased by $500.
The allocation may have changed because the job consumed more of the driver used by your company.
For example:
Labor-hour allocation
More actual field hours than estimated
→ more overhead assigned to the job.
Direct-cost allocation
Higher actual job costs
→ higher allocated overhead.
Revenue-based allocation
Actual revenue changed
→ allocation changes accordingly.
The root cause may therefore be:
- a changed activity driver;
- an outdated allocation rate;
- an inconsistent estimate-vs-actual method;
- a company-level overhead assumption that needs updating.
If the issue is the company-level overhead itself, revisit the Contractor Overhead Calculator.
If annual overhead is still correct but individual jobs are carrying unreasonable amounts, the problem may be the allocation method, not the total overhead pool.
Do not “fix” an overhead variance by changing job prices until you know which issue you have.
Contribution can expose a different problem than Job Profit
A job can miss Job Profit for two very different reasons.
Direct economics deteriorated
Revenue did not adequately cover:
- labor;
- materials;
- subcontractors;
- equipment;
- other direct job costs.
In that case, contribution after direct costs deteriorates before allocated overhead is even considered.
That points toward:
- estimating;
- productivity;
- material/subcontractor assumptions;
- scope control;
- revenue.
Direct economics were close to plan, but Job Profit still missed
Contribution may remain near estimate while Job Profit after allocated overhead falls significantly.
That points more toward:
- overhead allocation;
- company overhead assumptions;
- the relationship between pricing and overhead recovery.
This distinction prevents every margin problem from being diagnosed as “our job costs were too high.”
Sometimes the direct job performed reasonably well and the overhead model exposed a different issue.
One large variance vs many small profit leaks
Not every underperforming job has one obvious failure.
One large variance
Example:
A material package costs $5,000 more than planned.
That may be traced to one:
- pricing error;
- scope omission;
- supplier change;
- execution problem.
Many small leaks
Example:
- Labor: $500 over
- Materials: $350 over
- Equipment: $200 over
- Other costs: $150 over
- Revenue: $500 below estimate
No single line looks catastrophic.
Together, they reduce expected Job Profit by:
$1,700
This is where “profit leaks” become useful language.
Small estimating misses, wasted hours, unbilled scope, and miscellaneous costs can accumulate into meaningful margin erosion.
The diagnostic process is the same:
identify each variance → classify the cause → decide whether it is recurring.
Classify the cause before changing your estimate
Every material variance should ultimately fit into one of five useful root-cause groups.
Estimate error
The original estimate was wrong.
Examples:
- labor hours underestimated;
- material missing;
- subcontractor allowance too low;
- equipment requirement omitted;
- expected revenue overstated.
Corrective action:
update the estimating assumption.
Rate or price change
The amount of work or material was approximately correct, but the unit cost changed.
Examples:
- wage change;
- labor burden change;
- material price increase;
- subcontractor price increase;
- rental-rate increase.
Corrective action:
update the cost rate or supplier assumption.
Productivity or execution
The estimate may have been reasonable, but actual performance consumed more resources.
Examples:
- rework;
- waste;
- slow production;
- poor job sequencing;
- inefficient crew;
- unnecessary supplier runs;
- equipment idle time.
Corrective action:
improve execution and decide whether future productivity assumptions should also change.
Scope change
The job changed.
Examples:
- customer requested extra work;
- hidden condition discovered;
- design/specification changed;
- additional subcontractor scope required.
Corrective question:
Was corresponding revenue approved and captured?
If yes, both cost and revenue should be reviewed.
If not, the leak may be in change-order management.
Coding or data problem
The variance may not represent economic reality at all.
Examples:
- time assigned to the wrong job;
- supplier invoice coded incorrectly;
- revenue recorded elsewhere;
- duplicate invoice;
- cost omitted from one job and assigned to another.
Corrective action:
fix the data before changing operational or pricing assumptions.
This category is especially important.
Bad data can make a good estimate look wrong and cause the business to “correct” something that was never broken.
Example: a profitable job that still leaked margin
Consider a contractor who estimated:
Job Revenue: $20,000
Expected Job Profit: $6,000
Expected Job Margin: 30%
The completed job produced:
Actual Revenue: $21,000
Actual Job Profit: $5,100
Actual Job Margin: 24.3%
The job still made money.
It also missed its expected economics.
Suppose the major variances were:
- Revenue: +$1,000
- Labor: +$1,000 cost
- Materials: +$500 cost
- Equipment: +$200 cost
- Allocated Overhead: +$200
- Other categories: approximately on estimate
At first glance, the additional $1,000 of revenue looks favorable.
But the additional costs total:
$1,900
The revenue gain only offsets part of the cost increase.
Expected Job Profit:
$6,000
Actual Job Profit:
$5,100
Profit variance:
$900 below expectation
The next question is not:
Should we add 5% more markup to every job?
The next questions are:
- Why was labor $1,000 over?
- Why were materials $500 over?
- Was the extra $1,000 revenue associated with the same scope changes that created extra cost?
- Why did overhead allocation increase?
- Are these one-time issues or recurring patterns?
Only then should the next estimate change.
Do not automatically fix a bad job by raising markup
Raising prices may be appropriate.
But it should not be the first automatic response to every underperforming job.
Suppose labor cost was over estimate because the estimator assumed:
60 hours
for work that consistently requires:
80 hours.
Increasing markup on the inaccurate 60-hour estimate may improve price, but the estimate itself is still wrong.
Or suppose a material overrun came entirely from preventable waste.
Higher markup may recover more money but does not address the execution problem.
A more disciplined sequence is:
- correct cost assumptions;
- correct productivity assumptions;
- correct scope/revenue control;
- verify overhead treatment;
- then evaluate the selling price.
Once the cost basis is credible, use the Contractor Markup Calculator to evaluate future selling prices under your chosen pricing method.
Pricing is the final response to accurate cost information, not a substitute for it.
Turn completed jobs into better estimates
The real value of estimated-vs-actual analysis appears on the next job.
Use a simple review process.
1. Compare the expected and actual financial result
Start with:
- revenue;
- Job Profit;
- Job Margin.
2. Identify the largest dollar variances
Focus on categories that materially affected the outcome.
3. Classify each important variance
Use:
- estimate error;
- rate/price change;
- productivity/execution;
- scope change;
- coding/data problem.
4. Separate one-time events from recurring patterns
One unusual equipment failure should not automatically change every future estimate.
Five similar labor overruns probably should.
5. Update the relevant input
Examples:
Labor hours consistently low:
→ update labor-hour estimate.
Productive labor cost outdated:
→ update labor-cost assumption.
Material prices changed:
→ update unit prices.
Waste recurring:
→ update process and possibly waste allowance.
Overhead assumptions stale:
→ update company overhead/recovery input.
6. Reprice future work from corrected economics
Only after the underlying cost assumptions are corrected should future selling-price decisions be evaluated.
7. Repeat
A single post-job review is useful.
A consistent review process becomes an estimating feedback loop.
Look for patterns across jobs, not just one bad project
One project can mislead you.
Weather, site access, customer changes, equipment failure, or an unusual crew can make a single job unrepresentative.
Patterns across similar jobs are more valuable.
Labor repeatedly over estimate
Possible signal:
- labor-hour assumption too aggressive;
- production standard unrealistic;
- crew mix wrong;
- recurring rework.
Materials repeatedly over
Possible signal:
- takeoffs incomplete;
- waste assumption too low;
- supplier pricing outdated.
Direct costs accurate but margin repeatedly falls
Possible signal:
- overhead recovery problem;
- pricing problem;
- revenue leakage.
Revenue repeatedly below estimate
Possible signal:
- discounting;
- unbilled extras;
- weak change-order process;
- quoting assumptions not reaching final invoice.
“Variances” disappear after bookkeeping cleanup
Possible signal:
- cost coding and job assignment need improvement.
Do not build a complicated multi-job analysis system just to recognize these patterns.
Even a simple monthly review of completed jobs can show whether the same issue keeps appearing.
The bottom line
Estimated-vs-actual job costing is useful because it tells you where reality differed from the plan.
But the variance itself is only the beginning.
A useful post-job review follows this sequence:
Variance
→ Category
→ Root cause
→ Corrective estimating or pricing input
The five root-cause categories are:
- estimate error;
- rate or price change;
- productivity or execution;
- scope change;
- coding or data problem.
Do not raise prices because one number is red.
Do not change labor assumptions because material cost moved.
Do not increase markup because a job was coded incorrectly.
Find the cause first.
Then correct the assumption that actually failed.
That is how completed jobs stop being historical reports and start improving the economics of the next estimate.