Work in Progress Accounting: WIP Schedules and Reports for Contractors
Before they read anything else you send them, a lender or a surety reads your WIP schedule. Work in progress accounting is the monthly discipline of comparing, job by job, what you’ve spent, what you’ve earned based on progress, and what you’ve actually billed, and reporting the gap between the last two. That gap, the over/under billing position, is the first thing a lender or a surety looks for, and most contractors can’t explain their own.
We prepare and reconcile WIP schedules for contractor clients as part of monthly close, and we build the job-cost data underneath them: AP coding, vendor statement reconciliations, and progress billing on Sage 300 CRE with TimberScan and Yardi Voyager’s Construction Manager. Monthly, quarterly, or ahead of a bonding renewal, whatever cadence the job book needs. This is what actually goes into a WIP schedule that holds up when someone starts asking questions.
What a WIP Schedule Is, and Who’s Actually Reading It

A WIP report is a snapshot of every job in progress, showing three things side by side: what you’ve spent, what you’ve earned based on progress, and what you’ve actually billed. That third comparison, earned versus billed, is the main focus of the exercise. Everything else on the schedule is there to back up that figure.
Three groups carefully study the document. Lenders use it to assess whether the company is making sufficient real progress to warrant a line of credit. Sureties use it to determine bonding capacity, and they won’t even look at an application without a clean, current WIP attached.
CPAs use it during a review or compilation to confirm that revenue recognition on long-term contracts actually reflects what happened on the ground. All three groups are looking for the same red flag: a job that looks fine on the surface but is quietly bleeding.
The Columns of a WIP Report, and What Breaks Each One
A good WIP schedule tracks the same fields for every job, no matter how the software displays them. Here’s what each one is and where it actually goes wrong.
| Column | What it is | What goes wrong here |
| Contract value | Initial contract amount plus approved change orders only, never verbal promises | Missed change orders understate it |
| Costs incurred to date | Every dollar paid or accrued: labor, materials, subs, equipment, indirect costs | Stored materials coded before installation inflate it |
| Estimated cost to complete | Current best estimate of remaining spend, not the original bid frozen in time | Goes stale when nobody owns updating it |
| Total estimated cost | Costs incurred to date + estimated cost to complete | This is the denominator in every calculation below, and it moves every month |
| Percent complete | Costs incurred to date ÷ total estimated cost | Wrong the moment any cost column above it is wrong |
| Earned revenue | Percent complete × contract value | Compounds any error already in percent complete |
| Billed to date | Dollar amount invoiced to the client to date | Out of sync when billing milestones lag actual progress |
| Over/under position | Billed to date − earned revenue | The number every lender, surety, and CPA checks first |
Get the first three columns wrong, and every number after them is wrong too. Nobody ever finds a mistake in earned revenue by looking at earned revenue alone. They find it by working back to the cost-to-complete estimate that gave rise to it.
That is why a reader who knows what they are doing works the columns in order, from left to right, and does not jump straight to the bottom line.
Percentage of Completion, With Real Numbers
Here’s how it actually works on a real job. The cost-to-cost method is the standard approach, comparing costs incurred against total estimated costs to determine how much of the contract value a contractor is entitled to recognize as revenue.
Say you’re running a $2,000,000 commercial build-out. You’ve incurred $900,000 in costs so far, and your current estimated total cost to complete the job is $1,800,000.
Percent Complete = Costs Incurred to Date / Total Estimated Costs
Percent complete = $900,000 ÷ $1,800,000 = 50%
Earned Revenue = Percent Complete × Contract Value
Earned revenue = 50% × $2,000,000 = $1,000,000
That $1,000,000 is what you’ve actually earned based on progress, whether you’ve invoiced for it or not. Now compare it to what you’ve billed. Say you’ve invoiced the client $1,150,000 so far.
Over / Under Position = Billed to Date − Earned Revenue
Over/under position = $1,150,000 billed − $1,000,000 earned = $150,000 overbilled
That $150,000 appears on your balance sheet as a liability, representing billing that exceeds costs and earnings. You’ve collected money for work you haven’t finished yet. It’s not inherently a problem, but it’s a number every reader of this schedule will notice immediately.
Over-Billing vs Under-Billing: What Each One Actually Signals
Neither position is good or bad per se, but they tell very different stories, and misreading them is how contractors get caught off guard.
Overbilling means you’re ahead on cash, not ahead on the work. That $150,000 in the example above is a cash cushion, but it’s borrowed against future work, not profit sitting in the bank. The dangerous phase is the back end of an overbilled job, the point where most of the contract has been billed and most of the budget spent, but real work remains and very little new cash is coming in to fund it. Put several jobs into that same window at the same time, and you have a real cash problem hidden by numbers that still look good on paper.
The flip side is underbilling, which is worth understanding on its own terms rather than as “the safer version of overbilling.” Consider a smaller project instead: a $500,000 contract, $300,000 in costs to date, and an estimated $400,000 in total costs.
Percent complete = $300,000 ÷ $400,000 = 75% Earned revenue =
75% × $500,000 = $375,000
If you’ve only billed $310,000 so far, the position is:
$310,000 billed − $375,000 earned = $65,000 underbilled
You’ve done $65,000 more work than you’ve billed for. That appears on the balance sheet as an asset, costs and earnings in excess of billings, but it’s money you are owed, not money you have.
Underbilling usually happens because the billing cycle is slow or the milestone schedule is out of sync with actual progress. In most cases, it’s not as bad as overbilling, but it means cash is out there uncollected while bills continue to come due on your side.
Under ASC 606, these positions aren’t just internal tracking figures. Overbilling is reported on the balance sheet as a contract liability, and underbilling as a contract asset. That’s the language your CPA and your surety are actually using when they look at this line, even if nobody on the job site calls it that.
What Actually Breaks WIP Accuracy
There are a few types of failures that recur when you look at schedules that have gone wrong.
Stale Cost-to-Complete Estimates
Across the contractor books we take on, cost-to-complete estimates are stale on more than a third of active jobs at the first close we run. The initial submitted cost estimate remains unchanged for months, long after the labor and materials costs have changed.
In our monthly close for a Canadian commercial construction group, we cross-check the cost-to-complete figure against actual job-cost activity before the schedule goes out, rather than taking the submitted estimate at face value.
What that check usually finds isn’t a bad estimate to begin with. It’s a handoff problem: the project manager owns the forecast and the accountant owns the schedule, and the number goes stale in the gap between the two, not because anyone got it wrong on purpose.
Missed Change Orders
On a first close for a new contractor client, we typically find 20–25% of change orders approved in the field and never entered in the accounting system. On that same Canadian commercial construction group’s AP, this shows up first as a job-cost invoice with no contract amendment behind it. Catching it means checking that every coded invoice has an approved change order to justify it, not just a job number. The crew is building it, so the costs land on the job.
The contract value and the estimated total cost don’t move, because nothing was entered.
Percent complete is now being measured against a budget that excludes the work being done, so it overstates progress, and it overstates it against a contract value that’s too low. Both halves of the earned-revenue calculation are wrong at once, in opposite directions, and the gap widens every month the change order stays unentered.
The other change-order problem isn’t the one that never gets entered, it’s the one that gets entered without a price attached. A change the owner has directed the crew to build is an approved modification the moment work starts, price or no price, and it belongs in the schedule. What matters after that is age, not the accounting treatment.
A $400,000 unpriced change order that’s four weeks old is a negotiation still in progress. The same $400,000 sitting unpriced at six months is a write-off nobody has booked yet.
Unpriced and disputed amounts belong in their own column or footnote on the schedule, never blended silently into contract value, because that’s exactly what a surety analyst looks for: how much of the earned revenue rests on pricing nobody has actually agreed to.
Stored Materials Counted as Work Performed
Materials are delivered to site and the invoice is coded to the job the day it arrives. Nothing has been installed yet. If costs-to-date jumps, percent complete jumps with it, and the schedule reports progress that hasn’t happened. The job reads further along and more profitable than it is, and it corrects itself violently in a later month.
In vendor statement reconciliations for that same group, this shows up as a material invoice coded to the job the same week it’s delivered, weeks before the crew gets to it. The fix lives in the reconciliation step, not in the WIP schedule itself. Hold uninstalled materials out of the cost-to-cost calculation until they’re installed, not until they’re delivered.
(ASC 606 does permit recognizing revenue equal to cost, at zero margin, for uninstalled materials where specific criteria are met, but exclusion until installation is the simpler rule and the one most contractors’ systems actually follow.)
Inconsistent Job Coding Across the Field and The Office
Superintendents track costs their own way in a spreadsheet. The accounting system uses a different job number scheme, and reconciling the two takes hours each month that should go toward reviewing the numbers, not matching job numbers between two systems.
Progress billing for that group runs off the same job numbers used in AP, so a coding mismatch between the field and the office shows up immediately: the billing schedule and the cost report stop agreeing on which job a dollar belongs to.
Although it does not affect the math of a particular job, it slows everything else down enough that the other mistakes get more time to hide.
Individually, each one seems to be a relatively minor issue. However, if we consider dozens of jobs over an entire year, it is the difference between a WIP schedule that gives your financial partners confidence and one that will get your application questioned.
How Often a WIP Schedule Should Actually Be Run
Monthly is the minimum, not a recommendation. Quarterly is not a schedule, it’s a post-mortem. You can’t catch a job going bad by looking four times a year, by the time a quarterly schedule shows the problem, the money is spent.
A monthly cadence is what turns a WIP schedule into an early warning system instead of a compliance exercise, but only if someone is building it from the field data up. That’s what our construction accounting services team does every month.
On Sage 300 CRE with TimberScan, the WIP update belongs in the same monthly cycle as the job-cost close, because the costs-to-date column is only ever as current as the AP that has actually been coded to the job. Invoices still sitting unapproved in the queue on the last day of the month are costs the WIP schedule cannot see, and every column to the right of them is wrong until they clear.
Frequently Asked Questions
Do I need a WIP schedule if I don’t use bonding?
Yes. Bonding is the most visible reason to keep one, not the only one. A bank wants a current WIP schedule before it extends or renews a construction line of credit; your CPA needs it to recognize revenue correctly on long-term contracts at year end; and you need it to know which jobs are funding which. A contractor who never bonds a job still has all three of those.
What’s the difference between WIP and job costing?
Job costing tracks costs against a budget for a single job. WIP takes that job cost data and adds revenue recognition, comparing what has been earned versus what has been billed all at once across every active job. A good WIP schedule is built on good job costing practices.
Can I build a WIP schedule in a spreadsheet?
Yes, on a small scale. Once you have more than a handful of active jobs, trying to pull accurate cost-to-date and billing figures manually each month quickly becomes error-prone. This is exactly where the mistakes above tend to sneak in.
Why does my WIP look fine but my cash is tight?
That’s the classic overbilling trap. The schedule can look healthy, but cash is being burned faster than new billings replace it. This is especially true at the back end of the billing cycle described above.
Should every job go on the WIP schedule, even small ones?
Generally yes, especially once a job type crosses into long-term contract territory where revenue recognition actually matters. Even small jobs can have a disproportionately large over- or underbilling position relative to their size, and ignoring them simply because they are small creates a blind spot in the overall portfolio view.
The Bottom Line
The value of a WIP schedule can only be as good as the numbers that go into it. Good work in progress accounting requires the same discipline every month. The percent complete formula takes thirty seconds to calculate, but getting cost-to-complete estimates current, catching every change order, and coding costs to the right job at the right time is the actual work. That’s the difference between a WIP schedule that sees your bonding application approved and one that has it questioned.
None of this is complicated in principle. The real challenge is doing it consistently, job after job, month after month, without the busy weeks pushing it to the bottom of the pile. That consistency is often the difference between a contractor who believes in their numbers and one who is just hoping the bank doesn’t ask too many follow-up questions.
If your WIP has looked more like a guess than a genuine financial control, we can help you fix that. Book a time on our calendar and we’ll walk through what an accurate, monthly WIP process looks like for your jobs.
