Skip to content
CheckMySupply.com
Job Costing and Material Variance

WIP Report Material Costs: What Your Banker Sees

Material cost overruns land in your WIP report before they land in your P&L. Here is how a banker and bonding agent read a contractor WIP, line by line.

By 10 min read

Your material costs show up in your WIP report as two numbers: cost incurred to date, and estimated cost to complete. When unit prices drift up quietly, the first number moves and the second one usually does not, because nobody re-forecasts the remaining buyout. That combination makes a job look further along and more profitable than it is. When the real cost lands, percent complete corrects downward, gross profit gets restated, and your banker and your bonding agent see a job that faded. On a contractor WIP report, material cost errors do not stay small and local. They come out as a credibility problem.

That is the whole mechanism. The rest of this post walks the arithmetic, shows where invoice-level price drift enters it, and covers what a lender or surety is actually reading when they open your schedule.

One honest caveat before we start. There is no public rulebook that says what a bank or a surety must do with your WIP. Underwriting criteria are each institution’s own, and what you are required to submit is set by your credit agreement, your bonding indemnity agreement, and your contracts, not by a regulation. This post describes the mechanics of the report and how the numbers behave. It does not tell you what any particular underwriter will conclude, because nobody outside that office can.

What a WIP report actually computes

A work in progress schedule is one row per open job and roughly eight columns. The core of it is percent complete on a cost-to-cost basis:

Percent complete = cost incurred to date / total estimated cost at completion

From that single ratio everything else follows:

  • Earned revenue = percent complete times the contract amount, including approved change orders.
  • Earned gross profit = earned revenue minus cost incurred to date.
  • Overbilling (billings in excess of costs and earned income) = amount billed minus earned revenue.
  • Underbilling (costs and earned income in excess of billings) = earned revenue minus amount billed.

Note what is in the denominator. Percent complete is not “how much pipe is in the ground.” It is your own estimate of what the job will cost in total, and you control that number. Every WIP figure downstream inherits whatever is wrong with it.

Total estimated cost at completion is itself two pieces: what you have actually spent, and what you think the rest will cost. The first is a fact, sitting in your job cost ledger. The second is a forecast, and it is the softest number on the page.

Material cost enters the WIP twice, and only one entry gets updated

Here is the specific failure. Say your material buyout on a job was estimated at $180,000. You are four months in, you have bought roughly half of it, and your unit prices on the recurring items have crept up six percent since bid day without anyone calling to tell you.

The cost-to-date column picks that up automatically. Every invoice you post carries the drifted price, so incurred cost rises with the real market. That is the honest half.

The cost-to-complete column does not pick it up. Unless somebody deliberately re-prices the remaining buyout, cost to complete stays at whatever the estimate said in the spring. So your denominator is understated, your percent complete is overstated, and the job reports earned profit it has not earned.

This is why committed cost tracking matters more than it sounds like it should. Purchase orders let you track committed cost and remaining committed cost at the job, cost code, or cost class level, and without them a contractor genuinely risks thinking a job is more profitable than it really is. A PO for material you have not received yet is the only artifact in your system that carries a current price for future cost. If your remaining buyout is under PO at today’s prices, your cost to complete is real. If it is not, your cost to complete is a memory of bid day.

An illustrative WIP row, before and after

The numbers below are illustrative. They are not from any real shop’s books, and the drift percentage is a round number chosen to make the arithmetic legible.

Same job, same day. The only difference is whether the remaining material buyout was re-priced.

WIP line As reported (stale cost to complete) Re-priced (material +6% on remaining buyout)
Contract amount $840,000 $840,000
Cost incurred to date $402,000 $402,000
Estimated cost to complete $318,000 $323,400
Total estimated cost $720,000 $725,400
Percent complete 55.8% 55.4%
Earned revenue $468,720 $465,360
Earned gross profit $66,720 $63,360
Gross margin at completion 14.3% 13.6%
Billed to date $495,000 $495,000
Overbilling $26,280 $29,640

Look at what a 6% miss on half a buyout does. Reported margin at completion drops seven tenths of a point, earned profit drops about $3,400, and overbilling grows by the same amount. None of those movements is dramatic on one job. That is exactly the problem: the individual number never looks big enough to chase, and it repeats on every open job at once.

The reason this reads worse than the dollars suggest

A margin restatement is small in dollars and large in signal, because of the order the numbers arrive in.

If your Q2 WIP says a job finishes at 14.3% and your Q3 WIP says 13.6% and the final says 12.9%, you have described a job that fades. Fade is read as an estimating or forecasting weakness rather than a market event, because the market moved for everyone and only your report was slow to say so. The same is true of overbilling that keeps quietly growing: it means you are collecting cash faster than you are earning it, and when the job closes, that cash has to come back out as cost.

The defensible version is not “we had no overruns.” Nobody believes that. The defensible version is “our June schedule flagged material escalation on four jobs, we re-priced the remaining buyout, and the September schedule matched.” A forecast that moves early and then holds reads as control. A forecast that holds flat and then collapses reads as surprise.

The outside numbers you can point at

You do not have to argue that material costs moved. It is published monthly, and it is the strongest exhibit you have for the gap between what you bid and what you are paying.

AGC of America’s read of the May 2026 producer price data found that the PPI for inputs to new nonresidential construction rose 1.8% for the month and 8.4% year over year, the largest annual jump since the pandemic, while contractors’ bid prices rose only 3.5% year over year. That is nearly five points of spread between what the industry buys at and what it sells at. The April 2026 release showed the same shape: inputs +6.6% year over year against bid prices +3.6%.

Underneath those aggregates, the specific series behave worse than the average. BLS shows copper and brass mill shapes at 645.990 in January 2025, 747.384 in January 2026, and 803.275 in June 2026 (preliminary). Steel mill products ran 315.369 in January 2026 to 361.439 in June 2026 (preliminary). Plastics pipe, the commodity series that covers PVC and CPVC pipe, went 171.280 in January 2026 to 182.609 in June 2026 (preliminary). BLS marks 2026 months as preliminary and revises them, so re-pull the current value before you put it in a package.

Two uses for this. First, it tells you which cost codes to re-forecast: if your remaining buyout is copper-heavy, a stale cost to complete is not a rounding issue. Second, it is context you can attach to your own schedule. A material escalation note that cites a published index is a different document from one that says costs went up.

Where your own numbers have to come from

Index data explains the market. It does not explain your invoices, and it is your invoices that hit the WIP. Two jobs on the same street can diverge on material cost for reasons that have nothing to do with the PPI: a branch that never got your agreement loaded, a substituted part number that fell off a special price, a quote that expired mid-job.

Standard cost accounting splits the gap into two pieces, and the split is worth doing because the two have different owners.

Variance Formula What it actually means
Materials price variance (actual price minus standard price) x actual quantity You paid more per unit than the estimate assumed
Materials quantity variance (actual quantity used minus standard quantity) x standard price You used more material than the estimate assumed
Total direct materials cost variance (AQ x AP) minus (SQ x SP) The combined miss, which is what the WIP shows you

Those are the standard definitions: materials price variance is the price difference times actual quantity, and quantity variance is the usage difference times standard price. Named causes of an unfavorable price variance include rush delivery charges, commodity price swings, supplier pricing power, and volume differing from the estimate.

The distinction matters because price variance and quantity variance point at different fixes. Quantity variance is a field conversation about waste, theft, rework, and takeoff accuracy. Price variance is a purchasing and invoice conversation, and it is the one that is almost never audited at the line level. Most shops reconcile invoice totals against the PO total and stop there. What that misses is the same SKU billed at three prices in four months, which is material price creep and shows up as price variance, not as anything anyone would call an error.

Also worth separating: a real market move versus a drift in your own pricing that nobody announced. Those look identical on a job cost report and different on a price history, and the practical test is covered in telling price creep from a market increase.

What actually controls this

The controls are boring, which is why they work.

Re-price the remaining buyout on a schedule, not on a surprise. Once a quarter minimum, monthly on jobs longer than six months. Take the open cost codes with material content, pull current pricing on the top ten SKUs by dollar, and adjust cost to complete. Document the date and the source.

Put remaining material under PO at a known price. A committed cost with a price on it converts a forecast into something closer to a fact, which is the entire argument for job POs.

Check invoice prices at the line, not the total. A three-way match against invoice, purchase order, and delivery receipt is the standard control, and the mechanics for a contractor are in three-way matching for contractors. It catches quantity and total errors. It does not by itself catch a unit price that has quietly climbed since March, because the price on the PO was already the climbed one. You need your own price history for that.

Reconcile job quotes against what you were actually billed. The gap between a quoted materials package and the sum of the invoices against it is a well documented pattern, and the fix is a running tally rather than a post-mortem. The shape of it, and the check, are in quote versus invoice mismatch.

Screen for duplicates before they get costed to a job. A double-billed invoice inflates cost to date, which understates percent complete on the next schedule and then reverses when you catch it. Two corrections in opposite directions on the same job read badly. The detection pattern is in duplicate supply house invoices.

Know which report shows leakage and which one hides it. Company-wide gross margin and margin by trade both average leakage away. Job-level margin does not. That comparison is worked through in gross margin by job versus by trade.

Before you send the next schedule

  • Confirm cost to complete was re-priced, not carried forward, on every job with material left to buy.
  • List the cost codes with the largest material content and check the last three unit prices you paid on each.
  • Separate the material variance into price and quantity. Report them separately.
  • Explain any margin movement over half a point before anyone asks, and attach the index reference if the cause was market.
  • Check that overbilling movement is explained by billing timing, not by an unrecognized cost.
  • Keep the invoice-level evidence. A schedule that can be traced to specific invoices is a different conversation from a schedule that cannot.

None of this is about your supply house doing anything wrong. Prices move, branches vary, substitutions happen, and your distributor is absorbing the same input inflation you are. The problem is that the drift is unannounced and your forecast is annual, so your WIP is always describing last spring’s prices. Close that gap and the report starts telling the truth on time, which is the only version of it anyone outside your office can use.

Sources