QuickBooks does not have a WIP report. Not QuickBooks Online, not QuickBooks Desktop, not Advanced. What it has is the raw material: job costs and billings. A work in progress schedule is the thing you build on top of that data, and the reason it feels impossible to find in the menu is that it was never in the menu.
That is the honest starting point, and almost every guide on this topic gets past it quickly so it can sell you software. This one will not, because there is a more useful question underneath: a WIP schedule needs six inputs per job, QuickBooks can hand you three of them, one depends on how you set the file up, and two are permanent human judgment. Once you know which is which, you know exactly how far this can be automated and where the manual line genuinely sits.
Why bother, when the P&L already shows profit
Your profit and loss statement blends every open job into one number. If four of your six jobs are healthy and two are quietly eating their margin, the P&L shows you the average. Worse, on draw-billed work it reflects when money moved, not when work happened. A month where you collected three deposits looks like a great month. It was a great collections month.
The WIP schedule pulls the jobs apart and asks one question of each: have I earned what I billed? That gap is invisible everywhere else in QuickBooks. The second reason arrives with less warning. If you ever want a line of credit, a bond, or a larger GC relationship, someone will ask for a WIP schedule. Securem, which audits construction back offices, notes that when a surety underwriter opens a quarterly package the WIP is the first document they pull and the financial statements are read second.
The six inputs, and which three QuickBooks gives you
Every WIP schedule, at every size of contractor, runs on the same six numbers per job. Everything else on the schedule is arithmetic derived from these.
| # | Input | Where it comes from | Can QuickBooks give it to you? |
|---|---|---|---|
| 1 | Contract value | Signed contract | Yes, if you enter estimates properly |
| 2 | Approved change orders | Your change order log | No. This is the one that breaks |
| 3 | Costs to date | Job cost report | Yes, automatically |
| 4 | Billings to date | Invoice list by job | Yes, automatically |
| 5 | Cost to complete | Your judgment, this month | No. Never |
| 6 | Original estimated cost | Your bid | Yes, if the estimate is in the file |
Costs to date, billings to date and original estimated cost come straight out of QuickBooks with no thought required. Contract value comes out cleanly only if you set the file up so estimates map to jobs. Change orders and cost to complete do not come out at all, because QuickBooks has no field for either in the sense a WIP schedule means it.
Read the table again: the two inputs QuickBooks cannot give you are the two that decide whether the schedule is true. Every WIP product on the market automates the three easy ones.
By the numbers
Every top-ranking guide on this topic is written for a far larger company than yours. Civil CFO states plainly that it works exclusively with 10 million to 70 million dollar construction companies. Securem targets the 50 million to 300 million band. Their advice assumes a controller, project managers who sign estimates, and a CFO who writes variance commentary. At a 6-person contractor doing 1.5 million dollars, you are all three of those people on a Sunday afternoon.
The QuickBooks Online Advanced myth
Ask about this and the most common answer is "upgrade to Advanced, it does WIP." It does not, and there is a clean on-the-record walk-back.
In a February 2026 r/Bookkeeping thread on handling WIP reports and job costing for construction clients in QBO, a bookkeeper replied: "QBO advanced has full WIP reporting if you use projects, create estimates in the project, and job cost everything." The original poster asked whether that native reporting was reliable enough for monthly client reports or whether they still ended up in Excel. The same commenter answered: "I still export to a excel template and change the cost to complete based on PM cost reports."
That is the whole story in two comments. Advanced gives you better job cost reporting. It does not give you a WIP schedule, because it has nowhere to put cost to complete, and without cost to complete there is no percent complete. Another commenter in the same thread was blunter: "generally QBO is not great for construction. Best to use excel for the WIP for a whole host of reasons but overall QBO is weak for it."
Set QuickBooks up so the three automatic inputs are actually right
The arithmetic is easy. Garbage inputs are what kill WIP schedules, and at a small contractor the garbage enters at setup.
In QuickBooks Online (Plus or Advanced). Turn on Projects under Settings, then Advanced. Create one project per job, not one per customer. Every bill, expense, timesheet and invoice has to carry the project, or it lands in overhead and your costs to date understate reality. Pull costs to date from the Project overview, budget against actual from Estimates vs Actuals, and billings from the project's transaction list.
In QuickBooks Desktop. Use Customer:Job, run Job Profitability Detail for costs to date by cost type, and Job Estimates vs Actuals Detail for the estimate and the billed column. One Desktop trap: timesheet hours only become job cost when assigned to the customer:job and run through payroll or a zero-dollar item. Verify labor shows up on the Job Profitability report, not only in payroll, or your costs to date is missing your largest cost line.
Three setup traps worth knowing, all documented in Intuit's own community threads:
- Projects cannot contain sub-customers. If you run a customer with sub-jobs under it, flattening that structure is a prerequisite. It is the source of the "a project cannot contain subcustomers" validation error that breaks third-party syncs.
- Time already posted does not move. An Intuit community answer states flatly: "It is impossible to move payroll time activity to a new project." Code time to the right job the first time.
- Sub-customer to project conversion is one way and fussy. Intuit's help article requires the sub-customer be linked to only one parent and not be a sub-sub-customer before it converts.
This is the difference between a costs-to-date figure you can build a schedule on and one you cannot.
Cost to complete: the input that will never be automated
Cost to complete is your current best estimate of what is left to spend on a job. It is not what you bid. It is what you believe this month, after seeing how the work is actually going.
This number makes a WIP schedule useful or useless, and CBIZ puts the stakes plainly: without accurately determining the estimated cost to complete on contracts in progress, a contractor's financials can fluctuate wildly from one month to the next.
The failure mode is doing nothing. Securem calls it the stale estimate to complete: the estimate is set at job start and rolled forward unchanged, so costs to date rise, percent complete rises mechanically, the math holds, and no judgment is applied anywhere. When the job closes, the entire difference between the stale estimate and reality lands in one month. You find out in month nine what you could have known in month two.
You have no PM to sign an estimate, so the discipline has to be lighter and blunter. Once a month, for each open job, ask two questions and write down the answer:
- What is left to buy, and what is left to install?
- Is that number bigger or smaller than what I said last month, and why?
If the answer to the second question is "the same," be suspicious. On a job that moved all month, cost to complete should have moved.
The WIP math is easy. Getting clean contract values, approved change orders and job-coded costs out of a business where half of that lives in text messages is the hard part. We build custom CRM systems around how your crew actually works, so the job record, the change orders and the invoices are one thing instead of three.
The three formulas
Run them in this order. Each feeds the next.
Percent complete (cost-to-cost, the construction standard):
Costs to date / (Costs to date + Cost to complete)
Earned revenue, what you have actually earned by doing the work:
Percent complete x (Contract value + Approved change orders)
Over or under billing, the punchline:
Billings to date - Earned revenue
Positive means overbilled. Negative means underbilled.
Note what is absent from the percent complete formula: contract value. Percent complete is a cost question, not a revenue question.
A worked example at contractor scale
A siding and window job, contract signed at 92,000 dollars, bid at 28 percent gross margin. Mid-job the homeowner adds a rear dormer, approved and signed at 11,000 dollars against 8,000 dollars of expected cost. At month end QuickBooks says you have spent 48,000 dollars, you estimate 27,000 dollars left to finish, and you have billed 71,000 dollars against your draw schedule.
| Line | Value | Source |
|---|---|---|
| Contract value | 92,000 | Signed contract |
| Approved change orders | 11,000 | Signed CO |
| Revised contract value | 103,000 | Sum of the two |
| Costs to date | 48,000 | QuickBooks job cost |
| Cost to complete | 27,000 | Your estimate this month |
| Total estimated cost | 75,000 | 48,000 plus 27,000 |
| Percent complete | 64% | 48,000 / 75,000 |
| Earned revenue | 65,920 | 64% of 103,000 |
| Billings to date | 71,000 | Invoices issued |
| Over/(under) billed | +5,080 | 71,000 less 65,920 |
| Gross profit to date | 17,920 | 65,920 less 48,000 |
| GP percent | 27.2% | 17,920 / 65,920 |
Reading it: 64 percent done, modestly overbilled by about 5,000 dollars, which is a healthy draw position rather than a red flag, and margin holding at 27 percent against a 28 percent bid. Nothing to fix.
Now change one thing. Suppose the dormer change order was agreed by text and never entered anywhere. Revised contract value stays at 92,000 dollars, but the 8,000 dollars of dormer cost is already in costs to date. Earned revenue drops to roughly 58,900 dollars, you appear overbilled by 12,100 dollars, and gross profit to date reads 22.6 percent instead of 27.2. The job looks like it is fading. It is not. Your paperwork is.
That is the most common WIP distortion at contractors under 3 million dollars, and it is not an accounting problem. The change order was approved in a conversation and never became a record. We covered that pattern in how to handle change orders without losing money.
The 30-minute monthly routine
Securem describes a five-step monthly discipline with job cost cutoff, project manager signed estimates, controller review of material movements, CFO sign-off with variance commentary, and distribution to the bonding agent by the tenth business day. That is correct for a 50 million dollar contractor. If you have four to twelve open jobs, do this instead.
- Reconcile first. Bank and credit cards, through month end. Civil CFO identifies unreconciled books as the usual cause when a WIP and the financials disagree: the schedule was built outside the accounting system instead of from it.
- Check for uncoded costs. Run Profit and Loss by Customer and look at the unassigned column. Anything sitting there is a job cost hiding in overhead.
- Export costs to date and billings to date for every open job.
- Set cost to complete. The only step that takes real thinking. Budget 15 of your 30 minutes here.
- Update revised contract value from your change order log, approved and signed only. Keep pending change orders in a separate column.
- Let the sheet calculate and read the five signals below.
Do it on the same day every month. Cadence matters more than polish, because the value of a WIP schedule is entirely in the comparison to last month.
Tip
Stop copying and pasting. Two construction bookkeepers in the same r/Bookkeeping thread independently described the same fix: pull QuickBooks project and job cost data live into the sheet with a data connector, build the formulas on top, and it refreshes. One, with 20 years in construction accounting, described the workflow as pulling everything out with a connector, doing the WIP in Excel, then posting a journal entry for the over/under. The other said it "cut down sooo much manual work." That is the realistic automation ceiling: the three mechanical inputs refresh themselves, and you still type cost to complete.
Reading it: five signals
Scan these every month. They are the reason you built the thing.
| Signal | What it means | What to do |
|---|---|---|
| Growing underbilling | You did work you have not invoiced | Bill up to earned revenue now, then fix the billing cadence |
| Overbilling that keeps growing | Possible job borrow, new deposits funding old overruns | Compare closed-job margins against bid before you take a draw |
| GP percent below bid, drifting down | Margin fade in motion | Find the overrunning cost code while there is job left |
| Percent complete stuck two months running | Either the job stalled or costs are not being booked | Check for uncoded bills before you blame the crew |
| Percent complete above 100 | Costs blew past total estimate | Re-estimate cost to complete today, the job is bleeding |
Two of these deserve names. Job borrow is when overbilled cash from new jobs quietly funds cost overruns on old ones, so the bank balance looks healthy while the business bleeds. The tell is an overbilled position that keeps growing while margins on closed jobs keep falling.
Fade is the gap between the margin you bid and the margin you finish at. Securem's benchmark from auditing construction firms: average fade of one to two percentage points reads as good estimating discipline, four to six points signals a gap that constrains bonding capacity, and above six points is structural. Run that comparison on every job you closed in the last twelve months. It takes an hour and tells you more than the WIP schedule will.
Watch the closeout trap too: jobs that sit at 99 percent complete for months while punch list costs trickle in and the estimate is nudged upward to absorb them. The job finished, the schedule says otherwise, and the fade hides because the closed-job comparison never triggers. Review anything above 95 percent for closeout monthly.
Why your WIP will not match your tax return
This is where most small contractors abandon the exercise, and it is a misunderstanding rather than a mistake.
A WIP schedule is built on percentage of completion, which recognizes revenue as work happens. You almost certainly do not file that way. Under the IRC 460 small contractor exception, a contract qualifies if it was expected at signing to complete within two years and average annual gross receipts for the prior three tax years stay under the threshold, which CBIZ puts at 32 million dollars for tax year 2026 after inflation adjustment. Home construction contracts, where 80 percent or more of estimated total contract costs relate to buildings with four or fewer dwelling units, are exempt regardless of size, and the One Big Beautiful Bill Act extended that exception to residential construction contracts including apartment buildings and condominium complexes.
So you are likely filing cash or completed contract, both of which defer income until the money moves or the job finishes. CBIZ describes the consequence directly: under the cash method it is not uncommon for a contractor to show significant income for financial statement purposes while possibly showing a loss for income tax reporting purposes.
Your WIP and your tax return are supposed to diverge. The WIP tells you whether the jobs you are standing in are making money. The tax return tells the government when to tax you. Do not try to reconcile them, and do not throw out the WIP because it disagrees with your 1120S.
If your CPA wants the entry on the books
Most small contractors should keep the WIP as a management spreadsheet and stop there. If your accountant wants the over and under billing on the books, the standard approach uses two accounts covered by the National Association of Home Builders chart of accounts: Costs in Excess of Billings for underbillings, carried as a current asset, and Billings in Excess of Costs for overbillings, carried as a liability.
Post the entry on the last day of the month and reverse it on the first day of the next, which QuickBooks does with the reverse button inside the journal entry screen. The reversal matters: without it your following month is inflated by an adjustment that no longer describes anything. A P&L carrying a stale WIP entry mid-month is less trustworthy than one carrying none.
Which jobs belong on the schedule
Larger firms use a dollar threshold, commonly around 100,000 dollars of contract value. Applied to a residential contractor doing 1.5 million dollars across forty jobs, that rule empties the schedule entirely.
Use duration instead. If a job opened and closed inside one month and you billed it once, leave it off. If it is open across a month-end close, it belongs on. Service calls and same-week repairs stay off, anything with a draw schedule or a multi-week build goes on.
A CPA in the r/Bookkeeping thread framed the size question well: either you are large enough to afford the big project accounting software, or you are small enough that you need to work efficiently in a workbook. You are in the second group, and the workbook is the right answer, not a compromise.
The mistakes that actually cost money
- Estimating percent complete by eye. It is a cost calculation. Walking the site and guessing 70 percent is not an input.
- Leaving contract value stale after a change order. The biggest distortion at small contractors, and it makes healthy jobs look sick.
- Booking unapproved change orders into contract value. Track them in a separate column. Revenue the customer has not agreed to is not revenue.
- Never touching cost to complete. A stale estimate turns the schedule into arithmetic with no judgment in it.
- Forgetting retainage. If a GC holds 10 percent, billings to date already include money you have not been paid. Track retainage receivable separately.
- Running it once a year for the bank. The value is in the month-over-month comparison. One snapshot tells you almost nothing.
The WIP schedule is not an accounting deliverable. It is the gauge that tells you which job on your calendar is quietly costing you money, while you can still do something about it. QuickBooks hands you three of the six numbers. The other three are the part only you can do, and they are worth thirty minutes a month.
If you are also fighting QuickBooks on the job costing layer underneath this, start with QuickBooks job costing for contractors, because a WIP schedule built on bad job costs is a confident, wrong answer.
