Skip to content
Roofer MBA

When the Last Check Clears, Grade the Job

On the list of fires: “grade the job after the last check

Module 6 · The Money System · Play 19 of 22

In a hurry? ↓ Do this this week

The problem in one breath

You can tell anybody what a job was supposed to make. You can't tell them what it actually made. The bid sits in a folder, the real cost is scattered across supplier invoices, payroll and a dump ticket, and nobody ever sets the two next to each other.

Why it happens

A roof feels finished the day the crew rolls off it, but the money keeps moving for weeks — the supplier bills late, payroll catches the extra day, the supplement lands a month behind. So what the job really cost isn't knowable on the day it feels done, and by the time it is you're three roofs down the road. Nobody's job is to go back for it. The next bid gets built off the numbers that just missed.

The play

  1. Grade it when the last dollar lands, not when the last shingle goes on. The trigger is final payment cleared — retainage, the second check, the depreciation release, all of it. Grade a job before the money's in and you're grading a guess. The money meeting (Play 1) is where that last dollar gets chased.
  2. Pull four real numbers off real paper. Materials as the supplier actually invoiced them. Labor as you actually paid it — the extra day, and the man you added on Thursday. The dump ticket, not the dump number you bid. And the money you actually collected, including every approved change order (Play 17) and every supplement (Play 8). Paper, never memory — memory rounds everything toward what you hoped.
  3. Set them beside the bid and read the differences. Materials to materials, labor to labor, dump to dump, overhead to overhead, price to price. The number that matters isn't the profit — it's where the profit went.
  4. Name the ONE line that moved most, in plain words. Waste you didn't count (M10-02), decking you ate instead of billing, a crew day you didn't bid (M10-04), or an extra nobody wrote up. One line, one sentence. On the sheet's example job labor ran a thousand dollars over — the biggest leak — and with the smaller misses on material and the dumpster, the roof landed 7.4 points of margin under the bid.
  5. Feed it back into the next bid. This is the whole point of the play. A grade nobody carries forward is an hour wasted. One number changes: the waste percent, the hours per square, or the overhead line on the job-cost sheet (Play 6). And one item goes on the pre-bid challenge (Play 4) so somebody asks about it before the next bid is committed.
  6. Grade them in a batch, monthly, on the jobs that closed. Do it inside the money meeting you already hold. Five closed jobs take twenty minutes together, and it never turns into another standing meeting nobody wants to sit in.

The job debrief at the tailgate (M3-01) grades how the work went. This grades what it cost — don't try to do both at the truck with the crew waiting to leave.

Do this this week

Take one job whose final check cleared in the last month. Twenty minutes with the folder: supplier invoices, payroll, the dump ticket, what you deposited. Put those four next to the bid, and write one sentence naming the line that moved most. Then change that number on your next bid.

The tool

Opens in Excel, Google Sheets, Numbers or LibreOffice. Grab it on the phone now — it’ll be waiting on the computer at the shop.

the-job-report-card.xlsx — the job report card. One row per closed job, with a bid column and an actual column for materials, labor, dump, overhead and the price. It works out every over and under, the margin you bid, the margin you actually kept, the gap between the two in points, and it names the line that overran most — your biggest leak on that job. You set your target margin in one cell up top, the same number you price to, and a small box keeps count: jobs graded, your average margin gap, and how many landed under that target. The example row is the same job as the one on the job-cost sheet, so you can watch one roof walk from the bid to the grade. Delete it and grade your own. See the sheet notes below.

If your crew is 1099

The labor column is whatever you actually paid the sub — his invoice, plus anything you agreed to mid-job. Where a sub crew ran the number over, that's a scope-and-price talk between two companies before the next job: the answer goes in the agreement, not into how he runs his men.

The sheet notes

How the sheet works — the columns and the formulas

The columns, the formulas behind them, and the judgment calls — so you can rebuild it by hand if you ever need to.

What it does

One row per closed job. You type each cost line and the price twice — what you BID and what ACTUALLY happened — and the sheet does the rest: every over and under, the total cost both ways, the margin you bid, the margin you actually kept, the gap between those two in points, and the name of the line that overran most. That last column is the one to read first; it's your biggest leak on that roof.

Up top you set one number, your target margin (C2) — the same one you price to on the job-cost sheet in M6-06. Under it a small box counts the jobs you've graded, your average margin gap, and how many landed under that target. Nothing on this sheet says what a good gap is. It only shows you yours, against your own number.

Row 8 (cream) is filled in as an example. It is the same 2,400 sq ft re-roof used as the example on the job-cost sheet in M6-06 and measured on the takeoff sheet in M10-01, so one job walks across all three tools: measured, priced, then graded. Delete the row before you grade your first real job.

How to use it

  1. Set your target margin once in C2. The 20% sitting there is one owner's number, not a rule.
  2. Grade a job only after the last dollar is collected — retainage, the second check, the released depreciation. Anything still owed makes the grade a guess.
  3. Name the job in A, then fill the ten plain cells across the row. Bid and actual for materials (B, C), labor (D, E), dump (F, G), overhead (H, I), and the price (J, K). The bid numbers come off the job-cost sheet you priced with. The actual numbers come off paper: supplier invoices, payroll, the dump ticket, and every dollar you banked including approved change orders and supplements.
  4. Read across. Columns L through P show each line's over/under (a positive number means it cost more than you bid — on the price column, positive means you collected more than the bid). S and T are the two margins, U is the gap in points, V names the biggest leak.
  5. Carry the leak into the next bid. That's the whole job of this sheet.

The example row, in words: the roof was bid at $14,000 against $12,000 of cost, so the bid was set to keep 14.3 cents on the dollar. Materials came in $450 over (decking eaten, never billed), labor $1,000 over (an extra day and an extra man), the dumpster $150 over, and one approved change order brought in $600 more than the bid price. Collected: $14,600. Real cost: $13,600. The job actually kept 6.8%. The sheet reads the gap as 7.4 points — it subtracts the full figures, not the rounded ones you see — and names Labor as the biggest leak. That row also trips the red fill, because 6.8% is under the 20% target in C2.

Columns

ColumnWhat it is
A JobWhich job this row is. You type it.
B Materials BIDWhat you bid for material. You type it.
C Materials ACTUALWhat the supplier actually invoiced. You type it.
D Labor BIDWhat you bid for labor. You type it.
E Labor ACTUALWhat you actually paid — every hour, every extra man. You type it.
F Dump BIDWhat you bid for disposal. You type it.
G Dump ACTUALWhat the dump tickets came to. You type it.
H Overhead BIDThe overhead share you carried on the bid. You type it.
I Overhead ACTUALThe overhead share you're charging the job now. You type it.
J Price BIDThe price you sold the job at. You type it.
K Price COLLECTEDEvery dollar banked, change orders and supplements included. You type it.
L Materials over / underAuto: actual minus bid.
M Labor over / underAuto: actual minus bid.
N Dump over / underAuto: actual minus bid.
O Overhead over / underAuto: actual minus bid.
P Price over / underAuto: collected minus bid price. Positive is money you added.
Q Total cost BIDAuto: the four bid cost lines added up.
R Total cost ACTUALAuto: the four actual cost lines added up.
S Margin you BIDAuto: (bid price − bid cost) ÷ bid price.
T Margin you ACTUALLY keptAuto: (collected − actual cost) ÷ collected. Red when it's under your target.
U Margin gap (points)Auto: bid margin minus actual margin, in points of margin.
V Biggest leak on this jobAuto: names whichever of the four cost lines overran most.

Top of sheet: target margin (C2, the one number you set), jobs graded (C3), average margin gap (C4), and jobs under your target margin (C5).

Formulas (so you can rebuild it by hand)

Job rows are 8 through 22. Row 8 is the example; every row carries the same formulas.

  • Materials over/under (L8, fill down): =IF(OR(B8="",C8=""),"",C8-B8)
  • Labor / Dump / Overhead over-under (M8, N8, O8): same shape — =IF(OR(D8="",E8=""),"",E8-D8), =IF(OR(F8="",G8=""),"",G8-F8), =IF(OR(H8="",I8=""),"",I8-H8)
  • Price over/under (P8): =IF(OR(J8="",K8=""),"",K8-J8)
  • Total cost BID (Q8): =IF(COUNT(B8,D8,F8,H8)=0,"",B8+D8+F8+H8)
  • Total cost ACTUAL (R8): =IF(COUNT(C8,E8,G8,I8)=0,"",C8+E8+G8+I8)
  • Margin you bid (S8): =IF(OR(Q8="",J8="",J8=0),"",(J8-Q8)/J8)
  • Margin you kept (T8): =IF(OR(R8="",K8="",K8=0),"",(K8-R8)/K8)
  • Margin gap in points (U8): =IF(OR(S8="",T8=""),"",(S8-T8)*100)
  • Biggest leak (V8): =IF(R8="","",IF(MAX(L8:O8)<=0,"Nothing over — the bid held",IF(L8=MAX(L8:O8),"Materials",IF(M8=MAX(L8:O8),"Labor",IF(N8=MAX(L8:O8),"Dump","Overhead")))))
  • Jobs graded (C3): =COUNT(T8:T22)
  • Average margin gap (C4): =IF(COUNT(U8:U22)=0,"",SUM(U8:U22)/COUNT(U8:U22))
  • Jobs under your target margin (C5): =COUNTIF(T8:T22,"<"&$C$2)
  • The red flag is conditional formatting, not a formula in a cell. Rule on T8:T22, red fill: =AND(ISNUMBER(T8),T8<$C$2) — the margin you actually kept turns red when it lands under the target you set in C2.

Only IF, OR, AND, SUM, COUNT, COUNTIF, MAX, ISNUMBER and plain arithmetic are used — nothing that needs a new Excel — so it opens and computes in old Excel, Numbers and LibreOffice. Every formula guards on a blank row, so the fourteen empty rows under the example stay empty instead of throwing a divide error. (Verified: opened and recalculated in LibreOffice — every formula computes, blank rows stay blank, and the example row reads $450 / $1,000 / $150 / $0 over, a 14.3% bid margin, a 6.8% margin kept, a 7.4-point gap, and Labor as the biggest leak.)

Notes and judgment calls

  • There is no "good" margin gap on this sheet, and there never will be. A gap depends on your market, your crews and how you bid. The only benchmark here is the target margin you typed into C2. Anybody selling you an industry number for this is selling you something.
  • The trigger is the last dollar, not the last shingle. Grade before the money's all in and the collected column is short, so the job reads worse than it was and you go hunting a leak that isn't there. Wait for the last check.
  • Change orders and supplements belong in the collected column, not off to the side. A job that ran over on labor but picked up more approved extra work than it lost came out ahead. Leave the extras out and the sheet tells you a lie about a job you actually handled well.
  • Keep the overhead columns honest. Most owners carry the same overhead share in both columns, and that's fine — put the same number in H and I. They're two columns because the day you change how you work out overhead, you'll want to see the old bid next to the new number.
  • On a dead tie, the leak column names the line furthest left — materials before labor, labor before dump. Two lines that overran by the exact same dollar is rare, and either answer is true; the column reads one of them so it always gives you a single thing to go fix.
  • Biggest leak only names cost overruns. If nothing overran, the column says the bid held. It never names the price column, because collecting less than you bid is a collections problem, not an estimating one — that one's the money-owed list in M6-01.
  • Fifteen job rows, then start a fresh copy. Rows 8 to 22 carry the formulas, and the "how to use it" line sits just below them at A24. A sixteenth job typed on row 23 gets no math at all — which is your signal to save a fresh copy of the sheet, one per season or one per crew.
  • The sheet ships with its numbers already saved in it, so a phone preview shows real figures; they recalculate the moment you type in it.

The one thing

Do this this week

Take one job whose final check cleared in the last month. Twenty minutes with the folder: supplier invoices, payroll, the dump ticket, what you deposited. Put those four next to the bid, and write one sentence naming the line that moved most. Then change that number on your next bid.

Take it with you

One email unlocks this and every other sheet and card on the site. The plays stay free.

Same fire

Jobs sell but the profit isn't there

All the fires →

Fixed this?

Half of “no profit” is profit you earned and never collected.

The fire right behind it is usually Owed money you can't collect.

These plays are how we run a shop — they are not legal, tax, or accounting advice. Rules change by state and by contract, so before you act on the legal-sounding parts, run them past your own attorney or accountant. It's your business, and what you do with any of this is your call and your responsibility.

About this libraryWhat we do with your email