Every trade in home services runs on the same chain. You buy a click. Some clicks become leads. Some leads become jobs. Your margin tells you what a job is worth, and the maximum propagates backwards until you know what you can afford to pay for a click.
Roofing breaks that chain — and it’s worth understanding even if you never touch a roof, because the reason it breaks explains something about your own ad account you may have been getting wrong.
Where the money actually is
In the storm-driven roofing model, the largest money does not come from a homeowner deciding it’s time for a new roof. It comes from insurance claims.
The sequence works like this. A storm goes through. The companies that are good at this know precisely where it hit — which streets, which ZIP codes. They drive there and knock on doors.
We know a storm came through here. There’s a good chance your roof took damage. Let us inspect it, free. If there’s a claim, we’ll file it with your insurer for you, and we’ll do the repair.
A roof in the US is expensive enough that most homeowners have never seriously priced one. Being told it might be replaced at the insurer’s expense is a genuinely attractive proposition, and people take it.
Notice what that means. The marketing is a person standing on a doorstep. Not a search campaign. Not a lead form. A human being, walking a neighborhood, having a conversation.
So what is advertising for?
If the sale happens at the door, the obvious conclusion is that digital advertising has no role here. That conclusion is wrong — but the correct role is not the one most agencies will sell you.
Advertising is not there to produce leads. It’s there to raise the close rate of the people knocking.
Your company is not the only one working that neighborhood. After a significant storm, several roofers walk the same streets in the same week. The homeowner is going to hear the same offer three or four times, and has to pick one.
Whoever they’ve heard of before wins a disproportionate share of that choice.
So when you know a storm has hit — and knowing precisely where is itself a competitive capability — you run reach into those ZIP codes. Not to generate calls. To be familiar by the time someone from your team is standing on that doorstep.
The effect shows up down the funnel, in three places: whether the first conversation happens at all, whether the free inspection turns into an estimate, and whether the estimate turns into a signed job.
That is a real, measurable contribution. It is simply not a lead.
Which means the arithmetic changes shape
Look at what the standard chain assumes: you buy a click, some clicks become leads, some leads become jobs. In storm roofing, the click never becomes a lead. The doorstep becomes the lead. So the chain has nothing to attach to at the top, and cost per lead — the number most reporting treats as central — is undefined for this campaign.
What you can compute instead:
Take the close rate of your door-knocking crews without advertising support. Take it with. The difference, multiplied by your margin per roof, is what the campaign is worth.
If a crew closes at some rate and awareness advertising lifts it by even a couple of percentage points, on a job worth what a roof is worth, the campaign pays for itself many times over. If it lifts nothing, it’s a donation.
The controlled test almost nobody runs
The honest difficulty is measuring that lift. You need the discipline to run some neighborhoods with air cover and some without, and to compare.
Here’s the thing: in a trade this concentrated in space and time, a genuine controlled comparison is unusually easy to construct.
Two adjacent ZIP codes. Same storm. Same crew. One with a campaign, one without.
There is no other trade in home services where that experiment is so available, and almost nobody runs it. If you do one thing after reading this, do that.
The insurance angle changes the customer
Two consequences of the payer not being the customer, both worth knowing.
Price sensitivity nearly disappears. A homeowner comparing three quotes they’ll pay themselves behaves completely differently from one whose insurer is covering the work. The competition shifts from price to trust, speed, and whether you seem like you’ll handle the paperwork competently — a competition advertising can influence far more than it can influence price.
Your real product is partly the claim. You are selling roof work, but what you’re actually offering is we’ll deal with the insurer for you. That should be visible in everything the homeowner sees before the doorstep, because it’s the part they’re anxious about. Most roofing sites bury it under photos of shingles.
What the arithmetic looks like
Rounded figures from a roofing business we modeled. They’re worth sitting with, because they contradict what most people assume about this trade.
| Average job | ~$15,000 |
| Margin | ~15% |
| Most you can pay per customer | ~$2,250 |
| Close rate, lead to signed job | ~25% |
| Website conversion | ~2.5% |
| Most you can pay per click | ~$14 |
| What the market was charging per click | ~$5 |
Read the last two lines together. The maximum is roughly three times the market price.
That is one of the healthiest gaps we’ve measured in any trade. Compare your maximum to what competitors actually pay: this business is comfortably clear to advertise, and every click it buys carries a wide margin.
Which makes the point sharper, not softer. Roofing’s problem is not that the economics don’t work. The economics are excellent. The problem is volume and timing. Sixty leads a month is a target, not an abundance. A business closing a quarter of them signs roughly fifteen jobs a month — and as the last section explains, that is thin.
The margin trap, visible in one line
Notice the margin: mid-teens. That’s the lowest percentage of any trade in home services. Appliance repair runs at half the ticket price in margin. Cleaning around thirty percent. Remodeling in the thirties and low forties.
And roofing, with the worst margin percentage of the lot, has one of the highest maximums per customer — because fifteen percent of fifteen thousand dollars is more money than fifty percent of two hundred and sixty-five.
A margin percentage tells you nothing on its own. It only means something multiplied by the ticket. Any contractor comparing their margin to someone else’s without comparing average job size is comparing nothing at all — and this is the single most common way owners in different trades give each other bad advice.
And then the storms stop
This is the part roofers know and everyone else underestimates.
Between storm seasons, life is hard. Selling a planned roof replacement — to a homeowner who has no leak, no damage and no insurance claim, and who will be paying for it themselves — is punishingly expensive.
The economics of the work itself are excellent. That’s not the problem. The problem is that in quiet periods every roofer in the market is hunting the same small pool of planned replacements. Some of them will bid into unprofitable territory just to keep crews busy. That drags the market price of a click up past what a disciplined operator can justify.
This is the seasonality problem appearing as competitive desperation rather than as demand. The customers exist year-round in small numbers; the competition for them peaks exactly when everyone’s revenue is thin.
The correct response is unsatisfying if you were hoping advertising would fill the gap: don’t win that auction. Plan the quiet season around work that doesn’t require buying it — existing customers, referrals, maintenance and inspection programs, commercial relationships, and search visibility built during the busy months.
And if the calculation says you can’t profitably buy planned replacements in February, that’s not a failure of your marketing. It’s information about your market.
The rule that applies to every trade
Here’s the part worth underlining even if you never touch a roof.
The most valuable technical practice in paid media is the offline conversion loop: feed real outcomes — qualified, quoted, won — back to the ad platform so it optimizes toward revenue instead of ringing phones.
In roofing, you often can’t do it.
Not because the tracking is harder. Because there isn’t enough volume. Ad platforms learn from conversions, and they need a meaningful number of them before their learning means anything. A business doing a few large jobs a month simply doesn’t generate enough signed deals for an algorithm to optimize against. You can feed it sales data all you like; statistically, it’s noise.
So there’s a general rule hiding here, about the depth of optimization you can afford:
| Ticket | Volume | What you can optimize toward |
|---|---|---|
| Small (appliance repair, cleaning) | High | Qualified leads, and often all the way to completed jobs |
| Large (roofing, remodeling) | Low | Leads at best — and sometimes only reach |
Appliance repair and cleaning sit at one end: hundreds of small transactions, which means the platform gets a rich signal and you can push optimization right down to the sale. Roofing sits at the other. Big tickets, few of them, and a long claim process in between. To optimize on completed sales in that trade you’d need a substantial budget purely to generate enough events for the system to learn from — and most roofers don’t have it, and shouldn’t spend it that way.
The optimization depth available to you is set by your conversion volume, not by your budget or your sophistication. Higher up the funnel for low-volume trades, lower down for high-volume ones.
Work out which end you’re on before you decide what to measure. It’s the difference between an account that improves every week and one that thrashes.
What to do on Monday
- Write down your seven numbers — average job, margin, close rate, website conversion, jobs per customer, how long they stay, what else they bring. Run them through the maximums calculator and get your ceiling per customer, per lead, per click.
- Compare that ceiling to what your market charges. If there’s a wide gap, you’re clear to advertise and probably underspending.
- Split your account by what it’s actually for. Storm reach into affected ZIPs is not a lead campaign and shouldn’t be judged as one. Planned-replacement search is, and should be.
- Run the two-ZIP test on the next storm. Same crew, same week, one with air cover and one without. Almost nobody has this number. You can.
- Stop optimizing toward sales if you sign fifteen jobs a month. Move the optimization target up the funnel to something that happens often enough for the platform to learn from.
This chapter is drawn from Win in the Spreadsheet First — the arithmetic in full, plus the same treatment for remodeling, appliance repair, cleaning and the licensed trades, is in the book.
Frequently asked questions
- What is a good cost per lead for a roofing company?
- For storm and insurance work, cost per lead is often the wrong question — the click never becomes a lead, because the lead is created when someone from your crew is standing on a porch. For planned replacement work bought through search, the ceiling is set by your own arithmetic rather than by a benchmark: average job times margin gives you the most you can pay per customer, times your close rate gives you the most you can pay per lead. On a $15,000 job at a mid-teens margin and a 25% close rate, that ceiling lands north of $500 a lead — far above what most roofers assume, which is exactly why so many of them underbid their own market.
- Does Google Ads work for roofing companies?
- Yes, but usually not as a lead source in storm season. Its highest-value job after a storm is reach into the affected ZIP codes so that you are the company the homeowner already recognizes when three or four roofers knock the same street in the same week. Outside storm season, search does behave like a normal lead channel for planned replacements — the problem there is that every roofer is bidding for the same small pool at once, which pushes the click price past what a disciplined operator can justify.
- How do you measure advertising that doesn't produce leads?
- You measure the lift in the close rate of the people knocking. Take the close rate of your canvassing crews without advertising support, take it with, and multiply the difference by your margin per roof. Roofing is the one trade where a genuinely clean test is easy to construct, because the demand is concentrated in space and time: two adjacent ZIP codes, the same storm, the same crew, one with a campaign running and one without. Almost nobody runs it.
- Why can't roofing companies optimize ads toward completed sales?
- Volume. Ad platforms learn from conversion events, and they need a meaningful number of them before that learning means anything. A roofer signing fifteen jobs a month — with a long insurance claim in between — simply does not generate enough events for an algorithm to optimize against. Feed it sales data anyway and you are training it on noise. The depth of optimization available to you is set by your conversion volume, not by your budget: small ticket and high volume lets you optimize down to the sale, large ticket and low volume means leads at best and sometimes only reach.
- What should a roofing company do between storm seasons?
- Not win the auction for planned replacements. In quiet months every roofer in the market chases the same small pool of homeowners who have no leak, no damage and no claim, and some of them will bid into unprofitable territory just to keep crews busy. That drags the market price of a click above what the math supports. Build the quiet season out of work you don't have to purchase: existing customers, referrals, maintenance and inspection programs, commercial relationships, and the search visibility you earned during the busy months.