Budget vs actuals compares what you planned to spend and earn against what actually happened, expressed as a variance in dollars and percent. Run it monthly on every open job and at the company level. Do that consistently and you catch a losing job in week three instead of at closeout.
TL;DR:
- Flexible budgeting is essential for accurately measuring job performance when scope changes, such as a 20% increase in volume, occur during a project.
- Tracking price, quantity, and timing variances separately helps identify the true cause of overspending or underbilling instead of relying on a single blended variance figure.
- Running monthly budget versus actual reports within three days of closing ensures variances are timely addressed, especially for thresholds over $5,000 or 10% of a line item.
- Proper alignment of budget categories with accounting systems, along with automated data integration, reduces manual errors and speeds up the variance analysis process.
- Using detailed job-level examples reveals that most variances stem from market-driven price increases, timing delays, or efficiency issues, guiding targeted corrective actions.
Table of Contents
- What Budget Vs Actuals Covers and Why It Matters for Job Profit
- Core Formulas Every Trade Sub Should Know
- Digging Into Price, Quantity, and Timing Variances
- Building a Budget Vs Actual Report That People Actually Read
- Job-Level Examples: Electrical, Plumbing, and HVAC
- Making Budget Vs Actual Tracking Fast Instead of Painful
- Dave's Practical Rules for Busy Estimators and PMs
- How Subascent Helps Subs Close the Budget Vs Actual Gap Faster
- Sources
What Budget Vs Actuals Covers and Why It Matters for Job Profit
Budget vs actuals, often shortened to BvA, is the practice of lining up planned numbers against actual results and calculating the gap between them. That gap is the variance, and it shows up at two levels that matter to a trade contractor: the company-wide profit and loss statement, and the individual job.
Most subs default to a static budget, meaning one fixed plan set at the start of the year or the start of a job. That works fine until activity changes. If a job scope grows by 20% through change orders, comparing actuals against the original static number makes every cost look "over budget" even when performance was solid. A flexible budget adjusts the plan to match actual volume, which is the fairer basis for judging crew and material performance once scope shifts.
For specialty trades, BvA tracking earns its keep in a few specific ways:
- It shows which jobs are actually profitable before you close them out and find out the hard way.
- It catches missed or under-billed change orders while there's still time to invoice for them.
- It flags cash flow gaps caused by billing lag, not just cost overruns.
- It gives estimators real feedback on whether their bids are holding up in the field.
Core Formulas Every Trade Sub Should Know
The math behind budget vs actual tracking is simple. The trouble is getting the sign right, since "favorable" means something different for revenue than it does for cost.
- Dollar variance: Variance = Actual − Budget. For revenue, a positive number is favorable (you earned more than planned). For a cost line, a positive number is unfavorable (you spent more than planned).
- Percentage variance: Variance % = (Actual ÷ Budget − 1) × 100, or equivalently (Variance ÷ Budget) × 100. This lets you compare a $2,000 miss on a $10,000 line against a $2,000 miss on a $100,000 line and see which one actually matters.
- Revenue shortfall example: Budgeted revenue on a job was $80,000; actual billed was $74,000. Variance = −$6,000, or −7.5%. Unfavorable, and worth a look at whether change orders went unbilled.
- Materials overspend example: Budgeted material cost was $22,000; actual was $27,500. Variance = +$5,500, or +25%. Unfavorable, and well past most materiality thresholds.
- Flexible budget adjustment: If the job's linear footage grew from 500 feet to 600 feet (a 20% volume increase), the flexible budget scales the material line to $26,400 before you calculate variance. Actual of $27,500 against that adjusted number is only a +$1,100 (4.2%) miss, a very different story than the static comparison suggested.
Digging Into Price, Quantity, and Timing Variances
A single dollar variance tells you something went wrong. It doesn't tell you why. Cost variance analysis splits the total into components so you're fixing the actual problem instead of guessing.
- Price (rate) variance: (Actual price − Budgeted price) × Actual quantity. This isolates whether you paid more per unit than planned, regardless of how much you bought.
- Quantity (efficiency) variance: (Actual quantity − Budgeted quantity) × Budgeted price. This isolates whether you used more material or labor hours than planned, at the price you expected to pay.
- Labor rate vs. labor efficiency: Same logic applied to crew hours. If a journeyman rate came in $3/hour higher than budgeted but hours matched the estimate, that's a pure rate variance, a wage or overtime issue, not a productivity problem.
- Timing variances: A cost that lands in the wrong month, like a supplier invoice delayed 30 days, isn't a real overspend. Tag it as non-recurring so it doesn't distort your trend and doesn't trigger a false alarm on the next report.
Splitting a $5,500 materials variance often reveals that $3,200 came from a price increase on copper wire (a market issue you can't control mid-job) and $2,300 came from buying more units than the takeoff called for (a quantity issue worth a rework review).
Pro Tip: Never let a single blended variance number drive a decision. A $5,000 unfavorable materials variance that's 90% price and 10% quantity needs a supplier conversation, not a crew talking-to.

Building a Budget Vs Actual Report That People Actually Read
A useful budget vs actual report follows a consistent column order so anyone on your team can scan it in under a minute:
- Budget – the planned amount for the period or job.
- Actual – what actually posted.
- Variance $ – actual minus budget.
- Variance % – variance divided by budget.
- YTD – year-to-date totals for trend context.
- Remaining budget – what's left to spend or bill.
- Forecast – your updated estimate to complete.
Platforms like Power BI's Actual vs Budget reports structure exactly this way, with drill-down from a summary KPI view down to account-level detail. That's the model worth copying even in a spreadsheet: a top-level view by job or department, with the ability to click into labor, materials, subs, and equipment lines when a number looks off.
Set a materiality threshold before you start reviewing, not after. A common starting rule is to flag anything over $5,000 or 10% of the line item, whichever is more restrictive, and adjust the dollar figure up or down based on your typical job size. A $5,000 shop running a $200,000 job should probably tighten that threshold; a $10 million shop can loosen it.
Cadence matters as much as format. Run BvA monthly at minimum, and target report delivery within three business days of close so the numbers are still actionable, not archaeology. Anytime a variance crosses your threshold, treat it as a trigger to reforecast that job, not just a line to note and move past.
One thing that quietly wrecks BvA accuracy: budget categories that don't match your chart of accounts. If your budget calls it "electrical rough-in" and QuickBooks calls it "materials, job 4402," someone is manually reconciling every month, and errors creep in. Align the two structures once and the mapping headache disappears for good.
Job-Level Examples: Electrical, Plumbing, and HVAC
Numbers make more sense with a job attached to them. Here's how the same variance math plays out across three trades.
- Electrical job, materials variance. Budgeted wire and conduit at $18,000; actual came in at $21,200, a $3,200 unfavorable variance. Decomposing it: price variance accounts for $2,400 (copper prices rose mid-job) and quantity variance accounts for $800 (slightly more conduit used than the takeoff estimated). Action: renegotiate the next PO with the supplier, and spot-check the takeoff against as-built conditions.
- Plumbing job, timing distortion. A $9,000 fixture invoice posted in month two instead of month one because the supplier billed late. The month-one report showed a suspicious underspend; month two looked like a spike. Action: flag it as a timing variance in the commentary, not a cost problem, so nobody chases a ghost.
- HVAC job, labor efficiency. Budgeted 120 install hours; actual hit 148 hours at the same hourly rate. That's a pure efficiency variance, 28 hours over, worth roughly $1,400 at a $50 blended rate. Action: review crew scheduling and timecards. Often the culprit is a two-man crew doing a three-man job, not a skills problem.
The most common pitfalls that blow up otherwise-clean BvA numbers on trade jobs: missed change orders that never got added to the budget, payroll hours misposted to the wrong job number, and missing receipts that leave a real cost invisible until the vendor statement lands weeks later.
Pro Tip: If a job's variance report looks too clean, check for missing costs before you celebrate. A job with zero variance three weeks in a row usually means something isn't getting coded to it yet, not that the estimate was perfect.

Making Budget Vs Actual Tracking Fast Instead of Painful
BvA falls apart operationally when it depends on someone manually exporting five spreadsheets every month. The fix is connecting your real data sources once: your accounting ledger (QuickBooks or similar), payroll, purchase orders and committed costs, and field timecards. Cost loading techniques used in project scheduling apply the same logic, tying planned spend to a timeline so you can see committed versus actual cost at any point, not just at month-end.
A workable close checklist looks like this:
- Pull ledger actuals and reconcile against job-coded transactions.
- Confirm payroll hours posted to the correct job numbers.
- Update committed costs from open POs so "budget remaining" reflects real obligations, not just what's been invoiced.
- Apply your materiality filter automatically rather than eyeballing every line.
- Draft variance commentary using a fixed structure: state the variance, name the driver, note whether it's recurring, recommend the action.
Target three business days from close to a finished report. Any variance that clears your materiality threshold should automatically feed into a rolling forecast update, since a $6,000 miss in March is a preview of April unless something changes.
Dave's Practical Rules for Busy Estimators and PMs
Start with three jobs, not thirty.
I've seen fast BvA catch a plumbing job losing money on hour overruns by week two, in time to re-crew it before the loss compounded. Write commentary around the action, not the number. "Overspend $3,200" tells nobody what to do next.
— Dave
How Subascent Helps Subs Close the Budget Vs Actual Gap Faster
Subascent is built around one problem trade subs live with every month: budgets and actuals living in different systems until someone forces them together. Job costing maps committed costs, PDF takeoff data, and labor hours to each job automatically, and job costing setup syncs directly with QuickBooks so nothing needs re-entry.

That means faster closes, job margins you can trust mid-project instead of after it, and far fewer change orders that slip through uninvoiced. Mobile timecards feed labor variance data straight from the field, and profit analytics surface which jobs need attention before they're a problem. Start a free trial at Subascent and see your first budget vs actual report before your next close.
Sources
For deeper report-building guidance, see job costing for trade contractors and equipment costing for contractors, both internal Subascent resources.
- Actual vs. Budget (Power BI Report) - Business Central
- How do managers evaluate performance using cost variance analysis (LibreTexts)
- What is the cost variance formula? — AccountingTools
- Budget vs Actual Analysis: Complete Guide for Finance Controllers - Planir
