If your roofing Google Ads cost per lead doesn’t match the number your last agency quoted you, that’s probably because they gave you a home services average instead of a roofing number. Roofing has its own math: wide ticket values, aggressive aggregator competition, and demand that can spike overnight after a hailstorm. This article breaks down what roofing-specific Google Ads performance actually looks like, why storm season changes the math, and how to tell if your account is genuinely underperforming or just running into a normal ramp period.
Why Roofing Benchmarks Don’t Match Generic Home Services Numbers
Roofing splits into two very different buyer types, and treating them as one market is where most confusion starts. Storm and insurance restoration customers found a problem after a weather event and are often working with an adjuster on someone else’s budget. Retail customers are shopping a repair or a full replacement out of pocket, usually on their own timeline. These two buyers convert differently, close at different rates, and tolerate different price points, so blending them into a single “roofing average” hides what’s actually happening in your account.
Roofing keywords also compete directly with lead aggregators like HomeAdvisor and Angi, which bid aggressively on the same generic terms retail customers search. That competition pushes CPCs up in ways that trades with less aggregator presence don’t experience. A plumber searching for “drain cleaning near me” isn’t fighting the same auction pressure as a homeowner searching “roof replacement cost,” where a national aggregator is happy to outbid a local contractor just to resell the lead.
The ticket value spread makes flat comparisons even less useful. A $25,000 roof replacement lead from a storm inquiry and a $400 repair lead from a retail search should never be judged against the same target CPL, yet many owners take their blended average and compare it to a single industry number they found online or heard from a past agency. When that comparison comes back unfavorable, they assume the campaign is broken. Often it isn’t. The account is just mixing two businesses under one number.
Before you decide your Google Ads spend is wasted, split your lead data by job type. A campaign generating repair leads at $22 each and replacement leads at $45 each isn’t underperforming just because the blended figure sits above whatever number you were quoted. It’s producing two different products at two different, and likely reasonable, prices.
What Cost Per Lead Should Actually Look Like
Home services Google Ads CPL typically runs $18 to $35, and roofing tends to sit toward the higher end of that range because of ticket value and the aggregator competition described above. If your account is running $30 to $35 per lead for replacement-focused keywords, that’s not automatically a sign of poor management. It may simply reflect what the auction costs for high-intent roofing traffic in your market.
Local SEO tells a different story over time. Organic leads from a mature Google Business Profile and website typically run $7 to $15 per lead once the listing has been established past the 12-month mark. That’s meaningfully cheaper than paid search, which is why a lot of roofing companies run PPC for immediate volume while building organic visibility that lowers their blended cost per lead over the following year. If you’re only running Google Ads and comparing your CPL to a number that assumed SEO was in the mix, you’re comparing apples to a number that was never yours to hit.
A high CPL by itself doesn’t tell you much. A $32 cost per lead is a bargain if that lead turns into an $18,000 roof replacement. It’s a problem if it’s producing $400 gutter repair calls that barely cover the ad spend once you factor in materials and labor. CPL only means something when you put it next to two other numbers: your close rate on that lead type, and your average job value for that lead type. Judging cost per lead in isolation is the single most common mistake we see roofing owners make when they compare their account to a benchmark they read somewhere.
Call Volume, Click Behavior, and Conversion Benchmarks
Roofing is a high-trust, high-ticket decision, and buyers act accordingly. Across home services, 40 to 70% of qualified leads arrive by phone rather than through a form fill, and roofing skews toward that phone-heavy end given the dollar amounts involved. Nobody wants to type out details about a $20,000 roof replacement in a contact form when they can call and ask questions directly. If your campaign has no call tracking set up, you’re missing the majority of the actual buying signal your ads are generating, and any conversion rate you’re reporting is incomplete at best.
Map Pack results account for roughly 42% of local clicks, which means your Google Business Profile carries real weight even inside a paid strategy. A homeowner who clicks your ad will often still check your reviews and star rating in the Map Pack before calling, and a thin or outdated GBP profile can undercut a well-built ad campaign. Licensing, insurance status, and years in business belong in both your ad copy and your landing page for the same reason: roofing decisions involve letting a crew onto someone’s largest asset, and trust signals do real conversion work here.
Conversion rate as a raw number also means little without a lead quality review layered on top of it. A form submission or a phone call that technically counts as a conversion isn’t worth much if the caller never answers a follow-up, gives a fake address, or was looking for a job application instead of an estimate. Before you trust any conversion rate benchmark, pull a sample of your recent conversions and check how many turned into a real inspection or estimate appointment. That number, not the raw conversion count, tells you whether your campaign is producing booked jobs or just activity.
How Storm Season Skews Every Number You’re Looking At
After a hail or wind event, search volume for roof repair and inspection terms spikes fast, and CPLs often drop temporarily because buyer intent is unusually high. Everyone searching is dealing with an actual problem, not casually researching. That short window can make an average campaign look excellent, and it can also make a struggling campaign look fine if you happen to be measuring during it. Neither read is reliable on its own.
Retail repair and replacement demand is steadier but still seasonal, and in cold-weather regions, winter brings a real slowdown because crews often can’t safely work on roofs in ice or heavy snow. A campaign that looks sluggish in January in Pennsylvania isn’t necessarily broken. It may just be running into the calendar. Comparing a January CPL against a September post-storm CPL and concluding your account is inconsistent misreads what’s actually happening.
This is why judging a roofing account off a single storm cycle or a single slow month gives you a distorted picture. You need at least one full seasonal cycle, storm season, peak retail season, and the winter lull, before a benchmark comparison means anything. An agency that reports a great CPL right after a hailstorm and disappears before winter arrives isn’t giving you the full picture of what your account will actually cost to run year-round. If you’re evaluating a campaign or an agency, ask to see performance across all three periods, not just the best month.
What to Budget Based on Your Revenue Goals
The standard benchmark across local service businesses is spending 8 to 12% of revenue on marketing. Roofers chasing storm work often need to flex above that range during active storm seasons, when competition for ad placement spikes alongside search volume and pulling back actually costs you market share at the worst possible time. Budgeting a flat number year-round without accounting for that seasonal surge leaves money on the table when demand is highest.
New campaigns typically need 30 to 90 days before performance stabilizes. Google’s algorithm needs time to gather conversion data, your negative keyword list needs time to mature, and your team needs time to get efficient at handling the leads coming in. Judging results at day 20 and pulling the plug, or demanding an agency change strategy that early, almost always leads to premature decisions that reset the learning process and cost you the ramp time you already paid for.
Budget allocation should scale with your average job value, not just your revenue target. A company built around $18,000 replacements can sustain a much higher CPL than one built around $350 repair calls, because the margin per job absorbs more acquisition cost. If your business does both, your ad spend plan should reflect that split explicitly, with separate campaigns, separate budgets, and separate CPL targets for replacement versus repair traffic, rather than one number governing both.
How to Tell if Your Account Is Actually Underperforming
Start by comparing your current numbers against your own historical baseline, not an industry average. Your service mix, your market’s competitiveness, and your close rate are unique to your business, and a benchmark pulled from a different roofing company in a different market was never designed to predict your results. If your CPL is up 15% from your own six-month average, that’s a real signal. If it’s just higher than a number you saw in an article, it may not mean anything.
When numbers do look off, check the mechanical stuff before blaming targeting or bids. A landing page that loads slowly or buries the phone number, missing call tracking that makes half your conversions invisible, or a sales process that lets leads sit for a day before follow-up will tank your numbers regardless of how well the campaign itself is built. Most “bad Google Ads accounts” we’ve reviewed turn out to have a lead handling problem, not a targeting problem.
The real trigger for a serious review is this: CPL climbing while close rate and average job value stay flat, sustained past the 90-day ramp window. That combination means the campaign is spending more to produce the same outcome, and it’s no longer explainable by seasonality or normal ramp variance. That’s the point to open the account and look for what changed, not to wait another month hoping it corrects itself.
Benchmarks tell you where to look, not what to fix. A number on its own can’t tell you whether your landing page is losing calls, whether your storm season budget is too thin, or whether you’re comparing repair leads against a replacement-lead target. Use these ranges to diagnose your account, then talk to a strategist who specializes in roofing lead generation before you overhaul a campaign based on a number that never applied to your business in the first place.
Tired of spending money on marketing that doesn’t produce real revenue? We build lead systems that turn traffic into qualified leads and measurable sales growth. If you want to see what this would look like for your business, we’ll walk you through how it works and break down what’s realistic in your market.