AI assistsWorkflow guide · not independently tested

How do I compare timecard hours to budgeted labor hours by cost code with AI to get a productivity factor?

Every week someone has to answer whether the crew is ahead or behind on labor, and the honest answer needs three things lined up by cost code: hours charged on timecards or the payroll export, the budgeted hours and quantity from the estimate, and the quantity actually installed from the field. Done by eye, the misses are hours charged to a code that is not in the budget, hours on a code with nothing installed yet, installed quantity that has passed the budget quantity, and a code that looks fine on hours spent but is badly behind on earned hours. Have Claude or ChatGPT read the timecard export and the labor budget into matching tables, and have Copilot in Excel or Gemini in Google Sheets compute earned hours, the productivity factor (earned divided by actual) and projected hours at completion per code. What the numbers mean for the crew, the schedule or a change order stays with the project manager and the superintendent.

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 timecard or payroll labor export and the labor budget into matching tables and lists cost codes that are not in the budget; Copilot or Gemini sums actual hours per code and computes percent complete, earned hours, productivity factor and projected hours at completion, and flags factors below the threshold you typed, hours with no installed quantity, installed quantity over budget, and unbudgeted codes. Every week someone has to answer whether the crew is ahead or behind on labor, and the honest answer needs three things lined up by cost code: hours charged on timecards or the payroll export, the budgeted hours and quantity from the estimate, and the quantity actually installed from the field. Done by eye, the misses are hours charged to a code that is not in the budget, hours on a code with nothing installed yet, installed quantity that has passed the budget quantity, and a code that looks fine on hours spent but is badly behind on earned hours. Have Claude or ChatGPT read the timecard export and the labor budget into matching tables, and have Copilot in Excel or Gemini in Google Sheets compute earned hours, the productivity factor (earned divided by actual) and projected hours at completion per code. What the numbers mean for the crew, the schedule or a change order stays with the project manager and the superintendent. A person still checks: every flagged code against the field's installed quantity and the payroll coding before the cost report goes out; crew decisions and any change order stay with the project manager and superintendent.

AI tie-in

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

Claude or ChatGPT reads the timecard or payroll labor export and the labor budget into matching tables and lists cost codes that are not in the budget; Copilot or Gemini sums actual hours per code and computes percent complete, earned hours, productivity factor and projected hours at completion, and flags factors below the threshold you typed, hours with no installed quantity, installed quantity over budget, and unbudgeted codes.

Prompt 1

Read this labor export [upload CSV or PDF; remove worker names first] and this labor budget [paste: cost code, description, unit, budget quantity, budget hours]. Build a Timecards table with one row per week ending, crew and cost code with hours, copying values exactly and writing NOT SHOWN instead of guessing. List every cost code in the export that is not in the budget. Do not recode anything yourself and do not judge crew performance.

Prompt 2

EXAMPLE DATA ONLY. Here are my Budget (with installed quantity to date) and Timecards tabs [paste the example rows]. Write Excel formulas (or a step-by-step Copilot plan) that sum actual hours per code, compute percent complete as installed over budget quantity, earned hours as budget hours times percent complete, productivity factor as earned over actual, and projected hours at completion as actual over percent complete, and flag: factor below my threshold of [type yours], hours with zero installed, installed over budget quantity, and hours on codes with no budget line. Use only my data.

Human check: Every flagged code against the field's installed quantity and the payroll coding before the cost report goes out; crew decisions and any change order stay with the project manager and superintendent.

The problem

Check timecard hours against budgeted labor by cost code with AI to get a productivity factor. This is a common, time-consuming task for a project manager.

What this workflow does

Every week someone has to answer whether the crew is ahead or behind on labor, and the honest answer needs three things lined up by cost code: hours charged on timecards or the payroll export, the budgeted hours and quantity from the estimate, and the quantity actually installed from the field. Done by eye, the misses are hours charged to a code that is not in the budget, hours on a code with nothing installed yet, installed quantity that has passed the budget quantity, and a code that looks fine on hours spent but is badly behind on earned hours. Have Claude or ChatGPT read the timecard export and the labor budget into matching tables, and have Copilot in Excel or Gemini in Google Sheets compute earned hours, the productivity factor (earned divided by actual) and projected hours at completion per code. What the numbers mean for the crew, the schedule or a change order stays with the project manager and the superintendent.

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

Your checkpoint: The workbook only compares the hours and quantities you entered. A stale installed quantity, hours booked to the wrong code, or an estimate that measured quantity differently from the field will all create false flags, and a good factor on one code can hide a bad one that is miscoded into it. Decisions about crews, recovery plans and change orders stay with the project manager and the superintendent.

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. From the estimate or labor budget, build a Budget tab with one row per labor cost code: code, description, unit, budget quantity and budget hours.
  2. Have the field fill an Installed column for each code with quantity in place to date, measured the same way the estimate measured it (for example square feet of contact area for forms, tons for rebar).
  3. Export timecards or the payroll labor report for the job to date (week ending, crew, cost code, hours). Use an AI account your company allows for payroll data, and strip worker names first if they are in the export.
  4. Have Claude or ChatGPT read the export into a Timecards tab with one row per crew, week and code. It copies values exactly, writes NOT SHOWN instead of guessing, and lists any cost code that does not appear on the Budget tab. You confirm or recode those.
  5. Have Copilot in Excel or Gemini in Google Sheets compute, per code: actual hours to date, percent complete (installed divided by budget quantity), earned hours (budget hours times percent complete), productivity factor (earned divided by actual) and projected hours at completion (actual divided by percent complete). Flag a factor below the threshold you type, hours with no installed quantity, installed quantity over budget quantity, and hours on codes with no budget line.
  6. Review the flagged codes with the superintendent before the cost report goes out: check the installed quantity first, since most bad factors are a quantity that was not updated, then decide whether the gap is production, a miscode or extra work worth tracking for a change order.

Try a small example

EXAMPLE DATA ONLY — fictional cost codes, quantities and hours for practice, not from a real project or a published trial. The 0.90 threshold is a placeholder; type your own. Paste the Sample input into Copilot or Gemini with the Starter prompt, then compare your results to Expected output.

Sample input

Budget tab (example)
Code | Description | Unit | Budget qty | Budget hrs | Installed to date
03-110 | Wall forms | SFCA | 12000 | 1800 | 5000
03-210 | Rebar placing | TON | 180 | 2160 | 90
03-310 | Slab place and finish | SF | 40000 | 1200 | 10000
03-350 | Slab curing | SF | 40000 | 160 | 0
03-410 | Embeds and anchors | EA | 600 | 300 | 650

Timecards tab (example; names removed)
Week ending | Crew | Code | Hours
2026-10-02 | Forms A | 03-110 | 410
2026-10-09 | Forms A | 03-110 | 410
2026-10-02 | Rebar | 03-210 | 500
2026-10-09 | Rebar | 03-210 | 510
2026-10-02 | Flatwork | 03-310 | 200
2026-10-09 | Flatwork | 03-310 | 210
2026-10-09 | Flatwork | 03-350 | 24
2026-10-02 | Embeds | 03-410 | 140
2026-10-09 | Embeds | 03-410 | 150
2026-10-09 | Forms A | 03-999 | 36

Threshold (placeholder I typed): flag productivity factor below 0.90

Starter prompt

EXAMPLE DATA ONLY (not from a real project). Budget tab: 03-110 Wall forms | SFCA | 12000 | 1800 hrs | installed 5000; 03-210 Rebar placing | TON | 180 | 2160 hrs | installed 90; 03-310 Slab place and finish | SF | 40000 | 1200 hrs | installed 10000; 03-350 Slab curing | SF | 40000 | 160 hrs | installed 0; 03-410 Embeds and anchors | EA | 600 | 300 hrs | installed 650. Timecards tab: two weeks of hours by crew and code, including 36 hours on 03-999. Threshold I typed: flag a productivity factor below 0.90. Write Excel formulas (or a step-by-step Copilot plan) that sum actual hours per code, compute percent complete, earned hours, productivity factor and projected hours at completion, and flag factors below my threshold, hours with no installed quantity, installed over budget quantity, and hours on codes with no budget line. Use only my data; do not decide whether the crew is performing or who pays.

Expected output

Expected results on this example (illustrative — verify every formula yourself)
03-110 Wall forms: 42% complete, earned 750, actual 820, PF 0.91, projected 1968 vs 1800 (+168) → no flag at 0.90, but trending over; watch it
03-210 Rebar placing: 50% complete, earned 1080, actual 1010, PF 1.07, projected 2020 vs 2160 (−140) → no flag
03-310 Slab place and finish: 25% complete, earned 300, actual 410, PF 0.73, projected 1640 vs 1200 (+440) → PF BELOW THRESHOLD (check the installed SF first)
03-350 Slab curing: 24 hrs charged, 0 installed → HOURS WITH NO QUANTITY (early start, or a miscode from 03-310)
03-410 Embeds and anchors: 650 installed vs 600 budget (108%) → INSTALLED OVER BUDGET QTY (added scope or a counting error; earned 325 exceeds budget hours, so decide whether to cap earned at budget)
03-999: 36 hrs, no budget line → NO BUDGET CODE (recode before the cost report)

Suggested Excel logic (write against your own sheet layout)
- Actual hours: SUMIF(Timecards[Code], [@Code], Timecards[Hours]).
- Percent complete: [@Installed] / [@BudgetQty].
- Earned hours: [@BudgetHrs] * [@PctComplete].
- Productivity factor: IF([@Actual]=0, "", [@Earned] / [@Actual]); flag when below your threshold.
- Projected hours at completion: IF([@PctComplete]=0, "", [@Actual] / [@PctComplete]); variance = projected − budget.
- Codes with no budget line: list UNIQUE(Timecards[Code]) and flag any with COUNTIF(Budget[Code], code)=0.

Same check as a short Python script (our own code; reads two CSVs you export)
import csv
from collections import defaultdict
PF_FLAG = 0.90   # type your own threshold; this is a placeholder
budget = {r["Code"]: r for r in csv.DictReader(open("budget.csv"))}
actual = defaultdict(float)
for r in csv.DictReader(open("timecards.csv")):
    actual[r["Code"]] += float(r["Hours"])
for code in sorted(set(budget) | set(actual)):
    if code not in budget:
        print(f"{code}: {actual[code]:.0f} hrs charged, NO BUDGET CODE"); continue
    b = budget[code]; bq, bh, iq = float(b["BudgetQty"]), float(b["BudgetHrs"]), float(b["InstalledQty"])
    a = actual.get(code, 0.0)
    if iq == 0:
        print(f"{code}: {a:.0f} hrs, 0 installed, HOURS WITH NO QUANTITY" if a else f"{code}: not started"); continue
    pct = iq / bq; earned = bh * pct
    pf = earned / a if a else float("nan")
    eac = a / pct
    flags = []
    if iq > bq: flags.append("INSTALLED OVER BUDGET QTY")
    if a and pf < PF_FLAG: flags.append("PF BELOW THRESHOLD")
    print(f"{code}: {pct:.0%} complete, earned {earned:.0f}, actual {a:.0f}, PF {pf:.2f}, "
          f"projected {eac:.0f} vs budget {bh:.0f} ({eac-bh:+.0f}) {' '.join(flags)}")
Do not judge a crew or decide a change order — only flag for human review.

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 workbook only compares the hours and quantities you entered. A stale installed quantity, hours booked to the wrong code, or an estimate that measured quantity differently from the field will all create false flags, and a good factor on one code can hide a bad one that is miscoded into it. Decisions about crews, recovery plans and change orders stay with the project manager and the superintendent.
  • 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 timecard or payroll labor export and the labor budget into matching tables and lists cost codes that are not in the budget; Copilot or Gemini sums actual hours per code and computes percent complete, earned hours, productivity factor and projected hours at completion, and flags factors below the threshold you typed, hours with no installed quantity, installed quantity over budget, and unbudgeted codes. A person still checks: Every flagged code against the field's installed quantity and the payroll coding before the cost report goes out; crew decisions and any change order stay with the project manager and superintendent.

How do I how do I compare timecard hours to budgeted labor hours by cost code with AI to get a productivity factor??

From the estimate or labor budget, build a Budget tab with one row per labor cost code: code, description, unit, budget quantity and budget hours. Have the field fill an Installed column for each code with quantity in place to date, measured the same way the estimate measured it (for example square feet of contact area for forms, tons for rebar). Export timecards or the payroll labor report for the job to date (week ending, crew, cost code, hours). Use an AI account your company allows for payroll data, and strip worker names first if they are in the export. 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.