Cost-to-cost method: actual costs to date ÷ total estimated cost at completion. $180K spent on a $600K estimated job = 30% complete. This drives everything else on the schedule.
Percent complete × contract value. At 30% complete on a $1M contract, you've earned $300K — regardless of what you've billed. Earned revenue is the truth. Billed revenue is the invoice.
Earned minus billed. Positive = underbilled (money earned but not invoiced). Negative = overbilled (invoiced ahead of earned). Underbilling that isn't acted on is cash that doesn't exist yet.
| Job | Contract $ | Costs to Date | Est. Total Cost | % Complete | Earned Revenue | Billed to Date | Under / (Over) |
|---|---|---|---|---|---|---|---|
| Civil Grading — Phase 2 | $850,000 | $210,000 | $680,000 | 30.9% | $262,500 | $220,000 | +$42,500 Under |
| Concrete Flatwork — Warehouse | $420,000 | $180,000 | $336,000 | 53.6% | $225,000 | $260,000 | ($35,000) Over |
| Electrical — Commercial Build-out | $1,200,000 | $480,000 | $960,000 | 50.0% | $600,000 | $540,000 | +$60,000 Under |
| Underground Utility — Site | $310,000 | $62,000 | $248,000 | 25.0% | $77,500 | $80,000 | ($2,500) Over |
| SWPPP / Erosion — Highway | $180,000 | $90,000 | $144,000 | 62.5% | $112,500 | $90,000 | +$22,500 Under |
| Totals | $2,960,000 | $1,022,000 | $2,368,000 | 43.1% | $1,277,500 | $1,190,000 | +$87,500 Net Under |
Reading this: $87,500 in net underbilling — earned revenue not yet invoiced. Jobs 1, 3, and 5 each need a pay app submitted before the next billing cutoff. Job 2 is overbilled by $35K — a liability to watch as the job finishes. Job 4 is minor, but worth noting.
To get the editable Excel version of this template, schedule a free call — SPM sends it to every contractor they talk to.
At month-end, pull actual costs for every active job from your job cost system or ControlQore. This is the "costs to date" column. Without job-level cost tracking, the WIP schedule is a guess — and a guess isn't useful.
For each job, enter your current best estimate of total cost to complete — not the original budget. If a job is running over estimate, the overrun goes here. This is where honesty matters. Garbage in, garbage out.
Pull the total billed on each job from your AR records. This is every pay app submitted — not just what's been collected. Billed ≠ collected. The WIP calculation uses billed, not received.
Any underbilled job needs a pay app before your GC's billing cutoff date. Miss the cutoff by a day and you wait another 30 days. At 1.5% monthly cost of capital on $100K, a one-day miss is $1,500. Build a billing calendar and treat the cutoff as a hard deadline.
A WIP schedule compares what you've billed on every active job to what you've earned based on percent complete. Underbilled jobs have earned more than they've invoiced — cash you're owed but haven't asked for. Overbilled jobs have invoiced more than they've earned — a liability that comes due at closeout. Neither shows up on a standard P&L.
Cost-to-cost: actual costs to date ÷ total estimated cost at completion. $180K spent on a $600K estimated job = 30% complete. This is the standard method for percentage-of-completion revenue recognition and construction WIP accounting.
Monthly, without exception. WIP is a snapshot at a point in time — running it quarterly means you're three months behind on underbilling and three months of cash you haven't collected. Run it at the same time every month tied to your billing cutoff date.
Run the WIP schedule. Find the gap. Submit the pay app.
Schedule a Free Call →