Budget vs. actual compares what you planned a job to cost with what it really cost, line by line. For a contractor, the estimate is the budget: the labor hours, materials, subcontractors and other costs you priced the job on. The comparison shows which line went over, by how much, and why, so you can fix the cause instead of just noticing that the job made less than it should have.
This lesson shows how to turn an estimate into a job budget, record actual costs against the same lines, read the variance, check it while the job is still running, and feed what you learn back into the next estimate. If you haven’t set up job costing yet, start with construction job costing; this lesson builds on it.
Why totals aren’t enough
“The job cost $1,800 more than we thought” doesn’t tell you what to change. Was the estimate wrong? Did the crew run slow? Did the customer get extras nobody billed? Did a price go up? Each one has a different fix, and a total can hide all four at once.
In a growing company there’s a second reason. Once you’re no longer on every job, the estimate is the only plan the crew lead has. If they can see the budget in hours for their part of the job, they can manage to it. If the only number is the contract price, they can’t.
Step 1: Turn the estimate into a job budget
Use the same cost lines you estimated with. If the estimate says “tile labor, 60 hours,” the budget says “tile labor, 60 hours,” not “labor, $2,700.”
- Labor by phase, in hours. Demo, rough-in, framing, finish, whatever phases your trade uses. Hours are what a crew lead can control; dollars follow from them.
- Materials, grouped the way you buy them.
- Subcontractors, one line each.
- Equipment, rentals and disposal.
- Other direct costs: permits, delivery fees, anything else that belongs to this job.
Keep three budget columns: the original budget, approved changes (from signed change orders) and the revised budget. Approved changes add both price and cost. Without that column, every change order looks like an overrun.
Step 2: Record actual costs on the same lines
The comparison is only as good as the actuals:
- Labor: timesheets on the job, ideally by phase, at your burdened hourly cost (wages plus payroll taxes, insurance and benefits).
- Materials: every receipt and supplier invoice assigned to the job, including the small runs to the supply house.
- Subcontractors: their invoices, against their line.
- Rentals and other costs: on the job, not in general overhead.
Two rules make this work: costs go on the job the day they happen, and every cost has a line. A receipt that sits in a truck for three weeks, or labor booked to “shop time” because nobody knew which job it was, makes the comparison wrong.
Step 3: Read the variance
For each line:
- Variance ($) = actual − revised budget. A positive number means over budget.
- Variance (%) = variance ÷ revised budget.
Then write one sentence on why for every line that’s meaningfully over. Decide in advance what “meaningfully” means for you, for example more than 10% or more than $300 on a line. Below that, don’t spend time on it.
Example: a bathroom remodel
All numbers are made up to show the method. Labor is at an assumed burdened cost of $45 an hour. The contract was $29,000. A signed change order added a heated floor circuit: $600 to the price, $250 to the electrician’s cost.
| Cost line | Original budget | Approved changes | Revised budget | Actual | Variance | Why |
|---|---|---|---|---|---|---|
| Demo labor | 24 h, $1,080 | $1,080 | 22 h, $990 | −$90 | ||
| Framing and drywall labor | 30 h, $1,350 | $1,350 | 38 h, $1,710 | +$360 | Water damage behind the vanity, repaired without a change order | |
| Tile labor | 60 h, $2,700 | $2,700 | 78 h, $3,510 | +$810 | Herringbone floor estimated as a straight lay | |
| Plumbing (sub) | $3,200 | $3,200 | $3,200 | $0 | ||
| Electrical (sub) | $1,600 | +$250 | $1,850 | $1,850 | $0 | |
| Materials | $8,400 | $8,400 | $9,120 | +$720 | Extra tile for the herringbone cuts | |
| Dumpster and rentals | $650 | $650 | $650 | $0 | ||
| Total cost | $18,980 | +$250 | $19,230 | $21,030 | +$1,800 |
| Planned | Actual | |
|---|---|---|
| Price | $29,600 | $29,600 |
| Gross profit | $10,370 | $8,570 |
| Gross margin | 35.0% | 29.0% |
Six points of margin went missing. The line-by-line view shows where:
- $1,530 of the $1,800 has one cause: the herringbone pattern was priced like a straight lay, so both tile labor and tile material ran over. That’s an estimating problem. The fix is an estimating rule for patterned tile, not a talk with the crew.
- $360 is unbilled work: real damage, repaired without a change order. That’s a process problem. The fix is the change order rule, which the crew lead already had.
- The electrical line shows why the revised budget matters: compared with the original budget, it would look $250 over when the customer paid for it.
Step 4: Check while the job is running
A comparison after the job closes teaches you something for the next one. A comparison during the job can still save this one.
For jobs longer than a week, check at fixed points, for example at the end of each phase or every Friday. The quickest check is hours used vs. work done for each labor phase:
| Phase | Budget hours | Hours used so far | Work done | Signal |
|---|---|---|---|---|
| Tile | 60 | 42 | About half | Heading for about 84 hours. Find out why now |
If tile is half done and 70% of the hours are gone, there’s still time to act: check the layout, move a more experienced setter onto it, or, if the scope really changed, write the change order before the work is finished.
Ask the crew lead, not just the numbers. They often know why a phase is running long before the timesheets show it.
Step 5: Sort every variance into one of five causes
| Cause | Looks like | The fix is in |
|---|---|---|
| Estimate was wrong | The same line runs over on similar jobs | Your estimating assumptions and price list |
| Scope changed without a change order | Extra work with no matching price | The change order process |
| Productivity | Waiting for materials, inspections or other trades; rework; a new crew learning | Scheduling, readiness and training |
| Price changed | Materials or subs cost more than when you estimated | Price updates and how long a quote stays valid |
| Recording error | Costs on the wrong job or line, missing receipts | How and when costs are recorded |
After a few months, count the causes. If most of your overruns trace back to the estimate, the field isn’t the problem. If most are unbilled scope, no amount of estimating will fix it.
Step 6: Feed it back into the next estimate
The comparison only pays off if it changes something:
- Update the assumption behind the miss. In the example: patterned tile gets its own labor rate and a higher waste factor.
- Review closed jobs once a month, not one at a time. A list of the month’s jobs with planned and actual gross margin shows patterns no single job can: one job type that always runs long, one crew that’s always on budget.
- Share the results with the estimator and the crew leads. The estimator learns what the field really takes. The crew lead sees that the budget is a real number, not a guess from the office.
Your next action
- Pick one job starting in the next two weeks.
- Turn its estimate into a budget with labor in hours by phase, plus materials, subs and other costs, and give the crew lead the labor hours for their phases.
- Check hours used vs. work done once a week while it runs.
- When it closes, fill in the actual column, write one sentence for every line over your threshold, and sort each one by cause.
Free tools: the Budget vs. Actual Job Cost Worksheet spreadsheet has the cost lines from this lesson and calculates the variance and the margin for you. For the actual cost of a labor hour, use the labor burden calculator.
What to review:
- Planned vs. actual gross margin on every closed job
- Which cost lines go over most often
- How many overruns trace back to the estimate vs. the field vs. unbilled scope
Next lesson: find where margin leaks between the estimate and the invoice, across all your jobs, not just one.
Where MotionOps helps
In MotionOps, actual costs land on the job as the work happens:
- Job Costing: compares each job’s revenue with its actual labor and material costs, and shows the profit margin.
- GPS Time Tracking and Team Member Timesheets & Approval: crews clock in and out, with the location shown on a map, and field managers review and approve timesheets from the mobile app.
- Field Expense Tracking and AI Receipt Capture: purchases, returns, tools and rentals are recorded against the job, with receipts scanned to prefill the cost.
- Change Order Requests: change orders are managed inside the work order, so approved changes are part of the job’s record.
Related: construction job costing and construction profit margins. See plans and pricing, or book a MotionOps demo.
Contractor Scaler Hub: Grow Profit, Not Just Revenue, lesson 2 of 5
- Previous lesson: Profit Margins 101: Is Your Growth Actually Making Money?
- Next lesson: Margin Erosion in Construction: Where Profit Leaks Between Estimate and Invoice
- Course toolkit: Grow Profit, Not Just Revenue toolkit (PDF)
- All courses and lessons: Contractor Scaler Hub



