Starter Kit

Margin Leakage Starter Kit

Four files. Two prompts. A ranked diagnosis of which jobs leaked margin, why, and what's still recoverable — in under 20 minutes.

4 Data Files
2 Prompts
5 Steps

1.Data Prep Checklist

Get your data ready in just a few minutes. Four files from your existing systems.

Pick the Right AI Model

Use a thinking/reasoning model — the kind that pauses before answering.

  • ChatGPT: Select "Thinking" mode
  • Microsoft Copilot: GPT 5.5 → "Think Deeper."
  • Google Gemini: Pro.
  • Claude Pro: Select Opus 4.6 or 4.7

Warning: Do not use a fast model. Fast models fabricate evidence — they'll invent quotes from project notes that don't exist and assign root causes without checking the change order log.

Your Four Files

1

Job Cost Summary

The spine of the analysis. Without it, nothing works.

Export closed jobs from your ERP as a CSV file (not .xlsx).

Maximum 25 jobs per run. The AI can only reason accurately across 25 jobs at a time — beyond that, it starts conflating job IDs and losing change-order linkage. Your quarter probably has 100-200+ closed jobs, so you need to pick 25 before uploading.

How you pick them is up to you. Some options:

  • Worst performers by dollar variance (recommended for your first run — see the formula below)
  • Jobs from a specific PM's book
  • Jobs from a specific branch or region
  • The most recent 25 closings
  • Any 25 you're curious about

The worst-performers approach gives you the highest-impact diagnosis. The other approaches are useful when you already know where to look.

Finding Your 25 Worst Performers

If you want to start with the jobs that leaked the most margin — which is what we do in the video — here's how to find them in Excel or Google Sheets:

  1. 1Open your full job cost export in a spreadsheet.
  2. 2Add a new column at the end. This formula calculates the dollar difference between what you expected to make and what you actually made on each job:

The formula:

= (actual_revenue - actual_total_cost) - (bid_revenue - bid_total_cost)

Use your actual column names. For example, if your columns are in cells F2, H2, E2, and G2:

= (F2 - H2) - (E2 - G2)

A negative number means the job lost money relative to the bid. The more negative, the worse the leak.

  1. 3Sort by that column, smallest first (largest negative numbers at the top).
  2. 4Keep the top 25 rows. Delete the rest.
  3. 5Delete the formula column — the AI recalculates variance from the raw bid and actual numbers.
  4. 6Save as CSV.

You now have your 25 biggest margin problems ready for diagnosis. Pull the estimates, change orders, and notes for just those 25 jobs.

PriorityFieldWhy it matters
Must haveJob IDJoin key across all four files
Must haveBid revenueNeeded for margin calculation
Must haveActual revenueNeeded for margin calculation
Must haveBid total cost (or broken out)Needed for margin calculation
Must haveActual total cost (or broken out)Needed for margin calculation
HighProject managerPowers the PM pattern view
HighJob type or service linePowers the job-type pattern view
HighCustomer namePowers the customer pattern view
MediumBid + actual labor hoursDistinguishes labor rate overrun from productivity miss
MediumBid + actual material costIdentifies material price escalation
MediumBid + actual sub costIdentifies sub overruns
MediumStart date + close dateShows schedule overruns
Nice to haveBranch / region / officePowers the branch pattern view
Nice to haveJob name or descriptionMakes the output more readable

If you can only export half the fields, get the "must have" and "high" columns. The analysis will still produce a ranked leakage table and root causes — you'll just lose some of the pattern breakdowns.

2

Original Estimates

One PDF per job from your estimating system. Should include scope of work, key assumptions, contingency, and bid totals. A single combined file works too. This is how the AI catches "estimating error" — when the bid assumptions were wrong from the start.

If your estimates aren't in a system, dig up whatever you have — spreadsheet, Word doc, scanned paper. The format matters less than having the original assumptions.

3

Change Order Log

A CSV with one row per change order. This is how the AI identifies recoverable margin — pending or unbilled COs that represent money still in play.

If your CO log is incomplete, the analysis loses its ability to identify recoverable margin and scope creep diagnoses get weaker. This is the file that turns the analysis from a post-mortem into an action list — without it, you can see what leaked but not what's still recoverable.

FieldWhy it matters
Job IDLinks back to cost file
CO number or descriptionIdentifies the specific change
Dollar amountQuantifies recoverable margin
StatusDetermines recoverability (Signed / Pending / Unbilled / Rejected)
4

Project Notes

A CSV from your field service platform or ERP. Project notes are where the real story lives. Without them, the AI can see that a job leaked but is weaker at explaining why.

If your notes live in email or texts, export what you can from the formal system. Even a few notes per job helps — the analysis flags lower confidence for jobs with thin records. The notes are what turn a variance number into an explanation your board can act on.

FieldWhy it matters
Job IDLinks back to cost file
DateEstablishes when things went wrong
Author roleContext for the observation
Note textThe narrative evidence
FileFormatKey fields
Job cost summaryCSVJob ID, bid revenue, actual revenue, bid cost, actual cost
Original estimatesPDF (one per job)Scope, assumptions, contingency, bid totals
Change order logCSVJob ID, CO amount, status
Project notesCSVJob ID, date, author, note text

Max 25 jobs per run. CSV format for structured data. Use a thinking model.

2.Master Analysis Prompt

Copy this prompt and paste it into your AI chat before uploading any data. The prompt walks you through a step-by-step upload process — it will ask for each file in turn.

You are helping a finance or operations leader at a traditional services business diagnose margin leakage across their closed-job portfolio. Your job is to read four files of operational data and produce a ranked diagnosis: which jobs leaked margin, why, and what is still recoverable. ## Your Data I will upload four types of data. Read all of them carefully before producing any output. **Required:** 1. **Job cost summary** — a CSV with one row per closed job. Includes bid vs. actual numbers for revenue, materials, labor, and subcontractors, plus identifying fields (job ID, customer, project manager, dates, job type, service line). 2. **Original estimates** — one PDF per job, exported from our estimating system. Each contains the bid summary: scope of work, key assumptions, contingency, and bid totals. I will upload these in batches since most AI tools limit uploads to 10 files per message. 3. **Change order log** — a CSV listing every change order raised against these jobs, with status (Signed / Pending / Unbilled / Rejected), dollar amount, who initiated it, and a description. 4. **Project notes** — a CSV exported from our field service platform with columns for job ID, date, author role, author name, and note text. Contains narrative entries from project managers, lead techs, and field supervisors about what actually happened on each job. **Optional context I may also provide:** - Company name and reporting period (e.g., "Q1 2026") - Any specific job types, branches, or customers I want emphasized **Batch uploads:** Most AI tools limit you to 10 files per message. The estimate PDFs will likely need to go in batches. Wait until I tell you I have finished uploading before starting the analysis. Do not begin analyzing or summarizing individual files as they arrive — wait for the complete set. ## Critical Rules Before you begin, internalize these rules. They override any default behavior. **Evidence integrity:** - Every piece of evidence you cite must come directly from the data I uploaded. Do not infer, fabricate, or embellish. - When you quote a project note or estimate, use the exact words from the source. Do not paraphrase into something cleaner. - Cite quotes with the date and author role from the source (e.g., "PM note, 2026-02-14"). If the source has no date, say so. - Do not invent jobs, customers, project managers, change orders, dollar figures, or events that do not appear in the provided data. - Use exact values from the data for all names, IDs, and labels. Do not rename, abbreviate, or paraphrase any value from the uploaded files — if the data says "Marcus Delgado", your output says "Marcus Delgado." If the data says "Fire Suppression", do not write "Special Hazard." - If the variance numbers and the narrative evidence point in different directions, report both. Do not force a story. **Calculation integrity:** - Calculate variance from the bid and actual columns in the job cost file. Do not estimate variance — compute it. - Bid margin % = (bid revenue − bid total cost) / bid revenue. Actual margin % = (actual revenue − actual total cost) / actual revenue. Variance points = actual margin % − bid margin %. Variance dollars = (actual revenue − actual total cost) − (bid revenue − bid total cost). - If a column needed for the calculation is missing or blank, mark that job's variance as "Insufficient data" and note which field is missing. Do not substitute defaults. - Score every job in the cost file. Do not skip jobs. **Diagnosis integrity:** - Assign exactly one primary root cause per leaking job, drawn from the taxonomy below. If two causes are roughly equal, pick the one with stronger evidence and note the secondary in the evidence column. - Every root cause assignment must be supported by at least one specific data point: a quote from a note, a specific change order, or a clear cost-line variance. A diagnosis without supporting evidence is not a diagnosis. - If a job's actual margin is at or above its bid margin, do not assign a root cause. Mark it "On plan or above." - Do not end your response with offers to drill down, follow-up questions, or conversational filler. End with the executive summary. ## Leakage Threshold A job has **leaked margin** if either of the following is true: - Actual margin % is at least **3 points** below bid margin %, OR - Actual gross profit dollars are at least **$5,000** below bid gross profit dollars. Jobs that don't meet either threshold are "On plan or above" and do not need a root cause assignment. Still include them in the output table for completeness — just leave the root cause blank and the recoverable column "N/A." If I have specified a different threshold in my instructions above, use mine. Otherwise use the default. ## Root Cause Taxonomy Assign one of these six causes to each leaking job. Look for the listed evidence patterns. | Root Cause | What it looks like in the data | |---|---| | **Labor overrun** | Actual labor hours significantly exceed bid hours; or actual labor cost exceeds bid labor cost beyond what hour overage alone would explain (overtime, premium rates). Notes may mention extended schedules, crew size changes, rework, or pulling people off other jobs. | | **Material price escalation** | Actual material cost exceeds bid material cost while scope appears unchanged. Notes or estimates may reference commodity exposure, vendor price increases, or substitutions. | | **Scope creep without change order** | Notes or estimates reference work performed that was not in the original scope, but no signed change order in the change order log covers it. Often shows up as a labor + material overrun combined with field commentary about added work. | | **Subcontractor cost overrun** | Actual sub cost exceeds bid sub cost. Notes may reference sub performance issues, scope additions handled by subs, or sub no-shows requiring backfill. | | **Schedule delay** | Job ran longer than planned, producing idle labor, demobilization/remobilization costs, after-hours premiums, or liquidated damages. Notes often reference access constraints, AHJ holds, weather, customer-caused delays, or sequencing issues. | | **Estimating error** | The bid itself was wrong: assumptions in the estimate were demonstrably off (wrong quantity, wrong labor productivity assumption, missed scope items at bid time, wrong contingency for the risk profile). Evidence comes from comparing the estimate's stated assumptions to the actuals and the notes. | **Rules for assignment:** - The taxonomy is closed. Do not invent new categories. If a job genuinely doesn't fit, use the closest match and explain the nuance in the evidence column. - "Scope creep without change order" requires both: (a) evidence of added work in the notes or estimate comparison, AND (b) the absence of a signed change order covering that work in the change order log. If a Pending or Unbilled change order exists for the added scope, it's still scope creep — but flag it as recoverable. - "Estimating error" is an internal diagnosis. Use it when the variance traces to a flaw in the bid itself, not to anything that happened during execution. ## Recoverable Margin For each leaking job, mark whether the leaked margin is still recoverable: - **Yes** — There is a Pending or Unbilled change order in the log that, if signed and billed, would close some or all of the gap. Or the notes describe scope that was performed and could still be billed if a CO is raised. Estimate the recoverable dollars. - **No** — The leakage came from labor overrun, material escalation that wasn't passed through, schedule slippage, sub overruns absorbed by Sentinel, or estimating error. The money is gone. - **Partial** — Some recoverable through pending COs, the rest absorbed. Estimate the recoverable portion. The recoverable column should always include a dollar estimate when the answer is Yes or Partial. If the data doesn't support an estimate, write "Recoverable but amount unclear" and explain. ## Confidence Level For each job's diagnosis, assign a confidence level based on how many of the four files contributed meaningful evidence: | Level | Criteria | |---|---| | High | Three or more files contributed specific evidence to the diagnosis — cost variance is clear, notes explain why, and estimates or COs corroborate. | | Medium | Two files contributed meaningful evidence, or data is available but thin (e.g., cost variance is clear but notes are sparse). | | Low | Diagnosis is based on cost-line variance alone with no narrative support from notes, estimates, or COs. | ## Output Format Produce a table with these columns, sorted by **variance dollars** (largest leak first): | Column | What to include | |---|---| | Rank | Position in the ranked list | | Job ID | From the cost file | | Job Description | Short — customer, site, scope (1 line) | | Job Type | From the cost file | | Service Line | From the cost file (if present) | | PM | Project manager assigned | | Bid Margin | Percentage and dollars | | Actual Margin | Percentage and dollars | | Variance | Points and dollars (negative = leak) | | Root Cause | One from the taxonomy, or blank if on plan | | Confidence | High / Medium / Low — based on how many files contributed evidence to this job's diagnosis | | Supporting Evidence | 1–3 specific data points: a quote from a note (with date and role), a change order reference (with status and amount), and/or a cost-line variance (with the $ figure). | | Recoverable | Yes / No / Partial / N/A — with dollar estimate when applicable | | Estimated $ at Stake | Total leaked dollars (variance dollars when negative) | | Suggested Next Action | A specific, actionable step: who to talk to, what to chase, what conversation to have, with a timeframe. | Format this as a clean table I can copy into Excel or Google Sheets. One row per job. Color coding by leakage severity is helpful if your tool supports it. After the table, include: **Confidence explanation (2–3 sentences, plain English):** Explain what the confidence levels in the table mean and why they are set the way they are. Be specific about which of the four files contributed evidence and which were thin or missing for any jobs rated Medium or Low. **Portfolio summary (4–6 sentences):** - Total jobs analyzed and how many leaked under the threshold. - Total dollars at stake across all leaking jobs. - Total recoverable dollars (sum of Yes and Partial recoverables). - Top 1–2 patterns visible in the data (e.g., "Five of seven leaks above $10K trace to labor overrun on retrofit work in occupied buildings"). - Any data quality caveats (missing fields, jobs with insufficient data to score). ## Handling Missing or Thin Data Real exports are messy. Handle gaps as follows: - **Missing column in the cost file:** If a column needed for variance is blank for a specific job, mark that job "Insufficient data" and note which field is missing. Continue with the rest. - **No project notes for a job:** Do the variance and assign a root cause only if the cost-line evidence is unambiguous (e.g., actual labor cost is 40% over bid with no other variance). Otherwise mark root cause "Indeterminate — no narrative evidence." - **No change order log provided:** Skip the recoverable column (mark all leaking jobs "Recoverable status unknown — no CO log provided"). Continue with variance and root cause from the other files. - **No estimates provided:** You can still diagnose from cost variance + notes. Estimating-error diagnoses become harder to support without the original bid assumptions — flag this in the evidence column. - **Inconsistent job IDs across files:** Match what you can. If a note or change order references a job ID not in the cost file, ignore it. If a job in the cost file has no matching notes or COs, score it on cost variance alone. When in doubt, say so. "The data is insufficient to diagnose" is a better answer than a guess. ## Important Limits - **Maximum 25 jobs per run.** Beyond 25 jobs, especially with all four files, the model starts conflating job IDs and losing change-order linkage. If you have more, run your top 25 first (sorted by dollar variance if you can compute it ahead of time, or by recency), then do a second batch. - **Use a thinking / reasoning model.** Fast models fabricate evidence on this kind of cross-file analysis — they invent quotes from notes that don't exist, or they assign root causes without checking the change order log. This is not a prompting issue; it's a model capability issue. - **ChatGPT:** 5.5 → Select "Thinking" mode. - **Microsoft Copilot:** GPT 5.5 → "Think Deeper." - **Google Gemini:** Pro. - **Claude Pro:** Opus 4.6 or 4.7. - **CSV files for the cost summary, change order log, and project notes**, not .xlsx. CSV is the most reliable format for AI tools to parse without dropping rows or misreading columns. - **Estimates as individual PDFs** — one per job, exported from your estimating system. If you only have estimates in another format (Word, text, spreadsheet), that works too. ## Getting Started Start by confirming you understand your role and the analysis you're about to run. Then walk me through the upload process step by step. 1. Ask me for the **job cost summary** (CSV). Remind me it should be a CSV (not .xlsx) and to include no more than 25 jobs. If I have more than 25 closed jobs for the period, tell me to start with the top 25 by dollar variance or by recency, and run a second batch later. 2. After I upload it, briefly confirm you can see the columns and the row count. Don't analyze yet. 3. Ask me for the **original estimates** — one PDF per job. Explain that most AI tools limit uploads to 10 files per message, so I may need to upload them in batches. Tell me to say "done" when I've uploaded the last batch. If I don't have individual PDFs, tell me a single file with all estimates is fine too. 4. After all estimates are uploaded, ask me for the **change order log** (CSV). 5. Ask me for the **project notes** (CSV). Remind me this should have columns for job ID, date, author, and note text — a standard export from most field service platforms or ERPs. 6. Before starting the analysis, ask me two quick context questions: - "What's the company name and reporting period I should use in the output?" - "Is there a leakage threshold or job type you want me to emphasize, or should I use the defaults?" 7. Then run the full analysis and produce the ranked table and portfolio summary. If I tell you I don't have one of the four files, proceed with what I have and follow the "Handling Missing or Thin Data" rules above. If I'm missing the cost summary, stop and tell me — that file is required.

The prompt will walk you through uploading your data step by step — just paste it and follow along.

3.Pattern View Prompt

Run this after the master analysis finishes, in the same chat. Don't start a new session — the pattern view builds on the diagnosis the AI just produced.

Now I want a pattern view across the diagnosis you just produced. Use the same four files and the ranked leakage table you generated above. Do not re-analyze individual jobs — group what you already found. ### Rules - All evidence must come from the data and the diagnosis you already produced. Do not introduce new facts. - If a category has only one or two jobs in it, say so explicitly — a pattern needs more than a single data point. Do not over-call patterns from thin data. - Use exact dollar figures from the ranked table. Do not round in a way that obscures the size of a pattern. - Do not invent project managers, branches, customers, or service lines that don't appear in the cost file. - If the data does not support a pattern in one of the dimensions below, say "No clear pattern" for that dimension. That is a valid answer. ### What to Produce For each of the dimensions below, show a small grouping table and a 1–2 sentence read of what the data is telling me. #### 1. By Project Manager Group leaking jobs by the project manager assigned. For each PM with at least one leaking job, show: - PM name - Number of jobs they ran in the dataset (total, not just leakers) - Number of leaking jobs - Total dollars leaked across their jobs - Most common root cause across their leaking jobs - A 1-sentence read Sort by total dollars leaked, descending. #### 2. By Branch or Region If the cost file includes a branch, region, office, or location field, group leaking jobs by that field. Same columns as the PM view (substitute branch for PM). If no branch field exists, write "No branch field present in the data" and skip this dimension. #### 3. By Customer Group leaking jobs by customer. Show only customers with more than one leaking job, OR a single leaking job above $10K in variance dollars. For each: - Customer name - Number of jobs in the dataset - Number of leaking jobs - Total dollars leaked - Most common root cause - A 1-sentence read on whether this looks like a customer-driven pattern (e.g., access constraints, payment behavior on COs) or an internal pattern (e.g., a specific PM consistently assigned to this customer) #### 4. By Job Type and Service Line Group leaking jobs by job type (Install / Inspection / Monitoring / Service Call) and again by service line. For each: - Category - Number of jobs in the dataset - Number of leaking jobs - Total dollars leaked - Most common root cause - A 1-sentence read #### 5. By Root Cause Group leaking jobs by root cause from the taxonomy. For each cause that appears at least once: - Root cause - Number of jobs - Total dollars leaked - Total dollars recoverable (sum of recoverable estimates from the master analysis) - A 1-sentence read on what this pattern suggests ### Coaching Lens After the five grouping tables, write **one short paragraph (4–6 sentences)** answering this question: > If I could only have one coaching conversation this week to address what the data is showing, who would it be with and what would it be about? Be specific. Name the person (PM, branch leader, customer-facing rep). Name the topic. Cite the evidence from the diagnosis. Explain why this conversation, this week, has the highest leverage. If the data doesn't support a single clear answer, say so and offer the top 2 candidates with the tradeoff between them. ### Recoverable Money This Week Finally, list the **top 3 jobs with recoverable margin** — the jobs marked Yes or Partial in the recoverable column of the master analysis. For each: - Job ID and short description - Recoverable dollars - The specific change order or scope item that needs to move (with CO number if applicable) - Who needs to act and what action to take this week This is the action list. Keep it tight. No commentary, no qualifications — just the three things worth chasing first. ### Do not - Do not summarize the master analysis again — I already have it. - Do not add new root causes that weren't in the original taxonomy. - Do not end with offers to drill down further or conversational filler. End with the action list.

The pattern view groups your results by PM, branch, customer, job type, and root cause — and tells you who to talk to first.

4.Go Deeper

The pattern view gave you the big picture. Now use the same chat to drill into specifics. The AI still has all four files and both analyses loaded — just keep asking.

Here are a few things to try:

Break down [PM name]'s jobs. What's happening in their book?

The pattern view showed which PM has the most leaked dollars. This gives you the full story — which jobs, which root causes, whether it's one bad job or systemic. Prep for a coaching conversation, not a blame conversation.

Show me every job where scope creep happened without a change order. What's the common thread?

Replace "scope creep" with whatever root cause dominated your results. The AI surfaces what those jobs share — same customer, same work type, same point in the lifecycle.

If I could only recover money from one job this week, which one and what exactly do I need to do?

Narrows to one recovery — the specific CO number, dollar amount, who to call, and what to say.

What would I need to change in my bidding process to prevent the top root cause from recurring?

Shifts from diagnosis to prevention — connects execution failures back to bid assumptions.

Watch For

If any of these show up in your results, that's a good reason to dig in. Pick an account and ask a follow-up question to learn more.

If you see...It probably means...What to try
Evidence column says "no narrative evidence" on most jobsProject notes didn't upload cleanly or are genuinely thinCheck the CSV uploaded. If notes are thin, the diagnosis is weaker — AI is being honest
Same root cause on every single leaking jobModel may be over-fitting to one patternAsk for specific evidence per job. If it can't show it, re-run on stronger model
Variance numbers don't match your source dataModel misread a column or confused bid with actualCheck CSV headers — rename ambiguous ones (e.g., "bid_revenue" not "revenue_1")
Recoverable column says "unknown" for everythingCO log didn't upload or job IDs don't matchCheck the join key — IDs must match exactly across files
Quotes you can't find in your notes fileModel fabricated evidenceSwitch to stronger reasoning model. Verify by opening the source, don't ask the AI
"No clear pattern" on every dimensionJobs too diverse to cluster, or sample too smallNot a problem if 25 jobs span 8 PMs and 12 customers. Run a second batch by PM or type

Every time you work with AI, ask one more question than you think you need to. That's the habit that compounds.

5.Next Steps

Act on What You Found

This week:

  • Chase the top 3 recoverable jobs. These are pending or unbilled change orders — real dollars waiting on paperwork.
  • Have one coaching conversation. The pattern view identified who to talk to and what about.

This month:

  • Address the top root cause pattern. If labor overrun on retrofit work is your #1 leak, that's a bidding conversation, not a field execution conversation.

Move to a Weekly Cadence

What to export each Monday:

  • Jobs closed in the prior week (typically 3-8 for a mid-market services business)
  • Their change orders, notes, and estimates — same four files, filtered to the new batch

What changes: Smaller batches (5-10 jobs), faster turnaround, recoverable column becomes more actionable because the CO window is still open.

Time commitment: 30-45 minutes per week once you have the export routine down. First time takes 60-90 minutes.

Track Whether It's Working

After 4-6 weekly runs, you should be able to answer:

  • Is total leakage dollars trending down?
  • Are the same root causes repeating? (If so, the process is broken, not the field execution)
  • Is recoverable margin getting captured?
  • Are specific PMs or job types improving?

When to Move Beyond This

This workflow has limits: 25 jobs per run, no trend memory across runs, 60-90 min of data prep, no action tracking. When you find yourself thinking "I wish this just ran automatically against my ERP every Monday" — that's the signal.