The Short Version
I've worked with hundreds of builders who thought their estimating was on target. Then we ran a bid-to-actual analysis on ten closed jobs and discovered something shocking: they were systematically off by the same 5-8% on every similar job, but in different directions depending on the category. Labor was 12% over. Materials were 3% under. Change orders were 18% over. They didn't have an estimating problem — they had a category-level visibility problem. This post walks through how to run a bid-to-actual analysis quarterly, which five line items matter most, how to interpret the variance patterns, and what changes to your estimating process actually fix the drift.
Sound Familiar?
Signs you need bid-to-actual analysis:
- You feel like your estimates are close on some jobs and way off on others, but you're not sure which categories are the culprit
- Your bid gross margin targets are 35%, but your job P&Ls show 28-32% — somewhere between estimate and completion, 3-7 points are slipping away
- You've caught the same mistake on three different jobs (e.g., underestimating MEP) but you're not tracking it systematically
- You know change orders are killing your margin, but you're not quantifying how much — you haven't measured the pattern
- Your last estimate validation was 'the owner walked it and it felt right' — no actual comparison of bid vs actual
- You're winning bids at the price you intended but the job ends at lower margin than expected
What We Found
The Five Line Items That Account for 70% of Bid-to-Actual Variance
After analyzing thousands of construction jobs, the same pattern emerges: bid-to-actual variance concentrates in five categories. Understanding which categories drift in which direction tells you exactly where to tighten your estimating.
1. Electrical / MEP (Mechanical, Electrical, Plumbing)
Variance: typically +8 to +15% over estimate
Why: MEP scope gets revealed as the project progresses. "We didn't know the panel would require a service upgrade until the electrician got in the wall." "The existing plumbing routing forced a different layout." "Code requires 30% more runs than the estimate assumed." Most estimates use old site surveys or incomplete plans. By the time the MEP sub is actually working, scope has shifted. This category is the single biggest overrun on most jobs.
2. Change Orders
Variance: typically +12 to +25% over estimate (or larger)
Why: Change orders are almost always under-estimated. Owners, architects, and field conditions generate scope creep that the estimate didn't foresee. The builder absorbs it as change order work rather than eating it. Estimates assume "average" change order volume (typically 2-4% of contract value). Most jobs actually see 5-10%. If your estimates assume 3% change order contingency and your actual average is 7%, you're systematically short $16K on every $500K job.
3. Site Management / Supervision
Variance: typically +10 to +18% over estimate
Why: Site supervision hours are notoriously under-estimated. The job takes longer than anticipated. Rework due to supply delays, inspections, or spec changes extends the timeline. The superintendent is on-site 20% longer than the estimate assumed. Supervision is budgeted at 6 weeks; the job actually takes 8 weeks. That's your variance.
4. Material Pricing
Variance: typically −2 to +5% of estimate (low variance, but frequent)
Why: Material variance is usually tighter than labor because quotes are more recent and based on actual pricing. However, supplier discounts you negotiated mid-job aren't reflected in the estimate (good variance), or a material shortage forced a substitution at 15% premium (bad variance). The variance here is usually smaller percentage-wise than MEP or labor, but it's consistent enough to show up in aggregated reporting.
5. General Labor (Framing, Rough-In, Finishing)
Variance: typically +5 to +12% over estimate
Why: Labor productivity estimates assume normal conditions: crews are up to speed, weather is good, the job site is organized. Reality: weather delays, rework on sections, new crew members learning the job, or complexity that didn't show up in the plans. A framing estimate assumes 40 hours to frame a wall. The actual job takes 48 hours because the wall had an unexpected load-bearing situation and the crew had to reinforce it mid-frame.
These five categories typically account for 70%+ of bid-to-actual variance on any given job. The other 30% is distributed across 15-20 smaller categories that don't show consistent patterns. Focus on the big five.
How to Run a Bid-to-Actual Analysis in 90 Minutes
This isn't a complex process. It's a disciplined comparison. Here's the workflow:
Step 1: Select closed jobs to analyze (15 minutes)
Pick 8-12 jobs that closed in the last quarter that are similar enough to compare (same project type, size range, timeline). You're looking for common patterns, so pick jobs that represent your core business. Don't analyze one $50K renovation alongside one $2M new build — they won't produce meaningful patterns.
Step 2: Pull the bid estimate and actual costs (20 minutes)
For each job, export two documents:
— The original bid estimate (cost breakdown by category)
— The actual job cost (from JobTread Job Profit Summary, QuickBooks job costing, or your accounting system)
Line them up side-by-side for visual comparison. Use consistent category names so you're not comparing "framing" on one to "structural framing labor" on another.
Step 3: Calculate variance by category (30 minutes)
For each major category, calculate: (Actual − Estimate) ÷ Estimate × 100%
Positive variance = you underestimated (costs ran higher than bid)
Negative variance = you overestimated (costs ran lower than bid)
Example for a $400K renovation:
Category: Electrical
Estimate: $35,000
Actual: $39,200
Variance: ($39,200 − $35,000) ÷ $35,000 × 100% = +12%
Do this for all major categories. Create a simple spreadsheet with rows for each job and columns for each category, with variance percentages populated. A 10-job sample with 8-10 categories is 80-100 data points. Patterns emerge fast.
Step 4: Identify patterns (15 minutes)
After 10 jobs, look at which categories consistently overshoot or undershoot:
— If MEP is +8%, +11%, +14%, +10%, +9% across five jobs, you have a pattern. Your MEP estimates are systematically low by roughly 10%.
— If materials are −1%, +2%, −3%, +1%, −2%, you don't have a pattern. Material estimates are already tight.
— If change orders total 7%, 8%, 6%, 9%, 7% across five jobs and your estimate assumes 3%, that's a clear miss.
Step 5: Document the findings and update process (10 minutes)
Summarize the top three categories where you're off. Document the pattern and severity. Write one sentence per category: "Electrical consistently runs 10-12% over estimate. Next cycle: add 12% to electrical estimate and re-validate in Q2."
That's it. 90 minutes of work. Now you have data-driven adjustments to make to your next round of estimates.
What to Actually Change Based on What You Discover
Running bid-to-actual analysis is worthless unless you change something based on the results. Here's the translation layer:
If electrical is consistently +10% over estimate:
Action: Add 10% to your electrical estimate on the next bid. Don't add 5% "to see what happens." If the pattern is clear across eight jobs, trust the data. You're not guessing — you're correcting a known bias.
If change orders are running +4-6% over the estimated 2-3%:
Action: Update your change order contingency assumption from 2-3% to 5% on your next bid. This is particularly important for project types (custom homes, renovations, additions) where scope drift is inevitable. You're building accuracy into the estimate instead of hoping it doesn't happen.
If site supervision is running +15% longer than estimated:
Action: Review your timeline assumptions. Are you underestimating project duration by 15%? Or are you estimating supervision at 40 hours/week when the job actually needs 46 hours/week? Tighten the assumption and update the supervision line item accordingly.
If materials are consistently −2-3% (under estimate — good news):
Action: Don't over-correct. You're either getting supplier discounts or your material pricing is slightly aggressive. Don't reduce material estimates if they're already tracking accurately. Leave that alone and focus on categories where you're off.
If labor productivity varies wildly (+5% on one job, +18% on another, −2% on a third):
Action: The pattern isn't consistent, which means either: (a) your labor estimates are reasonable and variance is driven by job-specific factors (site conditions, crew experience), or (b) you're not capturing the right data. If job-specific factors drive labor variance, don't overcorrect to a global adjustment. Instead, build more detailed labor scoping into your estimate process — specific crew experience level, site complexity rating, etc.
The key: make specific adjustments, not vague ones. "Improve estimating" is useless. "Add 10% to electrical estimates in our next round of bids based on Q1 bid-to-actual showing +10% variance across eight jobs" is actionable and testable.
Set up a quarterly bid-to-actual analysis workflow in JobTread
Start My JobTread SetupFrequently Asked Questions
Start with a quarterly sample of 8-12 similar jobs to identify patterns. Analyzing every single job is overkill and produces analysis paralysis. Eight to twelve jobs in a similar size/type range are enough to spot real patterns (e.g., electrical consistently +10%) versus noise (one electrical job was +15% because of an unusual site condition). After you've adjusted your process based on one quarter's analysis, run the next quarter's sample again to see if your corrections are working.
Include change order value in the comparison. If you estimated $400K with 3% assumed change orders ($12K), but the job actually ended at $420K with $28K in change orders, the fair comparison is $412K actual versus $412K estimate (original estimate + change orders performed). The variance then shows whether you were right about base scope and wrong about change order volume. This tells you if the problem is inadequate change order contingency or poor base estimate.
Healthy margins now doesn't mean the pattern will hold. If you're underestimating by 8-10% per job but your historical margins are 30%, you have a temporary buffer that will evaporate if: (a) the market gets competitive and you can't raise prices as fast as costs rise, or (b) you lose a major client relationship that was more forgiving of change orders. Fix the underestimation now while margins are good. Tighter accuracy creates pricing buffer for future competition.
You can't always. But the goal of bid-to-actual analysis isn't to blame the estimator — it's to find the pattern. If every electrical estimate is 10% low, the root could be: (a) the estimate didn't scope the job correctly, (b) the electrician works slower than you assumed, (c) site conditions revealed scope that wasn't known, or (d) code requires more work than the estimate assumed. All four require different fixes. Run the analysis, spot the pattern, then dig into 1-2 jobs in detail to understand the root. After that, update your process.
Price increases should be driven by cost inflation, not estimation errors. Bid-to-actual analysis reveals that you underestimated something and need to adjust your process going forward — not that your prices were too low. However, if your analysis shows change orders are running 6-7% and your price assumes only 2%, that's real scope creep exposure that your bid should compensate for by allocating higher contingency or a slightly higher base price. The analysis informs pricing discipline, not justification for blanket price hikes.