A contractor can run profitable jobs, keep cash in the bank, and still be told by their surety that the bonding line is staying where it is. The reason usually is not the profit. It is that the books cannot produce a work in progress schedule the underwriter is willing to trust, and without that, nobody is raising the size of job you are allowed to bid.
That is the real test of construction bookkeeping. Not whether the bank account reconciles. Whether the books can produce, on demand and per job, the numbers a surety, a lender and your own project managers need to see. This article works backwards from that output.
What is construction bookkeeping?
Construction bookkeeping is the practice of recording every dollar a contractor spends and bills against the specific job it belongs to, so each contract carries its own cost, revenue and margin history instead of disappearing into company-wide totals.
General bookkeeping asks what the company spent last month. Construction bookkeeping asks what job 214 spent last month, how that compares to what job 214 was estimated to spend, and how much of job 214 is left to build. The unit of measurement is the contract, not the calendar month, and contracts run across months and often across fiscal years. That single difference drives everything else: the account structure, the billing mechanics, the revenue recognition, and the reporting.
Done properly, it tracks five things separately for every open contract:
- Contract value, including approved change orders and the date each was approved
- Costs incurred to date, split into labor, materials, subcontractors, equipment and other direct cost
- Billings issued to date, with retainage held separately from ordinary receivables
- Estimated cost to complete, updated by the person actually running the job
- Gross margin to date, and how that margin has moved since the job started
The five inputs every WIP schedule is built from
A work in progress schedule is the report that turns those per-job records into a picture of the whole company. It shows every open contract, what has been earned, what has been billed, and whether you are overbilled or underbilled on each one. It is the document a surety underwriter reads after your financial statements, and it is the reason job-level bookkeeping matters commercially rather than just tidily.
A WIP schedule cannot be assembled from nothing. It is built from five inputs, and if the books do not produce all five cleanly, per job, the schedule gets estimated instead of calculated. Underwriters can tell. Run this audit against your own books:
- Direct job cost separated from overhead in the chart of accounts. One “Materials” account that mixes job materials with shop supplies makes every job margin wrong by an unknown amount. Direct cost accounts and overhead accounts have to be structurally different, not distinguished by a memo field somebody remembers to fill in.
- Cost codes that match how you estimate. If the estimate is built in eight divisions and the books record cost in three buckets, estimate versus actual is not a comparison, it is a guess. The coding structure in the accounting system has to mirror the coding structure in the estimate, or the variance report is decorative.
- Contract value and change orders tracked per job, with dates. Original contract value, each approved change order, the date of approval, and the running revised contract value. Change orders that live in email and get added to the books at the end are the single most common cause of a WIP that does not tie out.
- Billings to date per job, with retainage held separately. Retainage is not an ordinary receivable and should never sit in the same account as one. It has different timing, different collectability and different treatment in a working capital calculation, which is exactly the calculation your surety is running.
- Cost to complete, updated monthly by the person running the job. This is the one input that cannot come from the accounting system, because it is a forecast rather than a record. When the bookkeeper produces it by subtracting costs to date from the estimate, the schedule reports what was hoped for at bid time rather than what is actually going to happen.
Fail any one of those and the WIP schedule stops being a report and becomes an opinion.
Exact Partners’ position on this is shaped by the firm’s franchise and multi-unit work, where the same problem shows up wearing different clothes. A multi-location operator who cannot see profitability by location has exactly the failure a contractor has when they cannot see profitability by job: consolidated totals that look fine while individual units quietly lose money. The fix in both cases is the same, and it is a structural one. The account and coding architecture has to be designed backwards from the report you need, which is why unit-level reporting for franchise owners and job-level reporting for contractors are the same discipline. An outsourced accounting team that has built one can build the other.
JOB-LEVEL BOOKKEEPING
Can your books produce all five of those inputs today?
exact_ runs the monthly close, the job-cost detail and the WIP schedule for growing companies, so the numbers your surety and your bank ask for are ready before they ask. No new software to buy first.
Construction bookkeeping vs general bookkeeping
The mechanics differ line by line, and the differences compound over a long contract.
| Function | General bookkeeping | Construction bookkeeping |
|---|---|---|
| Unit of measurement | The accounting period | The individual contract |
| Cost detail | By expense category | By job, then by cost code within the job |
| Revenue timing | When invoiced or received | Earned as the contract progresses |
| Receivables | One AR balance | AR plus retainage, tracked separately |
| Billing | Invoice on delivery | Progress billing against schedule of values |
| Payroll | By employee and department | By employee, job and often by prevailing wage class |
| Key monthly report | P and L | WIP schedule, with the P and L second |
One caveat on that table. The payroll row is where multi-state contractors get caught, because the reporting obligation changes with the state the work is performed in rather than the state the company is registered in. Contractors running crews across state lines, or across several divisions, hit the same consolidation problem as a business doing accounting across multiple locations.
Percentage of completion, and the tax election that is a separate decision
The accounting method usually gets framed as a single choice: cash or accrual, percentage of completion or completed contract, pick one. That framing is the reason so many contractors end up maintaining two sets of numbers by accident.
They are two decisions.
The first is how your financial statements report revenue. Under generally accepted accounting principles, revenue from a long-term contract is recognized as the work is performed, which in practice means percentage of completion driven by cost incurred against total estimated cost. ASC 606 is the standard that governs it. This is the basis your surety and your bank underwrite on. If you want bonded work or a meaningful line of credit, you are producing accrual, percentage-of-completion financials with a WIP schedule attached, and there is no election that gets you out of it.
The second is how you report the same contracts to the IRS. That one does have an election. Section 460 generally requires percentage of completion for long-term contracts, but section 460(e)(1)(B) exempts a construction contract that the taxpayer expects at signing to complete within two years, provided the taxpayer meets the gross receipts test of section 448(c). For taxable years beginning in 2026, that test is met when average annual gross receipts for the prior three years do not exceed $32,000,000, per Revenue Procedure 2025-32, section 3.30.
Two things changed recently that a 2026 article has to say out loud. The One Big Beautiful Bill Act rewrote the residential side of section 460(e): “home construction contracts” became “residential construction contracts”, the old limit of four or fewer dwelling units was removed, and the expected construction period for the exemption moved from two years to three. It applies on a cut-off basis to contracts entered into in tax years beginning after 4 July 2025, per RKL’s summary of the section 460(e) change published 6 October 2025. For a builder putting up apartment buildings, that is a genuine planning opportunity that did not exist two years ago.
The practical consequence is the part contractors miss. Electing the completed contract method for tax does not change what your financial statements have to say. You run one set of books, coded well enough to support both, and the tax method becomes a schedule rather than a second reality. Getting that structure right is a business tax services conversation and an accounting conversation at the same time, which is precisely why splitting the two across two providers goes wrong so often.
Retainage and change orders, where margin quietly disappears
Two mechanics do more damage to contractor margin than anything else in the books, and both are bookkeeping problems before they are business problems.
Retainage. The owner holds back a percentage of each progress payment, commonly five or ten percent, until the job is closed out. If that sits inside ordinary accounts receivable, three things break at once. Your AR aging looks worse than it is, because retainage is not late, it is withheld by agreement. Your working capital calculation looks better than it is, because your surety will discount or exclude retainage that is not collectible in the near term. And nobody chases it, because it is not visibly overdue. Retainage receivable belongs in its own account, aged by job and by expected release date.
Change orders. Work performed on a verbal approval, or on an approval that never reaches the accounting system, shows up in the books as cost with no matching contract value. On a WIP schedule that reads as a job whose margin is collapsing, which is the single fastest way to make an underwriter nervous. The fix is procedural rather than technical: no change order enters the cost side until the revised contract value enters the revenue side, and both carry the approval date.
What does a surety underwriter look for in a WIP schedule?
An underwriter is reading the WIP schedule for signs that the contractor knows what is happening on their own jobs. As UFG Insurance’s Erle Benton, AVP of surety contract underwriting, put it in April 2026, “For sureties, the WIP schedule is indispensable in determining a construction company’s financial health,” and a well-prepared one “can significantly enhance a contractor’s bonding capacity” while a poorly documented one limits it. Read the full UFG Surety guidance for the underwriter’s own account of it.
In practice the schedule gets read for four things: whether estimated gross margins are holding or fading as jobs progress, whether the company is systematically overbilled (which flatters cash and can mean the balance sheet is borrowing from unfinished work), whether underbillings suggest work performed and not invoiced, and whether the completed jobs closed out near the margin they were bid at. Consistency across those four is worth more than any single strong number.
Why new software will not fix a broken chart of accounts
Ask a contractor how they plan to fix their job costing and the answer is almost always a piece of software. Sage, Foundation, Procore, Buildertrend, QuickBooks with a job-costing layer bolted on. The tools are good and the instinct is not wrong, but the sequencing usually is.
A migration carries your existing structure across. If the current chart of accounts never separated direct job cost from overhead, the new system inherits accounts that never separated direct job cost from overhead, and produces the same unusable WIP in a better interface. If cost codes never matched the estimating structure, they still will not after the conversion. Software changes where the data lives. It does not change what the data means, and it will not retroactively assign three years of miscoded transactions to the right jobs.
The order that works is unglamorous. Fix the account structure and the cost coding first, on paper. Get one month closed cleanly under the new structure. Then move systems, if you still need to. Where the historical data is already tangled, that is a bookkeeping cleanup before it is a software project. Where the monthly WIP needs an owner who is not the bookkeeper and not the owner, that is what an outsourced controller is for.
Frequently asked questions
What is job costing in construction bookkeeping?
Job costing is the practice of assigning every cost to the specific contract that incurred it, then coding it within that contract by category: labor, materials, subcontractor, equipment. It lets you compare actual cost to the estimate at the same level of detail the estimate was built in, so you can see a job losing money while there is still time to do something about it.
Can a construction company use cash basis accounting?
For tax purposes, often yes, if the company meets the section 448(c) gross receipts test. For financial statements a surety or bank will accept, effectively no.
What is a WIP schedule and who asks to see it?
A work in progress schedule lists every open contract with its revised contract value, costs incurred to date, estimated cost to complete, percentage complete, revenue earned to date and amounts billed to date. From those columns it derives the two numbers everyone cares about: overbillings, where you have invoiced more than you have earned, and underbillings, where you have earned more than you have invoiced. Sureties ask for it as part of the bonding file and typically read it immediately after the financial statements. Banks ask for it when a line of credit is up for renewal. Private equity buyers and their diligence teams ask for it early, because it is the fastest way to see whether reported margin is real. Well-run contractors produce one monthly for themselves, because by the time a fading margin shows up in the annual financials, the job is finished and the money is gone.
How should retainage be recorded?
In its own receivable account, separate from ordinary accounts receivable, aged by job and by expected release date rather than by invoice date. Retainage payable to your own subcontractors gets the same treatment on the liability side. Keeping both separate is what lets a surety calculate working capital the way they intend to.
Do I need construction-specific accounting software?
Eventually, most contractors do, usually somewhere between the point where job count outgrows a spreadsheet and the point where progress billing becomes weekly. But the account structure and cost coding have to be right first, because the migration will copy whatever structure you already have.
Talk to exact_ about your job-cost reporting →
About the author. This article was written by Dan Spada, CPA, at Exact Partners, a national outsourced accounting, fractional CFO and business tax firm founded in Buffalo, New York in 2021 and named No. 152 on the 2026 Inc. 5000 list of America’s fastest-growing private companies, its second consecutive year on the list. Dan and the Exact team build job-level and unit-level reporting for growing companies, including franchise and multi-unit operators who face the same consolidation problem contractors do. Learn more about Dan Spada and the Exact Partners team.
This article is general information, not accounting or tax advice for your specific situation. Tax rules change and vary by state and by contract type. Confirm any accounting method election with a qualified advisor.