Expert guide

Construction Change Order Log in Excel

Every scope change priced, approved and billed, so extra work does not become free work

Short answer: keep one Excel Table of change orders across all jobs with number, job, description, reason, cost breakdown, contract markup, price, schedule impact, status, approval reference and billed amount. Calculate revised contract value per job with SUMIFS on approved changes, flag work "proceeding at risk", and review unapproved and unbilled totals weekly. Feed approved changes into your construction job costing spreadsheet.

On most construction jobs, margin is won or lost on changes. The base contract was priced carefully; the extra outlet, the moved wall and the unforeseen rock were agreed on site with a handshake. If those changes are not written up, priced, approved and billed, the contractor pays for them. A change order log is the simplest control that stops that happening, and Excel is where most small and mid-sized contractors keep it.

The Log Structure

ColumnExampleWhy
CO NoJ2614-CO-007Job number plus sequence; never reuse numbers
JobJ2614 Riverside Clinic fit-outLinks to job costing
Raised / Requested by2026-10-14, Owner's PMWho asked for it
DescriptionAdd 6 data outlets, level 2Specific enough to price and bill
ReasonOwner request / Design change / Unforeseen / Our errorTrends and recoverability
Labour, Materials, Equipment, SubcontractCost columnsDirect cost build-up
Price to ownerFormulaCost plus contract markup
Days impact2Schedule claims
StatusPricing / Submitted / Approved / Rejected / Proceeding at riskControl
Approved on, Approval refDate, signed CO or email referenceEvidence
Billed, Invoice noAmount, numberCloses the loop

Formulas

Direct cost:
=SUM([@Labour], [@Materials], [@Equipment], [@Subcontract])

Price to owner (compounding overhead then profit; check your contract):
=ROUND([@DirectCost] * (1 + Settings!Overhead) * (1 + Settings!Profit), 2)

Self-performed vs subcontract markups often differ:
=ROUND(([@Labour]+[@Materials]+[@Equipment]) * (1+Settings!OHP_Self)
      + [@Subcontract] * (1+Settings!OHP_Sub), 2)

Days since submitted (for chasing approvals):
=IF([@Status]="Submitted", TODAY() - [@SubmittedOn], "")

Unbilled approved amount:
=IF([@Status]="Approved", [@Price] - N([@Billed]), 0)

Keep markup percentages on a Settings sheet, per job if contracts differ, rather than typing them into formulas. When a contract specifies different markups for self-performed and subcontracted work, the second price formula handles it.

Revised Contract Value per Job

On a Jobs summary table:
Original contract:   (entered)
Approved changes:    =SUMIFS(tblCO[Price], tblCO[Job], [@Job], tblCO[Status], "Approved")
Revised contract:    =[@[Original contract]] + [@[Approved changes]]
Pending changes:     =SUMIFS(tblCO[Price], tblCO[Job], [@Job], tblCO[Status], "Submitted")
At-risk exposure:    =SUMIFS(tblCO[DirectCost], tblCO[Job], [@Job],
                             tblCO[Status], "Proceeding at risk")
Unbilled approved:   =SUMIFS(tblCO[Unbilled], tblCO[Job], [@Job])

At-risk exposure uses direct cost, not price, because that is what you lose if the change is never approved.

The Weekly Change Order Review

  • Pricing for more than 5 days

    Changes discussed on site but not yet priced. Every day without a price weakens the position.

  • Submitted for more than 14 days

    Chase approvals; escalate the longest-waiting.

  • Proceeding at risk

    Total exposure by job and by project manager.

  • Approved but unbilled

    Should appear on the next progress claim.

  • Our-error changes

    Not billable, but worth tracking: they show where estimating or coordination needs attention.

Reason Analysis Across Jobs

A PivotTable of change order value by Reason and by Job, or by client, often reveals patterns: one architect whose drawings generate most design changes, one type of job where unforeseen conditions are routine and should be priced as contingency next time.

Where AI Helps on Site and in the Office

  • Turn a site supervisor's voice note or text into a clear, priceable change description.

  • Draft the change order cover letter from the log row for the PM to edit.

  • Summarise long email threads to find when and by whom a change was instructed.

  • Classify change reasons consistently from free-text descriptions.

Avoid letting AI price changes; pricing comes from your rates and quantities. For classification and drafting, the setup in calling the OpenAI API from Excel VBA works with the log directly.

Connecting to Job Costing and Bids

Change orders revise both the budget and the contract. Code change order costs to the CO number in your job costing spreadsheet to see whether each change made money. On the front end, your bid tracking spreadsheet shows which clients and project types generate the most changes. Contractors running many jobs with several PMs often move this into a shared database such as our job costing Access database, so everyone works from one log.

FAQ

Change order log FAQ

Structure, markup and approvals

A change order log is a running register of every change to a construction contract's scope, price or schedule: what was requested, by whom, the cost and time impact, approval status and whether it has been billed. It protects margin by making sure approved extra work is priced, signed and invoiced.

Change order number, job, date raised, requested by, description, reason (owner request, design change, unforeseen condition, error), cost breakdown (labour, materials, equipment, subcontract, markup), price to owner, schedule impact in days, status, approval date and reference, and billed amount and invoice number.

Sum the direct costs, then apply the overhead and profit percentages allowed by the contract, for example =ROUND(DirectCost*(1+Overhead)*(1+Profit),2) if markups compound, or =ROUND(DirectCost*(1+Overhead+Profit),2) if they are additive. Check which method your contract specifies.

That is a commercial and contractual decision, but if it does, the log should show it clearly as 'Proceeding at risk' with the date work started, so unapproved exposure is visible to management every week.

Approved change orders revise the job's contract value and budget. Costs incurred on change order work should be coded to the change order number in the job cost system or spreadsheet, so you can see whether each change order made or lost money.