Skip to content
Roofer MBA

Roofer MBA128 plays for the business side of a roofing company. Free to read, no account, nothing for sale. What this is →

Count Where Last Year's Jobs Actually Came From

On the list of fires: “count last year's sources

Module 9 · Sales & Leads · Play 1 of 14

The problem in one breath

Ask most owners where their work comes from and you get a shrug and a guess — word of mouth, mostly. Then the phone slows down in August and there's nothing to turn up, because nobody knows which faucet was pouring and which one was dripping.

Why it happens

Leads arrive one at a time, months apart, in four different ways, and none of them announce themselves. A referral and a Google call look identical on your phone. So the shop runs on a feeling about where work comes from, and that feeling is usually built out of the three jobs you remember best, not the forty you actually did. Then somebody sells you a lead package or a mailer, and you have no way to tell whether it worked, because you never knew the baseline.

The play

  1. Pull last year's closed jobs and put a source on every one. Not this month's — a year, so the slow season is in there. Every job gets exactly one source: search, paid ads, repeat customer, referral, a lead service, a builder or property manager, a sign, a knock. One job, one source, the first thing that put that name in your hands.
  2. Count the money, not just the jobs. Ten small repairs and one re-roof are not the same channel win. Put revenue next to each source, and the shape changes — the source that brings the most calls is often not the one that brings the most money.
  3. Look at what it cost you to get. Ad spend divided by the leads it produced is your cost per lead; divided by the jobs it produced is your cost per job. One roofing shop that tracks this knows its search ads run about $168 a lead and can quote it from memory — that number is theirs, in their market, and yours will land somewhere else. The point is to be able to say it at all.
  4. Mark the ones you tried that went nowhere, and say why. Door hangers, mailers, a lead app you quit. In that same shop the hangers worked out to roughly two hundred dropped for every phone call — but well over half of those calls became jobs, which is a different problem than "hangers don't work." A channel with a good close rate and terrible volume needs more reach or a better offer. A channel with volume and no closes is priced wrong or aimed wrong. Write which one you had.
  5. Find the channel you're under-feeding. In most shops it's the one that costs nothing and nobody owns: the people you already roofed. If repeat and referral work is a real slice of that list and no one in your shop is responsible for it, that's the cheapest job you're not booking (Play 8, "The Roofs You Already Won").
  6. Then decide one thing to change, and only one. Turn a channel up, turn one off, or feed the one with no owner. Change two and you'll never know which one moved.

Do this this week

Take last year's job list, put one source next to each job and one dollar figure, and total it by source. An hour with a spreadsheet, and you'll know more about your own shop than you did Monday.

The tool

Or fill it in here — no download

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 lead-source count is a spreadsheet: one row per source, what you spent on it, how many leads it gave you, how many became jobs, and what those jobs were worth. It does the division for you — cost per lead, cost per job, close rate by channel, and each channel's share of your revenue — so you're comparing channels on money instead of on how loud each one felt. Fill the yellow columns off last year's jobs. The five rows already filled in are an example built out of made-up numbers — delete them and put your own year in.

If your crew is 1099

Nothing changes in the counting. It changes what a thin month costs you: sub crews go work for somebody else while your own men still draw a check, so the shop that runs on subs feels a lead drought later and harder. That's an argument for knowing your sources before the drought, not after (Module 12, Play 5, "Pay the Day You Said and You Get First Call After the Storm").

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 worksheet, Sources. It takes a year of finished work, sorted into the places that work came from, and prices each place: what it cost, what it closed, and how much of the year it paid for. The question it answers is the one most owners can only guess at — where does my work actually come from, and what am I paying for each piece of it.

The log is rows 7 through 26, twenty sources. Columns A through E are yellow: that is where you type. Columns F through J are gray: they work themselves out, and you never type in them. The answer block sits at rows 30 through 41 — C30 is the guard, C31 through C40 are the answers, green except for the gray guard, and C41 is the one-line verdict. Row 3 is the banner that says the same thing. Rows 43 through 50 are the closing prose, each one merged across A:J.

The five yellow columns:

ColWhat you typeFormat
AWhere the work came from — one line per sourcetext
BSpent on it last year $ — ad spend, lead fees, printing; $0 is a real answerwhole dollars
CLeads it gave you — every call, form, knock, closed or notwhole number
DJobs it closed — of those leads, how many became workwhole number
ERevenue from those jobs $ — what they were worth, before costwhole dollars

One source per job, and it is the first one. A referral who then searched your name and called the ad is a referral: the source is whatever first put that name in your hands. Split one job across two sources and you have counted its revenue twice, both channels read better than they are, and the shares in column J stop adding to a hundred.

Column B is the cost of making the phone ring, not the cost of doing the work. Ad spend, lead service fees, the printing and the dropping. Not labor, not material, not the truck. Repeat customers and referrals normally sit at $0, and that zero is the whole point of the sheet: it is what lets a free channel and a bought channel stand next to each other. When B is 0 the sheet prints free in the two cost columns instead of dividing by nothing.

Column C is leads, not jobs. Every call, form, knock and message that source produced, whether you ever got on the roof or not. This is the column shops fudge, and it is the one that carries the most weight: it sets the cost per lead and the close rate. If your phone log genuinely cannot tell you the number for a channel, type the closest honest count you have and write on the sheet that it is a count you made — a guessed lead number wrecks two answers at once and nothing in here can see it.

The five gray columns, all wrapped in =IF($A7="","",…) so an empty row stays empty:

ColFormula on row 7In English
F=IF($B7=0,"free",IF($C7=0,"-",$B7/$C7))Cost per lead $
G=IF($B7=0,"free",IF($D7=0,"-",$B7/$D7))Cost per job $
H=IF($C7=0,"-",$D7/$C7)Close rate
I=IF($B7=0,"-",$E7/$B7)Revenue for every $1 spent
J=IF(SUM($E$7:$E$26)=0,"-",$E7/SUM($E$7:$E$26))Share of the year

How to use it

Pull last year's closed jobs — a full year, so the slow months are in it. Put one source on each one. Then fill one row per source: the spend, the leads, the jobs, the revenue. Twenty rows is more than most shops need; five or six is normal.

Read it in this order. First C30, the guard: anything but 0 and nothing below it will print. Then C40, the share of the year that cost you nothing — this is the number owners guess wrong, usually low. Then column G, cost per job, which is the only honest way to line up a channel that sends a flood of cheap tire-kickers against one that sends four calls and closes three of them. Column H is that same channel's close rate; compare it against C34, your own average, not against a number somebody quoted you at a trade show.

Then change one thing. Turn a channel up, turn one off, or give the free channel an owner. Change two and the next count cannot tell you which one moved.

The example

The five yellow rows shipped in the file are an example so you can watch the sheet run: search ads, repeat customers, referrals, a lead service app and door hangers, across a made-up year. None of those numbers is a figure from anywhere and none of them is a benchmark. Cost per lead, close rate and average job size swing hard by market, by season and by what you sell — a shop three states over runs numbers that would look like a typo next to yours. They are there to show the shape of the answer, not the size of it. Select A7:E11, press Delete, and put your own year in.

What the example is built to show: two channels with $0 spend carry 47% of the revenue, and the verdict line at C41 points straight at them — because in most shops nobody is responsible for that half of the business.

The guard, term by term

C30 counts problems, not bad rows, so one half-typed row can raise it by more than 1:

  • a source typed in A with a blank in B, C, D or E — four separate counts, one per column
  • a number typed in B, C, D or E on a row with no source in A — the totals cannot see that row
  • more jobs than leads on a named row (this also catches jobs with zero leads)
  • jobs closed on a named row with no revenue against them
  • revenue on a named row with no jobs against it
  • any minus number in B through E

Anything but 0 and every green cell prints Fix the rows that don't line up instead of an answer. A total taken off a broken row is worse than no total, because you will act on it.

What the guard cannot catch: a wrong but believable number. Type 40 leads where the phone log said 90 and everything recalculates happily and lies to you. Same with a job filed under the wrong source, a channel you forgot to give a row, revenue that quietly includes a job you have not been paid for, and the year you meant to count being ten months long. The guard checks that a row hangs together, not that it is true.

Adding rows

Type into the empty yellow rows between row 7 and row 26. The gray columns F through J are already on every one of those rows and start working the moment you type a source, so there is nothing to drag — and never clear them: clear one on a named row and part of that source stops reaching the totals. Nothing needs a total typed anywhere; the answer block does that. Do not type below row 26 — the log ends there, and anything under it is invisible to every number in the sheet.

What it does not do

It does not tell you whether those jobs made money. Revenue is not profit, and a channel can look rich in column I and still lose money once the roof is built — Module 6, Play 19 grades a finished job. It does not price anything, it does not forecast, and it cannot tell you what a channel would do with more money in it; that only comes from turning one up and counting again next year. And it does not follow a lead through your shop — it starts at the source and ends at the closed job.

Take it with you

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

Same fire

You can't say where your work actually comes from

All the fires →

Fixed this?

Counting last year tells you which faucets are real. The weekly number tells you whether they are still running.

The fire right behind it is usually Cash is fine this week and you can't see next month.

Then about one email a week: a play from the library, now and then a new sheet. Nothing else.

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 emailSheets & cardsWrite to a person

© 2026 Roofer MBA. The plays are ours; what you do with them is yours.