WIP Schedules Explained: The Report That Predicts Your Cash Flow

The Report Most Contractors Don't Have
If you run a contracting business over $3M and someone asks you, "On your ten biggest active jobs, are you overbilled or underbilled right now?", and you can't answer in under 30 seconds, you have a WIP problem.
A WIP schedule (Work-in-Progress) is a single report that shows every active project, the costs you've incurred, estimated revenue earned under the applicable recognition method, and billings to date. The gap between earned revenue and billings is either overbilling (you've billed more than you've earned, cash is good, but you owe work) or underbilling (you've earned more than you've billed, you're financing the customer's project).
For project-based contractors it is one of the most important reports in construction accounting. Many smaller contractors have never built one, often because job cost is not captured cleanly enough to support it.
Why Contractors Fly Blind
Drawing on contractor analysis in private equity, financial-product work at BuildOps and financial reviews at Level, the most common root cause I check for first is the same: cost isn't tracked at the job level.
A quick operator check: export every active job with revenue or billings to date, and count how many show $0 of recorded cost. Not low cost. Not estimated cost. Zero. Divide that count by the number of active jobs in the export, and keep the period and job count with the result. When that share is large, the field is running and the system is logging revenue, but nobody is allocating the labor, materials, or subs to the specific job.
When costs are not captured against the job, the system can show implausibly high margins. That is not evidence of exceptional profitability. It is incomplete job costing. And if you cannot see cost, you cannot build a reliable WIP schedule.
What a WIP Schedule Actually Shows
A WIP schedule has one row per active job. Here's what each column tells you:
| Column | What It Means |
|---|---|
| Contract Value | Total price of the job (original + approved change orders) |
| Cost to Date | All labor, materials, subs, equipment charged to this job |
| Estimated Cost at Completion | Your current estimate of what the job will cost when finished |
| % Complete | Cost to date / estimated total cost (the cost-to-cost method) |
| Earned Revenue | Contract value × % complete |
| Billings to Date | What you've actually invoiced the customer |
| Over/(Under) Billing | Billings to date minus earned revenue |
This simplified cost-to-cost model applies when the contract qualifies for over-time revenue recognition and cost incurred faithfully depicts progress. Significant uninstalled materials, abnormal waste and unapproved scope can need different treatment. Have the accountant confirm the recognition method and transaction price; percent-complete arithmetic alone does not establish GAAP revenue. FASB's implementation Q&A addresses over-time recognition and costs that may not depict progress.
The over/under column is where the story lives.
Overbilled means you've invoiced ahead of your completion. You've billed for work you haven't done yet. If the customer has paid those invoices, that helps cash flow, but billings in excess of earned revenue are a liability on your balance sheet. You owe that work to the customer.
Underbilled means you've done more work than you've invoiced. You've financed the customer's project out of your own pocket. That's bad for cash flow. The work is done, the cost is real, and the cash hasn't come in. One counterexample to check: underbilling also appears when cost to date includes overruns or materials not yet installed, or when the estimated cost at completion is too low. In that case the fix is the estimate, not a bigger invoice.
A Concrete Example (Fictional)
The figures below are fictional and rounded to the nearest $1K.
| Job | Contract | Cost to Date | Est. Total Cost | % Complete | Earned Revenue | Billed | Over/(Under) |
|---|---|---|---|---|---|---|---|
| Office HVAC Retrofit | $400K | $180K | $320K | 56.25% | $225K | $280K | +$55K overbilled |
| School Plumbing | $250K | $200K | $225K | 88.89% | $222K | $175K | -$47K underbilled |
| Warehouse Electrical | $180K | $30K | $150K | 20% | $36K | $36K | Even |
| Total | $830K | $410K | $695K | $483K | $491K | +$8K net overbilled |
This fictional contractor looks fine in aggregate: net overbilled by about $8K. But look at the School Plumbing job: they're 89% complete and have only billed 70% of the contract. That's $47,000 in work they've financed for the customer. If you don't see it, you can't fix it.
The Real Cash Flow Impact
Here's why underbilling hurts cash. Consider a fictional contractor, used only to show the arithmetic. These counts and amounts are deliberately synthetic and do not reproduce a customer billing fingerprint:
- 40 jobs open past 90 days with no invoice sent. If those jobs averaged an assumed $25K of contract value, the open value is 40 x $25K = $1M. That is an upper bound, not found cash. Some of those jobs may not be complete, some may be billable only at a milestone, and some may carry disputed scope. The operator check is to split the 40 jobs into three groups: complete and billable now; complete but blocked (missing signoff, change order, or lien waiver); and still in progress. Then total only the first group.
- 60 draft invoices averaging an assumed $3K, totaling $180K, never sent. Work done, invoice drafted, nobody clicked send. Sending them turns drafts into receivables. It does not put $180K in the bank until customers pay, and any draft that duplicates or overstates work should be voided, not sent.
- 120 jobs worked in the last 30 days with an assumed $48K of recorded cost and $0 billed. Labor, materials, and trucks are already spent. The $48K is cost, not the revenue those jobs should bill. The billable amount depends on each job's price and scope.
Every day that continues, the contractor is funding work it has done without billing for it.
This is what a WIP schedule catches, paired with an unbilled-work and draft-invoice exception report. Not in a single heroic audit, but every month, as part of your standard financial reporting.
Why Sureties and Banks Care
If you're pursuing commercial work that requires bonding, expect your surety to ask for a WIP schedule, typically alongside your financial statements. Confirm the exact format and frequency with your surety agent.
Here's why: a bonding company is guaranteeing that you'll finish the work. They need to know:
- Are you overbilled or underbilled? Heavy overbilling means you've billed ahead of earned revenue; collection must be checked separately, and if you can't finish the work, the surety is on the hook. Heavy underbilling can signal cash strain, but can also reflect billing terms, disputes or an estimate that is too low. Check the cause and available liquidity separately.
- Are your cost estimates accurate? If your estimated cost at completion hasn't been updated since the bid, the WIP is stale. Sureties look for contractors who update estimates monthly.
- Is the portfolio balanced? A few underbilled jobs aren't a crisis. But if net underbillings are a large share of the portfolio, the working capital your balance sheet shows may be weaker in practice, because underbillings sit there as a current asset that has not been invoiced. For planning, this page uses 15-20% of contract value as an illustrative review trigger; it is not a surety standard or a measured benchmark.
Bonding capacity is not a single formula. Working capital and net worth are major inputs. Underwriters also weigh other factors, including:
- financial statement quality (compiled, reviewed, or audited)
- backlog
- job profitability and margin fade
- track record
Underbillings are recorded as a current asset, so they raise reported working capital, and an underwriter may discount them or ask why they exist. In a fictional case with $500K of net underbilling, expect questions about whether that amount is billable soon or reflects estimates that are too low. The answer can affect the capacity offered.
Banks care for the same reason. If you're seeking a line of credit or construction financing, the WIP tells the lender whether your receivables are real and whether your cash position reflects actual economic reality.
Free benchmark review
See whether your books are benchmark-ready.
We check whether your financial data is clean enough to trust, then show the fastest path to a useful benchmark.
How to Build a WIP Schedule
Step 1: Get Job-Level Cost Tracking Right
You cannot build a WIP without cost data by job. This means:
- Labor: Every tech hour allocated to a specific job (not just "labor expense" in total)
- Materials: POs and material costs tagged to the job they're used on
- Subcontractors: Sub invoices coded to the right project
- Equipment: Rental and equipment allocations
If you're using QuickBooks, use the project or customer/job structure supported by your edition. Do not replace an established department or location class with a job identifier without redesigning the reporting dimensions. In a field service platform such as ServiceTitan, Jobber or Housecall Pro, verify that time, loaded cost, materials and bills exist at the job grain and reach the accounting export. Dispatching a technician alone does not allocate payroll cost.
Most contractors I work with have at least some of this data, but it's patchy. Techs forget to clock in against the right job. Material POs don't get coded. Subs get paid against the wrong project. Step one is cleaning this up. Plan on roughly 30-60 days to get disciplined; that is a planning assumption, not a measured figure, and it depends on job volume and how many systems feed cost.
Step 2: Estimate Cost at Completion (Monthly)
The hardest part of a WIP is the estimate. For each active job, someone (usually the PM or estimator) needs to answer: given what we know now, what will this job cost when it's done?
This isn't the original bid estimate. It's the current estimate, updated for:
- Scope changes and approved change orders
- Material price changes
- Labor productivity (are we faster or slower than expected?)
- Remaining subcontractor work
For shorter jobs, use a simpler estimate if it still supports a credible completion measure. $25K is a planning threshold, not an accounting exemption. For large projects running months, this needs to be a deliberate monthly exercise.
The contractors who do this well have a monthly "WIP meeting" where each PM presents their active jobs: costs to date, revised estimate to complete, and any risks. 30 minutes per PM, once a month. The ones who don't have this meeting are the ones with stale backlogs and phantom margins.
Step 3: Calculate Earned Revenue and Over/Under Position
Once you have cost to date and estimated total cost, the math is mechanical:
- % Complete = Cost to Date / Estimated Total Cost
- Earned Revenue = Contract Value × % Complete
- Over/(Under) Billing = Billings to Date - Earned Revenue
Aggregate across all jobs. The net over/under position is a balance sheet adjustment that your accountant (or CFO) should be making at least quarterly.
Step 4: Review Monthly
A WIP schedule is useless if it's static. Review it monthly. Look for:
- Jobs where underbilling is growing, check earned revenue, milestone terms, missing support and disputed scope. Send a progress bill only when the work is contractually billable and the estimate is valid.
- Jobs where overbilling is extreme, you've billed ahead of earned revenue. Check which invoices are actually paid. Make sure the remaining work is budgeted and resourced, or you'll have a completion problem.
- Jobs where estimated cost at completion has increased, margin is eroding. Flag it for the PM. Ask why.
- Jobs with no cost update in 60+ days, the estimate is stale. Force an update.
The QuickBooks Reality
Many contractors under $10M run on QuickBooks. QBO can produce a basic WIP if you're disciplined about job-level cost tracking:
- Use Projects to track income and expense by job
- Run the Project Profitability report to see cost vs. billings per job
- Export to a spreadsheet to add estimated-cost-at-completion and calculate % complete
It's manual. It's tedious. But it works. The contractors who outgrow this process, often somewhere around $5-10M depending on job complexity, tend to move to construction-specific software (for example Sage, Foundation, or CMiC). In a demo, confirm that the edition you are buying produces a WIP from your own cost codes, change orders, and billing data.
For project-heavy teams on BuildOps and Sage Intacct, the next issue is not whether WIP exists. It is whether BuildOps, Intacct, budgets, dimensions, and billing all tie out during month-end close. The same failure mode shows up in BuildOps + NetSuite migrations when budgets, cost codes, and WIP rules are not mapped before go-live.
If you're between QuickBooks and full construction accounting software, a Google Sheets template that pulls from your QBO data is often the right middle ground. We build these for our clients at Level, a single sheet that updates monthly and gives you the complete over/under position across your entire portfolio.
What Top Contractors Do Differently
The best operators I've worked with treat the WIP as a management tool, not a compliance exercise. Specifically:
They update estimates monthly. Not just for sureties. For themselves. They want to know if a job's margin is eroding before the job is 80% complete, when it's too late to fix it.
They progress-bill deliberately. In the Level Index (n=733 contractors), median billing speed is 1 day from work complete to invoice when progress billing is included (roughly 25% of companies progress bill). Among companies that invoice only after completion, the median is 7 days. Progress billing can help keep billings closer to earned revenue. These timing distributions do not measure the effect on cash or establish that progress billing caused a better cash position. Reconcile receipts and remaining obligations separately.
They close jobs fast. In the Level Index (n=555 contractors), the median closeout lag from work complete to financially closed is 1.7 days, while the 90th percentile is 35.8 days. Every day a job sits open after work is done, the WIP can be distorted, because late costs keep posting to a job that should be closed.
They identify warranty work separately. Use a linked callback or warranty code so the team can track it without erasing the original job's lifetime economics. A new job identifier alone does not decide the accounting treatment: relate the cost back to the original obligation and review any warranty accrual with the accountant.
The Bottom Line
A WIP schedule explains earned revenue versus billings. Pair it with AR aging, retainage and a cash forecast to understand liquidity. Overbilling isn't free money, it's work you owe. Underbilling isn't an accounting detail, it's cash you've spent and haven't collected.
If you're pursuing bonded commercial work, you need a WIP. If you want to understand your real cash position, you need a WIP. If you want to catch margin erosion before the job is done, you need a WIP.
If your jobs do not carry direct costs, step one is not building the WIP. It is fixing cost tracking. Everything else follows from that.
Q: How does Level help with WIP schedules? A: We use available connectors or reviewed exports from your QuickBooks and field service software, build a WIP schedule template customized to your job mix, and update it monthly as part of your financial review. For contractors pursuing bonding, we produce the WIP in the format your surety requires. The first audit is free. Where your job cost data supports it, we'll show you your current over/under position before you commit to anything. If job costs are missing, the audit shows which jobs need cost cleanup first.
Q: Do I need a WIP schedule if I only do residential service work? A: Probably not in the formal sense. WIP schedules are most valuable for project-based work lasting more than a few weeks. But the underlying discipline, tracking cost by job, invoicing promptly, and knowing your margin before the job closes, applies to every contractor. If you're running 2,000+ service calls per year and don't know your cost per call, you have a job-costing problem. A formal percentage-completion WIP may still be unnecessary.
Q: How often should I update my WIP? A: Monthly, at minimum. The WIP meeting, where each PM reviews their active jobs, updates cost estimates, and flags issues, should be a fixed monthly ritual. For contractors with large commercial portfolios, some do it biweekly. The key is consistency: a WIP that's updated every month catches problems within 30 days. One that's updated quarterly can let a problem run up to 90 days before anyone sees it, which leaves much less of the job to correct it.
Get the next one
Want next week's benchmark in your inbox?
One email a week. Real numbers from 2,200+ service businesses. No fluff. Unsubscribe anytime.
Related reads
Construction Accounting
Contractor Accounting Software: Prove WIP and Payroll
Compare contractor accounting software with a WIP and certified payroll demonstration. Verify editions, source records, partner handoffs and report scope.
Construction Accounting
BuildOps + Sage Intacct Month-End Close: Why the Numbers Still Do Not Tie Out
Why BuildOps + Sage Intacct month-end close still breaks when master records, dimensions, budgets, WIP, and invoice lifecycle data drift across systems.
Construction Accounting
When Your Contracting Business Outgrows QuickBooks
The 7 signs your contracting business has outgrown QuickBooks. Revenue-stage guide for contractors from $1M to $10M+. What to do before switching software.

About the author
Sam Yang
Founder & CEO
Founder of Level, the AI operating layer for contractors and skilled trades, and the other operating businesses where scarce labor is the constraint. Ex-CFO across trades, SaaS, and service businesses. 4 years as Director of Growth Product at BuildOps, building financial tooling used by 1,000+ commercial contractors. Four years in PE and investment banking rolling up and acquiring service businesses, $2.5B in total transactions including M&A and IPOs. Stanford MBA, Brown undergrad. The Level founding team's analysis of 2,200+ contractors ($13.25B in job revenue) across operating, private-equity, and CFO roles anchors the Level Index benchmark research.
LinkedIn