Most controllers assume their multi-entity job costing problems live in the general ledger. If the GL reconciles and the entity flags are clean, the thinking goes, the rest will follow. It rarely does. By the time data hits the GL, the entity attribution is often already wrong, and consolidating clean numbers from dirty inputs just produces consolidated dirty numbers, faster.
The breakage happens upstream, at the source systems where labor, materials, equipment, and AP get coded. Multi-entity job costing is mostly a data origination problem dressed up as an accounting problem — which is why ERP migrations rarely solve it and why the same variances keep showing up in different software.
Below are the five places it most reliably falls apart in construction, and what's required to actually fix each.
1. Field labor coded against the wrong entity
A foreman who runs crews across two legal entities in the same week — one for a public works subsidiary, one for the parent — has to remember which job belongs to which entity and code accordingly. Most field timekeeping systems don't enforce this because they don't know about your entity structure. They know about jobs.
The result: hours land on the right job but get burdened against the wrong entity's payroll. The error doesn't surface in WIP because the job costs reconcile. It surfaces months later when audit unwinds the intercompany payroll allocation, and by then the period is closed and the variance is unrecoverable.
The fix lives at the timekeeping layer, not the GL. Field-side construction time tracking software needs to inherit entity from the job and validate it against the worker's eligible entity assignments before submission. That validation has to happen before approval, not after — which means the system needs your entity structure baked in, not bolted on.
2. Shared equipment with no allocation method
Equipment that moves between entity-owned jobs is the second-largest source of multi-entity costing error, and the one most often handled with a quarterly journal entry. The truck owned by Entity A spends three weeks on Entity B's project; nobody charges anything in real time; the cost gets allocated at month-end through a markup formula nobody can defend in detail.
Two things are broken here: the allocation method and the timing. By the time the JE posts, the job is closed and the variance can't be acted on. PMs see clean numbers all month and ugly numbers at close, then stop trusting both.
This one needs an explicit policy decision before any system can fix it: are you charging shared equipment via internal rental rates, actual cost plus admin, or pure cost transfer? Until that policy exists, no amount of automation will help. Once it does, the equipment cost should follow the same path as labor — coded at the source, validated against entity rules, and posted in the period it was incurred.
3. Intercompany AP that loses the job code
Vendor invoices that hit one entity but cover work performed for another are where job cost data goes to die. AP enters the bill against the receiving entity, the intercompany clearing account absorbs the offset, and the job code that should have traveled with the invoice gets dropped somewhere along the way. The job sees a hole; the GL doesn't.
Strong construction AP automation addresses this by making job and entity coding required fields at invoice capture, and by routing intercompany invoices through an approval flow that preserves the original job attribution end to end. The principle is the same as labor: code it correctly at origin, or you'll be reverse-engineering it forever.
4. Committed costs that don't follow the entity
Subcontracts and POs are written against jobs, but they live in committed-cost ledgers that often don't carry entity attribution at all. When a subcontractor invoices against the contract, the receiving entity is whichever one AP enters the bill against — which may or may not match the entity the contract was originally issued under.
This is the single most common source of "we thought this job had $400K committed and it actually had $520K" surprises in multi-entity environments. The committed-cost ledger and the AP ledger drift apart because the entity bridge between them is implicit, not enforced.
The fix is structural. Contracts have to carry entity. AP has to validate against the contract's entity. Committed-cost reports have to roll up at both the job and entity level. Most generic ERP setups can be configured to do this; few are out of the box.
5. Consolidated WIP that doesn't drill down
The last failure isn't about getting data in — it's about getting it out. Most multi-entity setups can produce a consolidated WIP. Few can produce a consolidated WIP that drills down to the entity, then the job, then the cost code, then the source transaction without breaking the consolidation logic at one of those layers.
This is what makes controller life miserable during board meetings. The headline number is right, but you can't defend any of it in real time because the drill paths don't reconcile to the consolidated view. So you produce two parallel reports — one for the board, one for ops — and spend the rest of the month explaining the differences.
What's actually required is a construction accounting software stack where field, AP, and payroll feed a single set of entity-aware ledgers, and the reporting layer reads from that single source. Most multi-entity controllers are stitching this together across an ERP plus three or four point tools that don't share an entity model. That's the root cause.
Why this is mostly an integration problem, not an accounting system problem
The pattern across all five failure modes: the ERP is rarely the limiting factor. Sage Intacct handles multi-entity natively. Sage 300 CRE and Foundation Software both support multi-company structures with the right configuration. What breaks the model is everything that feeds the ERP — timekeeping, AP capture, equipment usage, subcontract administration — operating on a single-entity assumption and forcing the ERP (or the controller) to retrofit entity attribution after the fact.
Multi-entity job costing isn't fixed by switching ERPs. It's fixed by making the systems upstream of the ERP entity-aware, so data arrives correctly classified rather than getting cleaned up downstream. The same logic that applies to construction payroll software applies here: validate at the source, not at the close.
Four diagnostic questions for your own stack
If you're trying to assess where your own multi-entity costing is leaking, these four questions surface most of the failure modes above:
- Can a field timekeeping app reject a timesheet because the worker isn't eligible to charge to the entity that owns the job?
- Can your AP system require entity coding at invoice capture, and validate it against the receiving job?
- Does your committed-cost ledger reconcile to AP at both the entity and consolidated level?
- Can a single drill-down path get you from the consolidated WIP to a source transaction without switching reports?
If any of those four questions came back no, the fix is rarely a new ERP — it's making your field, AP, and timekeeping systems entity-aware before the data ever reaches the ledger. See how hh2 closes that gap for multi-entity contractors. Schedule a demo.
Simplify Your Time Tracking
Eliminate manual data entry and manual errors while simplifying nearly every back-office process with hh2's construction solutions.
Blog Transcript