ERP for Construction: Job Costing, WIP, and Retainage
A $22 million general contractor discovered mid-project that its "profitable" $4.1 million hospital wing job was actually running a $180,000 cost overrun. QuickBooks had been showing healthy numbers all along, because it had no way to produce an accurate work-in-progress (WIP) schedule — the report that compares what's been billed against what's actually been earned based on real progress. The company found out from its bonding agent during a routine review, not from its own books, which is about as late as that discovery can happen without real damage.
Job costing by cost code, not just by project
Tracking a project's total cost against its total budget tells you almost nothing about where the money actually went. Construction accounting breaks every project down into CSI (Construction Specifications Institute) cost codes — 03-300 for cast-in-place concrete, 09-900 for painting, and so on — so budget-to-actual comparisons happen at the level where decisions get made. A general contractor can be $40,000 under budget on structural steel and $55,000 over on electrical rough-in, and the two errors will cancel out in a project-total view while leaving the electrical subcontractor relationship as a real problem nobody's looking at.
The WIP schedule — the report that actually matters
Work-in-progress reporting uses the percentage-of-completion method to recognize revenue as it's earned rather than when cash changes hands. The standard calculation is cost-to-cost: costs incurred to date divided by total estimated cost at completion. On a $3.4 million total estimated cost with $2.1 million incurred so far, that's 62% complete. If the contractor has actually billed $2.4 million against that 62% completion, the job is overbilled by roughly $180,000 — money collected ahead of work performed, which looks like healthy cash flow right up until the final stretch of the project runs short. WIP reporting exists specifically to catch that gap before it becomes a cash crunch at the worst possible time.
Retainage tracking
Owners typically withhold 5% to 10% of each payment application until substantial completion, as security against defects and unfinished punch-list items. That retainage needs its own aging bucket in accounts receivable, separate from the regular invoice balance, because it won't be collected on the normal 30-day cycle — it might sit for the full length of the project. The same logic applies in reverse to subcontractors: a general contractor typically withholds the same percentage from sub payments, and that retainage payable needs to mirror the retainage receivable structure so the two don't get confused during a cash flow forecast.
AIA billing and compliance documentation
Standard progress billing on commercial projects follows the AIA G702/G703 format — a summary sheet (G702) backed by a detailed schedule of values (G703) breaking the bill down by cost code. Each payment application typically needs a conditional lien waiver attached before payment and an unconditional waiver once payment clears, and an ERP built for construction tracks waiver status per payment application automatically rather than relying on someone remembering to chase paperwork. The same system usually tracks certificate of insurance (COI) expiration dates for every active subcontractor, since an expired COI discovered during an audit, or worse, after an incident — is a liability problem that a standing report prevents.
Change orders
A $45,000 change order for added electrical scope needs to move through an approval workflow before it touches the project budget, not after. Construction ERP systems typically hold change orders in a pending state that shows up in reporting as a potential budget impact, so a project manager can see the exposure before the client signs off, rather than discovering after the fact that unapproved work already happened and now needs to be argued over.
Equipment costing
Contractors who own their own equipment — excavators, cranes, concrete pumps — need an internal hourly rate charged back to each job that uses it, covering depreciation, maintenance, and fuel, the same way a rented piece of equipment would show up as a cost. Without that internal rate, jobs that use company-owned equipment look artificially cheap compared to jobs that had to rent, which distorts bidding on the next project of the same type. Comparing that internal rate against market rental rates periodically is also how a contractor decides whether to buy the next excavator or keep renting.
Why generic accounting software runs out of road
None of this is exotic accounting — it's standard practice across the construction industry. But it requires a system built around project-based, percentage-of-completion accounting from the ground up, not a general ledger with construction-flavored add-ons. The hospital-wing contractor's $180,000 overbilling wasn't a fraud or a bookkeeping mistake in the normal sense; it was a system that simply couldn't produce the one report that would have shown the problem three months earlier, while there was still time to fix it.
Certified payroll on public projects
Government-funded projects covered by prevailing wage law require certified payroll reports, typically filed weekly, showing every worker's classification, hours, and wage rate against the applicable prevailing rate for that trade and county. A contractor running certified payroll through a spreadsheet has to manually cross-reference dozens of workers against wage determination tables that can change by trade and by jurisdiction, and a single misclassified apprentice can trigger a compliance finding that holds up payment on the whole draw. Construction ERP systems that build prevailing-wage rate tables directly into payroll processing turn a report that used to take a full day into one that generates automatically from the same timesheets already being used for job costing.
Committed cost vs. actual cost
A project can look fine on an actual-cost report and still be quietly heading for an overrun, because actual cost only reflects what's been invoiced so far, not what's already been committed through open purchase orders and signed subcontracts that haven't been billed yet. A $3.4 million job might show only $2.1 million in actual costs to date, but if $3.6 million is already committed once open POs and subcontracts are counted, the project is effectively over budget before a single additional invoice arrives. Committed-cost reporting catches that gap while there's still time to negotiate scope, rather than after the final subcontractor invoice lands.
Joint venture project accounting
Large public infrastructure jobs are often bid by two general contractors as a joint venture, splitting risk and combining bonding capacity. That structure needs the ERP to track one project's costs and revenue while simultaneously allocating a defined percentage — say a 60/40 split — back to each JV partner's own books, along with separate JV-level cash management and a periodic settlement process between the partners. Trying to run that allocation in a spreadsheet outside the core job-costing system is a common source of year-end reconciliation disputes between JV partners, since each side's own books can drift from the shared project ledger without anyone noticing until the numbers are compared.
Bonding capacity depends on accurate WIP data
A surety company setting a contractor's bonding capacity — the total dollar value of work it will guarantee at once — relies heavily on the contractor's WIP schedule and financial statements to judge how well the contractor actually manages its backlog. A contractor whose WIP reporting is unreliable, or worse, consistently shows unexplained overbilling, raises red flags during underwriting that can cap bonding capacity below what the contractor's real financial strength would otherwise support. Clean, system-generated WIP data isn't just an internal management tool in that sense — it's a direct input into how much work a contractor is even allowed to bid on, since most public and many private jobs require bonding before a contractor can submit a proposal at all.