How to cost contractor jobs and change orders with AI

Ops & Supply3 AI tools7 steps6 friction points

Costing contractor jobs and change orders means translating scope into dollars before the work starts — and then re-translating every time scope changes. For most operators, that involves pulling labor rates, material costs, subcontractor quotes, overhead allocations, and markup into some kind of estimate, then tracking how each change order shifts the total. It's not glamorous, and it touches nearly every job that goes out the door.

The workflow feels like an AI problem because the underlying logic is rule-based: apply rates, multiply quantities, sum line items, apply margin. The variability — different labor categories, tiered markup, customer-specific terms — is exactly the kind of structured complexity that a language model handles well in a single session. People reach for ChatGPT or Claude because they want to stop rebuilding the same estimate template in a spreadsheet every time scope changes.

General-purpose AI tools — ChatGPT, Claude, Gemini — can genuinely help here. They'll take a scope description and produce a line-item estimate, apply markup logic you describe, draft a change order document, and recalculate totals when you update a quantity. The output is often good enough to send to a client. The constraint is that these tools have no connection to your actual job data, your cost history, or your accounting system — every run is a fresh start.

Ops & Supply3 AI tools7 steps6 friction points
AI walkthrough

How to do it with AI today

A practical walkthrough using ChatGPT, Claude, and other off-the-shelf LLMs — what they're good at, what you'll have to do by hand.

Tools that work for this
ChatGPTClaudeGemini
Step-by-step
1 Open ChatGPT or Claude and paste in your scope of work — either a written description from the client or your own internal notes. Tell the model your labor categories, hourly rates, and your target markup percentage.
2 Ask the model to produce a structured line-item estimate: task description, estimated hours, labor cost, materials cost, subtotal per line, and a project total. Ask it to format output as a table so you can paste it into a spreadsheet or Word doc.
3 Review the output. Where the model has guessed at quantities or materials, replace those with your actual numbers and re-paste the revised scope back into the chat window so it recalculates.
4 For change orders, describe what's being added or removed and paste in the existing estimate summary. Ask the model to produce a change order document showing the delta — what's changing, the cost impact, and the revised contract total.
5 If you have historical job data in a spreadsheet, paste the relevant rows (labor actuals, material costs) into the conversation and ask the model to flag whether the new estimate's rates are in line with past jobs.
6 Once the estimate looks right, ask the model to draft the client-facing version — formatted as a proposal or change order letter with your firm name, project reference, and acceptance signature line.
7 Save the output manually. There is no automatic connection back to your project tracking, accounting system, or job history — you'll copy the numbers into wherever you actually track jobs.
Prompts you can copy
Here is my scope of work for a commercial HVAC install. My labor rate is $95/hr for journeyman, $65/hr for apprentice. I want 22% markup on materials and 18% on labor. Produce a line-item estimate with subtotals.
Here is my existing estimate for Job #204. The client is adding 40 linear feet of ductwork and removing the rooftop unit replacement from scope. Produce a change order showing the cost delta and updated contract total.
I'm estimating a 3-week framing job. Here are my crew sizes and rates: [paste]. The material list is: [paste]. Apply a 20% overhead and 15% profit margin. Show me the full estimate broken down by labor, materials, and margin.
Here are labor and material actuals from my last 5 similar jobs: [paste table]. My new estimate for a comparable job comes to $48,200. Does the rate structure look consistent with historical data? Flag anything that looks off.
Write a professional change order letter for Change Order #3 on the Riverside Clinic project. Original contract: $124,000. Change adds electrical panel upgrade for $8,400. New contract total: $132,400. Use formal contractor language with a signature block.
Reality check

Where this gets hard

The walkthrough above works — until your numbers change, the LLM hallucinates, or you have to re-paste everything next month.

No connection to your job history or accounting system — every estimate starts with a manual copy-paste of rates, actuals, and prior job data from wherever you store them.
The model has no memory between sessions — the rate structure, markup logic, and line-item format you carefully defined last week aren't there when you open a new chat.
Output structure drifts between runs. The column order, label names, and formula assumptions change subtly, which means every estimate needs manual reformatting before it looks like your standard document.
Change order math requires re-pasting the full estimate context each time. On a job with 8 change orders, you're re-establishing context 8 times across 8 separate conversations.
No persistent job record — approved estimates and change orders live in chat logs or wherever you manually saved them. Nothing automatically posts to your project tracker or accounting software.
The model can't pull live material pricing, current subcontractor rates, or your supplier quotes — you have to manually supply every number, which is most of the work you were hoping to skip.

Tired of the friction?

Starch runs the whole workflow on live data — no copy-paste, no hallucinated numbers, no re-prompting next month.

See the Starch version →
Starch alternative

The same workflow on Starch

Starch is an agentic operating system — an agent builds and runs the actual software your estimating workflow needs, connected to your live job data, so you're not re-establishing context every time a change order comes in.

Connect QuickBooks from Starch's scheduled-sync integration — Starch syncs your bills, vendor payments, and job-related expenses on a schedule, so your cost estimates reference what you actually paid last quarter, not a number you typed from memory.
Use the Project Management starter app to track every job and change order in one place — Kanban by job status, linked change order log, and AI task creation by prompt ('add a change order task for Job 204, flagged for client approval, due Thursday') without clicking through forms.
Describe the estimating app you want in plain English — tell Starch 'build me an estimating tool that takes scope, applies my labor rates and markup tiers, generates a line-item estimate, and logs each approved version to the job record' — and an agent builds it.
Change orders become a tracked record, not a chat conversation — each change order is logged against the parent job, with delta costs and revised contract totals visible across all open jobs in one view.
Connect your bank accounts via Plaid — Starch's Transaction Insights app flags when a vendor you use on a job has charged an amount that looks out of line with past invoices, giving you a cross-check on material cost assumptions before you finalize an estimate.
The app runs continuously on your live data — when you open next month's estimate, the rate logic, markup structure, and job history are already there. You're not starting from a blank prompt.
Get closed-beta access →
Toolkit

Starch apps for this workflow

Pick your role

See this workflow by operator

Run cost contractor jobs and change orders on Starch

You're on the list! We'll be in touch soon.