Skip to main content

Roofing Contractor Bookkeeping: The WIP Schedule That Tells You Whether Your Bank Balance Is Lying

18 min readMike ThriftMike Thrift
Roofing Contractor Bookkeeping: The WIP Schedule That Tells You Whether Your Bank Balance Is Lying

You glance at your business checking account on a Friday afternoon — $147,000. Two commercial re-roofs are mid-progress, three residential jobs are scheduled next week, and you just collected a 50% deposit on a $94,000 apartment complex. It feels like your best month yet.

Then your accountant calls. You are actually under-billed by $38,000 and your largest job has quietly lost two points of margin since last month. The bank balance wasn't lying about cash, but it was absolutely lying about profit.

That disconnect is why every roofing contractor who runs jobs that span weeks — and especially anyone who takes on commercial, multi-family, or insurance-driven projects that stretch across month-end — needs one report above all others: the Work-in-Progress (WIP) schedule. Get it right and it becomes the blueprint for every financial decision you make. Get it wrong or skip it entirely, and you are flying blind no matter how healthy the bank feed looks.

Why Your Bank Balance Can't Tell You If a Roofing Job Is Profitable

Roofing is a classic job-cost business with terrible timing mismatches:

  • You bill at milestones, not as you work. A deposit at signing, a progress draw after dry-in, final payment after punch list. Cash in has little to do with work completed.
  • You buy materials before you earn the revenue. Shingles, TPO, metal panels, and fasteners often hit your card weeks before the crew mobilizes.
  • Labor and subs are front-loaded. Tear-off crews and sheet-metal subs invoice early while the job still shows zero revenue if you wait until completion.
  • Retainage holds cash hostage. On commercial work, an owner holding 10% until final acceptance means a $200,000 job leaves $20,000 in receivable for months after you have paid for everything.

If you use cash-basis or simple accrual bookkeeping that only recognizes revenue when you invoice, a month with two big deposits looks wildly profitable — until the next month when crews, disposal, and material bills land with no corresponding invoices. Flip the timing and a month where you did the most actual roofing can look like a loss because you haven't billed it yet.

The WIP schedule fixes this by tying revenue to how much work is actually done, not when you happened to send an invoice.

What a WIP Schedule Actually Is

Think of the WIP schedule as a one-page dashboard of every open roofing contract. Each row is one job. Each column answers a specific question:

  • What did we promise to build and for how much? Contract price, approved change orders, revised contract value.
  • What have we spent so far? Job-cost-to-date — materials, labor, subs, equipment rentals, permits, disposal.
  • What will it still cost to finish? Estimated cost to complete (the foreman's honest forecast, not the original estimate).
  • How far along are we? Percent complete, calculated from costs.
  • How much revenue have we earned? Earned revenue to date, based on percent complete.
  • How much have we billed, and have we billed too much or too little? Contract billings to date and the over/under-billing balance.

Updated at least monthly, the WIP schedule tells you, your CPA, and anyone lending to or bonding you exactly where each roof stands.

The Percentage-of-Completion Method, Step by Step

For jobs that span accounting periods, generally accepted accounting principles — and the tax code for larger contractors — require you to recognize revenue as work progresses. The math is straightforward once job costs are accurate.

The Two Formulas That Power Every WIP Line

1. Percent Complete = Costs Incurred to Date ÷ Total Estimated Costs

Total estimated costs is not the original bid. It is costs incurred to date plus estimated costs to complete. If either number is stale, the percentage is wrong.

2. Earned Revenue to Date = Percent Complete × Revised Contract Price

Revised contract price is the original contract plus signed change orders. Unapproved change orders should not inflate revenue yet.

From there:

  • Revenue to recognize this period = Earned Revenue to Date − Revenue Recognized in Prior Periods
  • Gross profit to date = Earned Revenue to Date − Costs Incurred to Date
  • Over/Under billing = Billings to Date − Earned Revenue to Date

If billings exceed earned revenue, you are overbilled. If earned revenue exceeds billings, you are underbilled. Neither is automatically good or bad — but both tell a story.

A Roofing Example With Real Numbers

Take a 42-square commercial TPO re-roof:

  • Original contract: $180,000
  • Approved change order for tapered insulation upgrade: $12,000
  • Revised contract price: $192,000
  • Costs incurred to date: $86,000 (tear-off, ISO, membrane, half the labor)
  • Estimated cost to complete: $54,000 (remaining labor, edge metal, warranty, closeout)
  • Billings to date: $115,000 (deposit + dry-in draw)

Step 1: Total estimated cost = $86,000 + $54,000 = $140,000 Step 2: Percent complete = $86,000 ÷ $140,000 = 61.4% Step 3: Earned revenue to date = 61.4% × $192,000 = $117,888 Step 4: Costs remain $86,000, so gross profit to date = $117,888 − $86,000 = $31,888 (27% margin to date) Step 5: Over/under = $115,000 billed − $117,888 earned = −$2,888 underbilled

You have done slightly more work than you have billed. Cash is tight by $2,888, but margin is intact. If the estimated cost to complete creeps to $62,000 without a change order, percent complete drops, earned revenue drops, and that margin evaporates — even though nothing changed in the bank account that day. That early warning is the whole point.

Overbilling vs. Underbilling: Where Cash Flow Lives

This is the section most roofers skim and then regret.

Overbilling (billings > earned revenue) means you have collected cash for work you haven't done yet. On the balance sheet it sits as a liability — often labeled Billings in Excess of Costs or Deferred Revenue. It feels great: cash in the bank before the shingles are on. Taken too far, it masks a job that is bleeding margin because the cost-to-complete estimate is too rosy. Lenders and sureties get nervous when overbilling spikes without a clear reason.

Underbilling (earned revenue > billings) means you have done work you haven't billed for. It shows as an asset — Costs in Excess of Billings or Underbillings. A growing underbilling balance strains cash flow and often signals slow billing, missed change orders, or crews burning hours that never made it onto a pay application. If you are consistently underbilled, you are effectively financing your customers' roofs.

A healthy roofing operation typically hovers near neutral with a slight lean toward overbilling, especially on commercial jobs where you negotiate strong deposit and milestone terms. What matters is not a single month's number but the trend and the reason behind it.

How to Build a Roofing WIP Schedule That Actually Works

You don't need sophisticated software to start, though dedicated construction accounting tools will generate this automatically once job costs are set up correctly. A spreadsheet with one row per active job and these columns is enough:

ColumnWhat to EnterWhere It Comes From
Job name / numbere.g., 24-118 — Maple Grove Apartments Bldg CJob list
Contract priceOriginal signed amountSigned proposal
Approved change orders$ signed, not verbalChange log
Revised contract valueContract + approved COsCalculation
Cost estimate at bidOriginal budgeted costEstimate
Costs incurred to dateActual job costs postedJob cost ledger
Estimated cost to completeForeman's updated forecastField + office
Total estimated costIncurred + to completeCalculation
Percent completeIncurred ÷ Total estimatedCalculation
Earned revenue to datePercent complete × Revised contract priceCalculation
Billings to dateTotal invoiced to ownerInvoicing system
Over / (Under) billingBillings − Earned revenueCalculation
Gross profit to dateEarned revenue − Incurred costsCalculation
Revised gross profit / marginRevised contract − Total estimated costForecast

Two disciplines make or break this sheet:

1. Job costs must be posted by job, in the right period. If your bookkeeper dumps all Home Depot and ABC Supply receipts to a generic Materials expense and sorts it out at year-end, your percent complete is fiction. Every material ticket, labor hour, sub invoice, dump fee, and crane rental needs a job number before it hits the ledger.

2. Estimated cost to complete must be refreshed with the field, monthly. That number is not the bid minus what you have spent. It is "what will it actually take to finish?" A foreman who reports that a 4-day shingle job will need one more day of punch labor changes that line — and therefore revenue — immediately.

Roofing-Specific Traps That Wreck Your WIP (and Your Books)

1. Change Orders You Worked Before They Were Signed

Storm damage, hidden deck rot, and owner-requested upgrades are daily life. If the crew installs an extra 30 squares of ice-and-water shield on a handshake and you increase estimated costs without increasing contract price, your WIP shows artificial margin fade. Rule: costs go up when work is done, revenue goes up only when the change order is signed and priced. Track unapproved change work in a separate column and follow up until it is executed.

2. Retainage That Disappears Into a Single Receivable

On a $250,000 commercial job with 10% retainage, $25,000 is not available at substantial completion. If you book every invoice as plain Accounts Receivable, your aging will say the customer is 45 days past due when the retention invoice is not contractually due for another 60 days. Set up a separate Retainage Receivable account and split each progress billing: e.g., invoice $60,000, debit A/R $54,000, debit Retainage Receivable $6,000, credit Billing. When retainage releases, move it to regular A/R. Your WIP and your collections forecast will both make sense.

3. Supplier Deposits and Material Pre-Purchases

Ordering a full truck of standing-seam panels to lock pricing three months before mobilization feels prudent — until those panels sit in Inventory or Job Costs in the wrong month. If you expense them to the job before they are installed, you inflate percent complete early and front-load profit you haven't earned. Track pre-purchased materials in a Materials on Hand or Prepaid Job Costs account and transfer to job cost only when installed.

4. Warranty Work and Callbacks

A 2-year workmanship warranty is a selling point, but every service call after closeout is a cost with no corresponding revenue. Build a small warranty accrual into the original estimate (e.g., 0.5–1% of contract price) and hold it in the cost-to-complete through closeout. When you release the job from WIP, move any remaining accrual to a warranty reserve so future leaks don't distort new jobs' margins.

5. Subcontractor and Crew Costing Done in Buckets

If your roofing labor is one generic expense and your subs are lumped by vendor, you can't diagnose why a job faded. Split job costs into consistent cost codes — Tear-off Labor, Underlayment & Dried-In, Steep-Slope Install, Flat/Membrane, Flashing & Metal, Disposal, Permits, Equipment Rental, Subcontractors by trade, Warranty Reserve. Consistent codes let you compare estimated vs. actual by phase across 20 jobs and spot that your flashing costs run 18% over every estimate.

6. Insurance and Supplement Revenue

On storm restoration work, the carrier's initial scope, supplements, and depreciation recoverable often arrive on different timelines. Only include in Revised Contract Price what is approved in writing. A supplement you "know is coming" but haven't had approved is not revenue. Keep a pipeline column for pending supplements so the WIP reflects reality while the pipeline tracks opportunity.

Job Costing That Feeds an Accurate WIP

The WIP schedule is only as honest as the job-cost ledger behind it.

  • Assign every cost a job and cost code before it posts. Credit cards, checks, and vendor bills should not clear without a job tag.
  • Reconcile weekly, not quarterly. Run an open-job cost report every Friday and compare to foreman logs. Catching a $4,700 dumpster that hit overhead instead of Job 24-118 in week one beats finding it at year-end.
  • Reconcile labor with time tracking. If crews clock by job and cost code — whether through a time-tracking app or a simple daily sheet — labor follows the roof, not a payroll bucket. Burden (taxes, comp) should be applied by rate, not guessed.
  • Include fully burdened costs. Materials are obvious. Add workers' comp (roofing codes are among the highest in construction), payroll taxes, per-diem, and equipment depreciation or rental. A job that looks 35% profitable on materials and wages alone may be 21% after burden.
  • Separate overhead from job costs. Office rent, estimating, and your truck payment belong in overhead. Putting them on jobs inflates percent complete; leaving true job costs in overhead does the opposite.

If you use QuickBooks, Job Costing setup with Projects or Job Cost modules, class tracking, or an add-on like Contractor+ or JobTread can automate the tagging. Spreadsheet job-cost logs work at small scale if you are disciplined, but they demand manual double-entry that breaks under volume.

Tax Rules: When the Percentage-of-Completion Method Is Required

Not every roofing company must use percentage-of-completion for tax purposes, but the threshold is lower than many owners assume.

  • Home construction contracts — where 80% or more of estimated costs are for dwelling units of four or fewer units (typical residential re-roof) — are generally exempt from mandatory percentage-of-completion. You may use completed-contract or another permissible method.
  • Small contractor exemption for other construction contracts — if your average annual gross receipts for the three preceding tax years are below the inflation-adjusted limit (around $31 million for 2026) and the contract is expected to be completed within two years of commencement, you are exempt from the Section 460 percentage-of-completion requirement on those non-home contracts. Cross either test — receipts or duration — and the mandate kicks in.
  • Contracts that are not exempt must use percentage-of-completion for tax, which generally accelerates income recognition compared to waiting until the final nail. Large commercial and multi-family projects often land here.

Even if you are exempt for tax, your banker and bonding agent still want WIP schedules on the percentage-of-completion basis because it is the only view that matches revenue to reality. Many roofers keep management books on percentage-of-completion and reconcile to tax at year-end with their CPA.

This is not tax advice — thresholds adjust for inflation and your situation may involve additional exceptions. Confirm with a construction-savvy CPA before changing a revenue method.

How Banks, Bonding Companies, and Buyers Read Your WIP

If you plan to borrow for a new crane truck, increase a line of credit, get bonded for a $1M school district job, or eventually sell the business, the WIP schedule is the first document a third party requests after your financial statements.

What they look for:

  • Gross profit fade. Is the forecasted gross margin at completion lower than the margin on the same job last month? Two consecutive months of fade on the same job is a red flag that estimates were optimistic or change orders were missed. Healthy contractors explain fade before they are asked.
  • Aging of underbillings. Sixty-day-old underbillings that keep growing suggest you are funding the job and may not have a handle on billing. Sixty days of overbillings funded by a well-negotiated draw schedule is normally fine if it is intentional.
  • Concentration. Is 70% of your backlog in one job with one owner? Great WIP or not, that is risk.
  • Backlog tied to WIP. Backlog is remaining unearned revenue on open jobs plus signed but not yet started work. A $900,000 backlog with $40,000 of underbilling paints a very different cash picture than the same backlog overbilled by $80,000.

Keeping a rolling 6-month WIP history — not just one snapshot — shows you are managing, not reacting.

The Monthly WIP Close: An 8-Step Routine

Block two hours on the last business day of each month and run this sequence with your office manager, bookkeeper, and lead foreman:

  1. Freeze job costs. Ensure all material receipts, sub invoices, and time sheets through month-end are posted to the correct jobs.
  2. Update estimated costs to complete. Walk each active job with the foreman. Capture remaining labor days, outstanding material, final metal, inspections, and closeout.
  3. Log change orders. Separate approved vs. pending. Adjust revised contract value only for signed orders.
  4. Run the calculations. Let the sheet compute percent complete, earned revenue, and over/under billing.
  5. Review profit fade or gain. For any job where forecasted margin shifted by more than one point, document why. Update estimates if the shift is real.
  6. Reconcile to the general ledger. Total WIP costs incurred, billings, overbillings, and underbillings should tie to the balance sheet. If they don't, a job tag is missing.
  7. Invoice accordingly. Use the WIP to decide whether to pull forward a billing (if underbilled and contract allows) or hold off (if already overbilled and cost forecasts are about to rise).
  8. Share the one-pager. Send the summarized WIP to your CPA and, if required, your lender — with brief commentary on the two or three jobs that moved the most.

Done consistently, this beats a quarterly scramble that always arrives after decisions have already been made.

Common Mistakes That Make Your WIP Useless

  • Treating the estimate at bid as immutable. Original budgets are educated guesses. Insisting they never change guarantees a WIP that never reflects reality.
  • Letting costs sit in the wrong month. A late vendor invoice applied next month will show last month as more complete — and more profitable — than it was. Accrue known costs.
  • Billing off gut feel instead of the schedule. Random progress invoices disconnected from percent complete create wild over/under swings that confuse everyone.
  • No separate retainage tracking. Buried retainage inflates past-due receivables and hides true cash timing.
  • One person updates costs, another updates billing, and they never meet. The WIP lives where field, office, and accounting intersect. Keep it collaborative.
  • Ignoring small residential jobs. Even 3-day shingle jobs that cross month-end on the 30th/31st create a WIP population. Batch small jobs on a simplified WIP or use completed-contract if eligible — but pick a rule and stick to it.

The Three Numbers That Matter Most After the WIP

Once the schedule is accurate, three KPIs deserve a spot on your monthly owner packet:

  • Job gross profit percentage, estimated vs. earned-to-date. If the blended margin on open jobs is trending down while closed-job margins also trend down, pricing or production needs attention, not just one bad job.
  • Underbilling as a percentage of monthly revenue. Consistently over 15–20% suggests you are leaving cash on the roof. Tightening billing cycles or renegotiating draw schedules often unlocks more working capital than a loan.
  • Days of cash tied up in WIP and retainage. How many days of revenue are parked in underbillings plus retainage receivable? Watching this trend by quarter tells you whether growth is self-funding or quietly consuming every extra dollar.

Simplify Your Financial Management

Running roofing jobs by bank balance, gut feel, and a year-end scramble to categorize expenses is how good craftsmen end up surprised by cash crunches they never saw coming. A disciplined monthly WIP schedule — built on clean job costing and an honest cost-to-complete — turns every job into a transparent story about revenue earned, costs consumed, and cash expected.

Keeping that story accurate depends on bookkeeping that captures every ticket, every timecard, and every change order to the right job at the right time. That is where Beancount.io comes in: plain-text accounting that is transparent, version-controlled, and AI-ready, so your WIP ties to your ledger and your ledger ties to reality — not to a black-box spreadsheet you hope is right. Get started for free and see why developers and finance professionals are switching to plain-text accounting.

Share this article