AI assistsWorkflow guide · not independently tested

How do I total a change order log by approved and pending status and tie it to the pay app contract sum with AI?

A change order log is only useful if three numbers agree: the approved total on the log, line 2 (net change by change orders) on the pay application, and line 3 (contract sum to date). Most logs fail quietly: the grand total includes rejected and void changes, a pending change gets billed as if it were signed, a status is typed three different ways so filters miss it, a CO number is skipped, and an approved change has no executed date behind it. Have Claude or ChatGPT read the change order documents or the log export into one clean table, and have Copilot in Excel or Gemini in Google Sheets total approved and pending separately, build the revised and pending revised contract sum, and flag every gap against the pay app. Whether a change is owed, and how it is priced, stays with the project manager under the contract.

Project Manager · Construction · Claude · ChatGPT · Microsoft Excel · Microsoft Copilot · Google Sheets · Gemini

Content updated · Tool links listed below; vendor features and pricing change, so confirm with the vendor

Short answer

Use Claude or ChatGPT, then Copilot in Excel or Gemini in Google Sheets: Claude or ChatGPT reads the change order log export or the signed change orders into one clean table; Copilot or Gemini totals approved and pending separately, leaves rejected and void out, builds the revised and pending revised contract sum and flags nonstandard statuses, approved changes with no executed date, duplicate numbers, numbering gaps, and pay app line 2 or line 3 that does not tie to the approved log. A change order log is only useful if three numbers agree: the approved total on the log, line 2 (net change by change orders) on the pay application, and line 3 (contract sum to date). Most logs fail quietly: the grand total includes rejected and void changes, a pending change gets billed as if it were signed, a status is typed three different ways so filters miss it, a CO number is skipped, and an approved change has no executed date behind it. Have Claude or ChatGPT read the change order documents or the log export into one clean table, and have Copilot in Excel or Gemini in Google Sheets total approved and pending separately, build the revised and pending revised contract sum, and flag every gap against the pay app. Whether a change is owed, and how it is priced, stays with the project manager under the contract. A person still checks: every flag against the signed change order and the executed agreement before the pay app is certified or the log goes to the owner; entitlement, pricing and whether a pending change can be billed stay with the project manager under the contract.

AI tie-in

Tool: Claude or ChatGPT, then Copilot in Excel or Gemini in Google Sheets

Claude or ChatGPT reads the change order log export or the signed change orders into one clean table; Copilot or Gemini totals approved and pending separately, leaves rejected and void out, builds the revised and pending revised contract sum and flags nonstandard statuses, approved changes with no executed date, duplicate numbers, numbering gaps, and pay app line 2 or line 3 that does not tie to the approved log.

Prompt 1

Read this change order log [upload the CSV export or the change order PDFs] and build a COLog table with one row per change order: CO number, description, amount (deducts negative), status and executed date, copied exactly. Write NOT SHOWN instead of guessing. List any status that is not one of Approved, Pending, Rejected or Void. Do not change a status and do not judge whether any change is owed.

Prompt 2

EXAMPLE DATA ONLY. Here is my COLog tab [paste the example rows], my original contract sum [type yours] and pay app line 2 and line 3 [type yours]. Write Excel formulas (or a step-by-step Copilot plan) that total approved and pending separately with SUMIFS, exclude rejected and void, build the revised and pending revised contract sum, and flag: nonstandard status, approved with no executed date, duplicate CO numbers, numbering gaps, line 2 different from the approved total (and which pending changes add up to the difference), and line 3 different from original plus approved. Use only my data.

Human check: Every flag against the signed change order and the executed agreement before the pay app is certified or the log goes to the owner; entitlement, pricing and whether a pending change can be billed stay with the project manager under the contract.

The problem

Total a change order log by status and tie it to the pay app contract sum with AI. This is a common, time-consuming task for a project manager.

What this workflow does

A change order log is only useful if three numbers agree: the approved total on the log, line 2 (net change by change orders) on the pay application, and line 3 (contract sum to date). Most logs fail quietly: the grand total includes rejected and void changes, a pending change gets billed as if it were signed, a status is typed three different ways so filters miss it, a CO number is skipped, and an approved change has no executed date behind it. Have Claude or ChatGPT read the change order documents or the log export into one clean table, and have Copilot in Excel or Gemini in Google Sheets total approved and pending separately, build the revised and pending revised contract sum, and flag every gap against the pay app. Whether a change is owed, and how it is priced, stays with the project manager under the contract.

How it works: AI drafts or analyzes. A person operates the tools, checks the work, and takes action.

Your checkpoint: The check only tests the numbers and statuses you give it. A change that was approved by email but never logged, or a log status that is wrong, will not be caught, so confirm each flag against the signed change order. Entitlement, pricing and whether a pending change may be billed stay with the project manager under the contract.

Before you start

  • Access to the named tool; confirm license, version and cost with the vendor.
  • A small, non-confidential sample to try the workflow on first.
  • A qualified person to review the output before it is used.

Tools and access

Follow the steps

  1. Export the change order log to CSV from your project management software, or collect the signed change orders and the open change requests as PDFs.
  2. Have Claude or ChatGPT read them into one COLog tab: CO number, description, amount (deducts negative), status and executed date. It copies values exactly, writes NOT SHOWN instead of guessing, and does not change any status.
  3. Agree on a short status list (for example Approved, Pending, Rejected, Void) and have the AI list every row whose status is not on it, so nothing silently drops out of a filter.
  4. Have Copilot in Excel or Gemini in Google Sheets total approved and pending separately, leave rejected and void out of every total, and build original contract sum, revised contract sum (approved only) and pending revised contract sum (approved plus pending).
  5. Type line 1, line 2 and line 3 from the current pay application and flag line 2 that differs from the approved total, line 3 that is not line 1 plus line 2, approved changes with no executed date, duplicate CO numbers and numbering gaps. When line 2 is high, check whether the difference equals one or more pending changes.
  6. Resolve each flag with the signed documents before the pay app is certified or the log goes to the owner, then rerun the check.

Try a small example

EXAMPLE DATA ONLY — fictional change orders, amounts and dates for practice, not from a real project or a published trial. Paste the Sample input into Copilot or Gemini with the Starter prompt, then compare your results to Expected output.

Sample input

COLog tab (example, CSV)
CO,Description,Amount,Status,ExecutedDate
CO-001,Added floor drains at mechanical room,18400,Approved,2026-08-14
CO-002,Owner-requested door hardware upgrade,7250,Approved,2026-08-29
CO-003,Unforeseen rock at footing excavation,42000,Pending,
CO-004,Delete entry canopy,-15600,Approved,2026-09-10
CO-005,Revised light fixture package,9800,Rejected,
CO-006,Additional firestopping at shafts,3150,Void,
CO-008,Relocate roof drains,6900,Pending,
CO-009,Added blocking for wall-mounted displays,4300,Approved,
CO-010,Extra hose bibb at loading area,2500,Appr,2026-10-02
Typed from the executed agreement: original contract sum 1,250,000
Typed from the current pay app: line 2 net change by change orders 56,350; line 3 contract sum to date 1,306,350

Starter prompt

EXAMPLE DATA ONLY (not from a real project). Original contract sum 1,250,000. COLog tab: nine change orders with number, description, amount, status (Approved, Pending, Rejected, Void and one typed as Appr) and executed date. Pay app line 2 is 56,350 and line 3 is 1,306,350. Write Excel formulas (or a step-by-step Copilot plan) that total approved and pending separately, exclude rejected and void, build the revised and pending revised contract sum, and flag nonstandard statuses, approved with no executed date, duplicate numbers, numbering gaps, and pay app line 2 or line 3 that does not match the approved log. Use only my data; do not decide whether any change is owed.

Expected output

Expected results on this example (output of the script below on these rows)
CO-009 APPROVED BUT NO EXECUTED DATE → confirm it is signed
CO-010 NONSTANDARD STATUS 'Appr' → not counted; fix the status
CO-007 NUMBER GAP → missing from log, or voided without a row
Approved 14,350 | Pending 48,900 (rejected 9,800 and void 3,150 left out of every total)
Revised contract (approved only) 1,264,350 | Pending revised 1,313,250
PAY APP LINE 2 56,350 vs approved log 14,350 (+42,000)
  difference equals pending: CO-003 → a pending change is being billed as if approved
LINE 3 1,306,350 vs original + approved 1,264,350 (+42,000)

Suggested Excel logic (write against your own sheet layout)
- Clean status in a helper column: PROPER(TRIM([@Status])); flag with COUNTIF(StatusList, [@Clean])=0.
- Approved total: SUMIFS(COLog[Amount], COLog[Clean], "Approved"); pending the same with "Pending". Never use a plain SUM of the column.
- Approved with no date: AND([@Clean]="Approved", [@ExecutedDate]="").
- Duplicates: COUNTIF(COLog[CO], [@CO])>1. Gaps: compare the numeric part against SEQUENCE(MAX(...)).
- Pay app: Line2 - ApprovedTotal and Line3 - (Original + ApprovedTotal), flagged when not zero.

Same check as a short Python script (our own code; reads the CSV above saved as co_log.csv)
import csv
from itertools import combinations
ORIGINAL = 1250000     # original contract sum, typed from the executed agreement
LINE2 = 56350          # net change by change orders, typed from the pay app
LINE3 = 1306350        # contract sum to date, typed from the pay app
ALLOWED = {"APPROVED", "PENDING", "REJECTED", "VOID"}
rows = list(csv.DictReader(open("co_log.csv")))
tot = {"APPROVED": 0, "PENDING": 0}
seen, nums, pending = {}, [], []
for r in rows:
    co, st, amt = r["CO"].strip().upper(), r["Status"].strip().upper(), float(r["Amount"])
    if co in seen: print(co, "DUPLICATE CO NUMBER")
    seen[co] = r
    if co.split("-")[-1].isdigit(): nums.append(int(co.split("-")[-1]))
    if st not in ALLOWED:
        print(co, f"NONSTANDARD STATUS '{r['Status']}' → not counted; fix the status"); continue
    if st == "APPROVED" and not r["ExecutedDate"].strip():
        print(co, "APPROVED BUT NO EXECUTED DATE → confirm it is signed")
    if st in tot: tot[st] += amt
    if st == "PENDING": pending.append((co, amt))
for n in range(min(nums), max(nums) + 1):
    if n not in nums: print(f"CO-{n:03d}", "NUMBER GAP → missing from log, or voided without a row")
appr = tot["APPROVED"]
print(f"Approved {appr:,.0f} | Pending {tot['PENDING']:,.0f}")
print(f"Revised contract (approved only) {ORIGINAL+appr:,.0f} | Pending revised {ORIGINAL+appr+tot['PENDING']:,.0f}")
diff = LINE2 - appr
if abs(diff) > 0.5:
    print(f"PAY APP LINE 2 {LINE2:,.0f} vs approved log {appr:,.0f} ({diff:+,.0f})")
    for k in range(1, len(pending) + 1):
        for c in combinations(pending, k):
            if abs(sum(a for _, a in c) - diff) < 0.5:
                print("  difference equals pending:", ", ".join(x for x, _ in c))
if abs(LINE3 - (ORIGINAL + LINE2)) > 0.5:
    print(f"LINE 3 {LINE3:,.0f} != Line 1 + Line 2 {ORIGINAL+LINE2:,.0f}")
if abs(LINE3 - (ORIGINAL + appr)) > 0.5:
    print(f"LINE 3 {LINE3:,.0f} vs original + approved {ORIGINAL+appr:,.0f} ({LINE3-ORIGINAL-appr:+,.0f})")
print("Only flags for review; whether a change is owed stays with the project manager under the contract.")

Check the result

  • Every value, citation or quantity traces back to a source document.
  • Missing information is marked as missing, not filled in.

Limits and recovery

  • The check only tests the numbers and statuses you give it. A change that was approved by email but never logged, or a log status that is wrong, will not be caught, so confirm each flag against the signed change order. Entitlement, pricing and whether a pending change may be billed stay with the project manager under the contract.
  • Check your organization’s data policy before sharing project files with third-party tools.

Stop or switch when: The source cannot be verified, permissions are missing, or the result contains unsupported facts.

Frequently asked questions

How does AI help with this?

Claude or ChatGPT, then Copilot in Excel or Gemini in Google Sheets: Claude or ChatGPT reads the change order log export or the signed change orders into one clean table; Copilot or Gemini totals approved and pending separately, leaves rejected and void out, builds the revised and pending revised contract sum and flags nonstandard statuses, approved changes with no executed date, duplicate numbers, numbering gaps, and pay app line 2 or line 3 that does not tie to the approved log. A person still checks: Every flag against the signed change order and the executed agreement before the pay app is certified or the log goes to the owner; entitlement, pricing and whether a pending change can be billed stay with the project manager under the contract.

How do I how do I total a change order log by approved and pending status and tie it to the pay app contract sum with AI??

Export the change order log to CSV from your project management software, or collect the signed change orders and the open change requests as PDFs. Have Claude or ChatGPT read them into one COLog tab: CO number, description, amount (deducts negative), status and executed date. It copies values exactly, writes NOT SHOWN instead of guessing, and does not change any status. Agree on a short status list (for example Approved, Pending, Rejected, Void) and have the AI list every row whose status is not on it, so nothing silently drops out of a filter. The full step list is above.

Does this use an AI agent or regular software?

It is labeled AI assists: AI drafts or analyzes. A person operates the tools, checks the work, and takes action.

What tools do I need?

Claude, ChatGPT, Microsoft Excel, Microsoft Copilot, Google Sheets, Gemini. Confirm license, version and cost with the vendor, and try it on a small non-confidential sample first.

Has this workflow been tested?

Workflow guide · not independently tested. Written from vendor documentation and practitioner use. Labels apply to the steps described here, not every feature of a product. Links were checked when the page was written.

Evidence and maintenance

Written from vendor documentation and practitioner use. Labels apply to the steps described here, not every feature of a product. Links were checked when the page was written.

Know what does the work.

Agent executes
An AI agent calls connected tools to carry out bounded actions. You set permissions and review the result.
AI assists
AI drafts or analyzes. A person operates the tools, checks the work, and takes action.
Conventional automation
Rules or specialist software perform the task. No AI agent is required.