Construction job cost report: actuals and cost to finish

Keep posted costs, open commitments, and the remaining forecast separate so a low spend total cannot conceal an overrun.

Eric Mills··6 min read

Your construction job cost report shows a subcontract below budget, but the project manager expects another invoice and has approved more work. Posted costs alone cannot tell you what the job will cost to finish. Build the report around a common reporting date, with actual cost, committed cost not yet included in posted actuals, and the approved estimate for work that is still uncommitted.

A useful row connects those amounts to the same company, job, cost code, and cost type. Keep the original budget beside the revised budget so approved changes remain visible. The report then shows where the expected final cost has moved, with the source records and forecast owner available for review.

Set the reporting basis before combining exports

Choose a cutoff that accounting and the project team can both reproduce. A Sage or QuickBooks actual-cost export through September 30 should not be compared with an October 5 commitment balance without explaining the difference. Record the transaction date used, the refresh time, and whether late postings will restate the prior report. Keep snapshots when you need to explain changes between reviews.

Write down which costs the report includes: direct labor, materials, subcontract work, equipment, and any allocated overhead under your approved policy. Compare amounts using the same tax and currency treatment. If payroll or another source has not arrived, label the affected cost types as incomplete; a missing labor feed does not establish that labor cost was zero.

Keep operational forecasts separate from posted accounting amounts. The forecast owner can revise the estimate of remaining work without rewriting what accounting has recorded. That distinction gives the controller a way to trace a margin movement to either a new transaction, a changed estimate, or a changed mapping.

Map company, job, cost code, and cost type

Use company-scoped job IDs to join accounting records to the project. A repeated job number in another entity is a different key, even if the description is the same. Store the source ID and the destination ID with the mapping. A name can help an owner investigate a match, but it should not decide where a transaction belongs.

Map both cost code and cost type. A concrete code can include material purchases, equipment charges, and subcontract labor; joining on the code alone removes the distinction you need to explain a variance. If your project hierarchy is more detailed than the accounting hierarchy, state how those records roll up and retain their original references for drill-down.

Keep unmatched rows in a visible review queue with their amounts, source references, and mapping owner. Report the unmapped total beside the mapped total so the reader can see what the cost-code view excludes. A changed cost code needs an effective date or an explicit restatement rule; silently applying the new mapping to every historical period changes the comparison.

Calculate the expected final cost without double counting

The following synthetic example uses dollar amounts for one job at a single cutoff. Open commitments contain only committed cost that is not already included in posted actuals. Remaining uncommitted work is an owner-approved forecast that excludes those commitments. With that basis, expected final cost equals actual cost plus open commitments plus remaining uncommitted work.

Cost scopeRevised budgetActual costOpen commitmentsRemaining uncommittedExpected final costOver budget
Concrete$300,000$180,000$90,000$45,000$315,000$15,000
Mechanical$400,000$220,000$170,000$30,000$420,000$20,000
Site work$200,000$100,000$60,000$20,000$180,000-$20,000
Total$900,000$500,000$320,000$95,000$915,000$15,000

Actual cost is $500,000, which leaves $400,000 of the revised budget unspent. The expected final cost is $915,000, because the remaining commitments and uncommitted work together add $415,000. The $15,000 overrun requires a forecast review even though actual spend is below budget. These values illustrate the arithmetic; they are not a customer outcome or a recommended contingency.

Some project reports already call their complete remaining forecast cost to complete, including committed cost not yet included in actuals. If you use that definition, expected final cost is actual cost plus cost to complete, and adding open commitments again would count them twice. Require the forecast owner to identify the basis before you combine a Procore or Autodesk export with the accounting actuals.

Download the sample job cost report to inspect the inputs and calculated totals. The file labels the sample as synthetic and uses the same remaining-cost definition as the table. Replace its figures and add your source references only after your project and accounting owners agree on the reporting basis.

Follow a variance back to its inputs
Posted actuals

Accounting reference and cutoff

Remaining cost

Open commitment plus uncommitted forecast

Variance review

Budget revision and forecast owner

Keep transaction evidence separate from forecast approval so a reviewer can identify which input changed.

Explain changes before rolling up the portfolio

Compare the prior and current report by the same job and cost scope. Show changes in actuals, remaining estimates, and revised budget as separate movements. A forecast transfer between cost codes can move a row without changing the job total; a late invoice can increase actuals while reducing the remaining commitment. Both need an explanation grounded in the source records.

Include pending scope changes in a separate scenario until the authorized owner approves their treatment. Do not add a pending revenue change to the contract amount while including its cost in the approved budget, or hide the cost because the revenue has not been accepted. The report should expose that unresolved decision, with the change reference and owner.

For a billing and earned-revenue review, use the separate construction WIP report. The job cost report supplies cost evidence and the approved remaining estimate; the WIP schedule adds contract value, billings, and the accounting basis chosen by finance.

How Permute builds recurring job cost reporting

Permute sells connected data and custom reporting software for businesses with fragmented operating and financial records. We combine supplied project records with accounting sources, preserve their references, and apply approved company, job, and cost-code mappings. Unmatched records remain available for review instead of being folded into an unexplained balancing amount.

We encode the agreed cutoff and remaining-cost definition in reusable reporting logic. A controller can inspect the transactions and forecast assumptions behind a variance and refresh the same view when the underlying records change. A project manager sees the reporting scope allowed by their permissions, with the relevant evidence behind the figure.

The existing Procore integration review covers the record ownership and transfer evidence that sit upstream of this report. Reporting can identify a mismatch, while the authorized project or accounting owner corrects the originating record.

Inspect one job with its source records

Bring an accounting export and the corresponding project forecast into a workspace. Check the cost scope and source evidence before widening the report.

Keep accounting and forecast decisions with their owners

This reporting workflow does not post accounting entries, approve change orders, or write changes back to Procore or an ERP. Finance decides the accounting treatment, and the project owner supplies the approved forecast. We execute declared reporting rules; we do not choose revenue recognition policies or estimate the remaining work without an approved basis.

Use daily or scheduled reporting for management review, with source refresh times displayed. It is not a live field-cost ledger. When a required feed or forecast is stale, keep that limitation visible (including the affected job and cutoff) before using a portfolio total to make a commitment.

A construction job cost report connects the actual spend to the approved cost of finishing the job. Its remaining-cost definition prevents commitments from being counted twice, while company-scoped mappings keep transactions on the right project. A variance becomes reviewable when the report retains its budget revision, cutoff, and source evidence. The project manager and controller can then resolve the expected overrun without treating low posted spend as proof that the job is under budget.

Map your job cost reporting inputs

Bring one job, its accounting actuals, and the current project forecast. We will review the mappings, remaining-cost definition, and evidence your recurring report needs.

Questions about job cost reporting

How should credits and reversals appear?

Retain their signed amounts and the reference to the original transaction. Apply the same cutoff and cost mapping as other posted costs, then show material reversals in the movement review. A negative row should not be dropped because it looks unlike an invoice.

Should closed jobs remain in the report?

Keep them where a late posting, unresolved commitment, or final adjustment can still change the reported outcome. Define who confirms completion and what evidence releases a job from the active review. Preserve the final snapshot even after the active reporting scope changes.

Can an allowance be treated as a commitment?

Use the classification approved by your project and finance owners. An allowance in the forecast is not evidence that a supplier has accepted an obligation. Keep its basis visible so it is not also included in open commitments when a purchase order is later approved.