Every contractor has had this moment: the job-cost report says you’ve spent $410,000 on a job, but the general ledger shows less. Which one is wrong? Usually neither. They’re measuring two different things, and once you see the split you’ll never be confused by it again.
The ledger is fact. The job report is fact + forecast.
The general ledger only records what has actually happened — an invoice approved, a payroll run, a payment made. It’s the immutable book of record. A good job-cost report shows you something more useful for running the job: not just what you’ve spent, but what you're going to spend. That forward-looking piece is exactly why the two numbers differ.
The two buckets that create the gap
- •Committed cost. You signed a $90,000 subcontract. You owe that money, so it shows on the job report — but the sub hasn’t billed you yet, so it isn’t in the ledger. That's an open commitment.
- •Accrued cost. A crew worked this week or a sub finished a phase but the invoice hasn’t arrived. The cost is real and belongs to the job, but it hasn’t posted yet.
Add those to posted cost and you get the job-cost number. So job cost = posted GL cost + open commitments + accruals. The difference between your job report and your GL isn’t an error — it's those two buckets, and you should be able to point to them.
Why a delay doesn’t break it
This is where schedule-based systems fall apart. If a sub gets weather-delayed for three weeks, a system that “draws down” commitments on a calendar will wrongly show that money as spent. The correct approach is event-driven: a commitment only converts to cost when a real invoice posts. A stalled sub keeps its full commitment automatically — your forecast absorbs the delay, and your posted history never changes.
The 30-second reconciliation
When someone asks why the numbers differ, you walk it: “Posted cost is $321,000. We have $79,000 in signed subs not yet billed and $10,000 in labor accrued this week. That’s the $410,000 on the job report.” Three numbers, fully explained. If they don’t add up, that's your signal something is coded to the wrong job or account — which is the whole point of reconciling.
How Bullwork keeps them tied
In Bullwork, the general ledger is the single source of truth. Every approved cost posts to the ledger, and the job-cost and WIP views are derived from it — posted cost, plus open commitments, plus accruals, each labeled. The gap is never a mystery because the platform shows you exactly what it's made of, on every job, in real time.
