When a job goes over budget on materials, the estimate gets blamed first, and often that is the wrong suspect. There are four ways material cost lands above the number you carried, and only one of them is an estimating error. The others are: the market moved between bid day and buy day, the quote you bid off did not hold, or the invoices drifted away from the prices you were promised. Each leaves a different fingerprint, and you can tell them apart from paperwork you already have.
This matters because the fix is completely different in each case. A takeoff error is fixed in the estimating department. A market move is fixed with escalation language and shorter bid validity. A quote that did not hold is fixed with the supplier, usually with a credit. And drift on the invoices is fixed by checking unit prices, which nobody has time to do and which is where the money quietly is.
Here is the order to check them in, and how to know when you have found it.
Start by splitting the overrun into price and quantity
Before you argue with anyone, run two numbers on your top material lines. Did you pay more per unit than you carried, or did you use more units than you took off? Those are the material price variance and the material quantity variance, and they are calculated separately for exactly this reason. The formulas and the routine are in material price variance versus quantity variance.
The split tells you which building the problem lives in:
- Mostly price variance: buying, quoting, or market. Nothing to do with the field.
- Mostly quantity variance: takeoff, waste, rework, scope, or material billed and never delivered.
- Both: two problems. Work them separately or you will fix neither.
Do this first. Nearly every unproductive post-mortem meeting happens because somebody brought a total instead of a split.
Suspect one: the market moved between bid day and buy day
This is the one that is nobody’s fault and that estimators get blamed for anyway.
Construction input costs and contractors’ bid prices do not move together, and the gap has been wide. AGC of America reported that in May 2026 the producer price index for inputs to new nonresidential construction rose 1.8% for the month and 8.4% year over year, the largest annual increase since the pandemic, while the index for what contractors charge rose only 3.5% year over year. April 2026 was the same shape: inputs up 6.6% year over year against bid prices up 3.6%. That spread is the structural reason material overruns are common right now even when the takeoff was clean.
Individual commodities moved much harder than the aggregate. In that same May 2026 release, aluminum mill shapes were up 48.8% year over year and copper and brass mill shapes up 26.8%. The underlying BLS series are public and you can pull them yourself: copper and brass mill shapes went from 747.384 in January 2026 to 803.275 in June 2026 (preliminary), and steel mill products went from 315.369 to 361.439 (preliminary) over the same months.
How to confirm it was the market. Take your bid date and your purchase date, pull the relevant index for both months, and compute the percentage move. If your unit price rose roughly in line with the index, that is the market. If your price rose materially more than the index, something else happened and you should keep reading.
One honest caveat: an index tracks a broad category, not your SKU at your branch. It tells you the direction and rough magnitude, not your exact number. Use it to decide whether to make a phone call, not as proof in the call.
Suspect two: the quote you bid off did not hold
You did not estimate that gear package. You put a supplier’s number in the bid. If the final invoices exceed it, that is a quote problem, not an estimating problem, and it is remarkably common.
A contractor on the Mike Holt forums described the pattern directly: “They may quote the stuff on bid day at say $87,000 but when you add all the total invoices up at the completion of the project they can be from $87,000 to $100,000 or more.” The control the same poster suggests is the simplest one available: “keep a running tally on what has been invoiced and when it hits the quote amount flag it.”
Three specific ways a quote lands higher than it read:
Scope was missing from the quote. The same thread describes gear quotes arriving without the accessories: “One trick they play is to " forget" to put fuses in disconnects, include lamps and other things. This way they look lower at first but when you build the job when you add in the fuses or lamps they are higher.” Whether that is deliberate or just the way a package gets configured, the effect on your budget is identical, and the defense is the same: compare quote scope line by line against your takeoff before you use the number.
The quote expired or its quantities were exhausted. A job quote is scoped to a quote number, named quantities, and a validity period. Buy past those and the material reprices to stock pricing, and nobody calls to tell you. Write the quote number and the covered quantity on your own copy so you know when the quote is spent.
The quote arrived too late to check. Contractors complain about gear and lighting numbers landing at the last minute, and one forum poster reads it as tactical: “The idea is if they give you the number at the very last minute you will not have time to shop it, or if it’s a specified package, you will not have time to put together an alternate package.” The same thread supplies the fair reading, and it deserves equal weight: “A lot of times, especially with lighting, the reason the supply house is giveing you the price last minute is because that is when they get it from their vendors.” Your distributor is often waiting on a manufacturer quote the same way you are waiting on theirs. Either way, a number you could not check is a number that can surprise you.
How to confirm it was the quote. Pull the quote and total the invoices carrying that quote number. If they exceed the quote, you have a quote versus invoice mismatch, and it is one of the easier things to get credited when it is caught fresh.
Suspect three: the invoices drifted
This is the quietest one, and the reason it survives is that no single invoice looks wrong.
Two mechanisms do most of the damage. The first is falling off your negotiated price without anyone deciding to: a substituted part number, a branch that does not have your agreement loaded, a will-call written as a walk-in ticket, a purchase made on the wrong account. Those are ordinary, unglamorous lookup failures, and they are explained in contract price versus counter price. The second is slower: the same SKU costing a bit more every couple of months, which is material price creep.
Two more are worth a specific look on any job that ran over:
- Quantity billed against quantity delivered. A short delivery billed in full reads in your job cost as a field overrun, because you paid for material nobody installed. This is what receiving paperwork exists to catch, and it is the heart of three-way matching.
- The same invoice paid twice. More likely on counter-heavy jobs, where a ticket and a consolidated monthly statement can both circulate for one purchase.
How to confirm it was drift. Take your three largest material SKUs on the job. Pull every purchase of each across the last twelve months and lay the unit prices out by date, with the branch and account on each row. Drift is obvious in that view and invisible in every other view. If a lot of your material left on counter tickets, capturing it well enough to run this check is its own problem, covered in job costing material when purchases are counter runs.
Suspect four: the estimate really was wrong
Sometimes it was. Refusing to consider it is as unserious as blaming it by default.
The tells are specific. A pure estimating miss shows up as a quantity variance with no field explanation: the takeoff count is simply lower than what got installed, and the as-built confirms the installed count. A unit-price miss shows up as a price variance that is consistent across every branch, every account, and every month, and that does not track any published index. In that case the estimate was carrying a stale price, which is a database problem, not a judgment problem.
There is also a legitimate category that is neither the estimator’s fault nor a supplier’s: the estimate was never meant to carry that precision. AACE International’s estimate classification system uses maturity of project definition as the sole primary determinant of estimate class, and notes that accuracy ranges are an indicative range of ranges rather than fixed values, with true accuracy requiring quantitative risk analysis. A conceptual estimate prepared on partial documents is not a bid, and treating it as a budget to be held to is a scoping decision made upstream of the estimator.
And scope growth is not an overrun at all. If the installed quantity exceeds the takeoff because the work changed, that is a change order that did not get written. Filing it as a material variance buries it permanently.
The diagnostic order, in one table
Work top to bottom. Stop when the evidence matches.
| Check | Evidence you need | Points to |
|---|---|---|
| Split price vs quantity variance | Estimate line, actual dollars, actual quantity | Which building the problem is in |
| Compare price move to a published index | Bid month and buy month PPI values | Market move |
| Total invoices against the quote number | The quote and the invoices citing it | Quote that did not hold |
| Compare quote scope to takeoff scope | Quote line items, your takeoff | Missing scope in the quote |
| Lay out unit price history by SKU | Twelve months of your own invoices | Contract fall-through or price creep |
| Compare billed quantity to packing slips | Invoices and delivery documents | Short shipment billed in full |
| Compare takeoff count to as-built count | Takeoff and field records | Takeoff error or unwritten change order |
What to change before the next bid
Most of these are cheap, and none of them require new software.
Keep the paperwork that supports a claim. Procore’s guidance on escalation notes that recovery depends on retaining initial quotes, bid proposals, purchase orders and invoices. A claim without the bid-day quote attached is a conversation, not a claim.
Consider escalation language, and be clear about what it is. Price escalation protection is contractual. Nothing requires an owner to accept it, and you get it only if it is negotiated into the contract. ConsensusDocs publishes 200.1, an amendment that names the specific impacted materials on a project and adjusts the contract price against an agreed objective market index, in both directions. Its commentary describes pairing a minimum trigger threshold with a cap, citing a sample 3% trigger and FAR 52.216-2 as a standard 10% limit, and names BLS monthly publications as an objectively verifiable index source. Note also that under 200.1 the contractor gets no overhead and profit on the equitable adjustment, and both parties carry a duty to mitigate. That is a real protection with real limits. AGC has characterized price escalation and supply chain disruption as the number one issue in construction contracts, so the ask is not unusual.
Shorten your own bid validity when your suppliers shorten theirs. If the gear quote is good for 15 days, a 60 day bid validity is you carrying 45 days of market risk for free.
Run the tally during the job, not after it. Invoices against the quote, weekly. The overrun you find in month two is negotiable. The one you find at closeout is a lesson.
The short version
- Split the overrun into price variance and quantity variance before you assign blame. Most post-mortems fail because somebody brought a total.
- Check the market first. Input costs have been running well ahead of bid prices, and the indexes are public.
- Check the quote second. Total the invoices carrying the quote number, and compare quote scope to your takeoff.
- Check the invoices third. Contract fall-through and price creep hide inside line items that individually look fine.
- Check the estimate last, and check it honestly. A quantity variance the as-built confirms is a takeoff issue; a quantity change the scope caused is a missing change order.
- Escalation protection is contractual, not automatic. Ask for it, keep the quotes and invoices that would support it, and know its limits.
Sources
- Prices for Construction Materials Climb at Highest Rate Since Pandemic (May 2026), AGC of America
- Surging Materials and Energy Costs Drive Construction Input Prices Sharply Higher in April, AGC of America
- PPI: Copper and Brass Mill Shapes (WPU102502), U.S. Bureau of Labor Statistics
- PPI: Steel Mill Products (WPU1017), U.S. Bureau of Labor Statistics
- Ethics of sharing competing supply house prices with each other, Mike Holt Forums
- Does anybody else have a problem with supply house giving you a price on lights/gear, Mike Holt Forums
- Professional Guidance Document 01: Estimate Classification, AACE International
- Escalation Clause, Procore
- ConsensusDocs 200.1 Time and Price Impacted Materials
- De-escalating the Impact of Price Escalation, ConsensusDocs
- ConsensusDocs 200.1: An Amendment to Adjust for Time/Price Impacted Materials, Kegler Brown
- Price Escalation Continues to Be Top Issue in Construction Contracts, AGC of America