Growth Wall Paid Media

Why Most Roofers Lose Money on Google Ads (And How to Fix It)

Spending $2,000–$5,000/month on Google Ads and getting 6–10 low-quality leads? The problem is rarely the budget. Here's what's actually breaking your roofing campaign.

· 7 min read

You're spending $3,500 a month on Google Ads.

You got 8 leads last month. Two turned into booked jobs. Both were small repairs — not the shingle replacements or full re-roofs you actually built the campaign for.

The math doesn't add up. And nobody at the agency has a good explanation.

Here's what's happening.


The Problem Isn't Your Budget

Most roofers who come to us frustrated with Google Ads assume one of two things: either they're not spending enough to compete, or Google Ads just doesn't work for roofing.

Neither is usually true.

The real problem is structural. Your campaign was probably set up once, pointed at the wrong keywords, aimed at too wide a geography, and sending traffic to a landing page that doesn't convert. Then it got left alone.

A roofing company running $2,000/month on a tight, well-structured campaign will consistently out-compete one burning $6,000 on a broken one. Budget isn't the variable. Structure is.

Here's where the money actually goes.


Mistake #1: Broad Match Is Eating Your Budget

If you or your agency set up your roofing campaign using broad match keywords — which is the Google Ads default — you are almost certainly spending a significant chunk of your budget on searches that have nothing to do with hiring a roofer.

Broad match tells Google: "here's a keyword, go find searches you think are related." Google interprets that generously. Very generously.

A broad match keyword like "roof repair" will trigger your ads on searches like:

  • "DIY roof repair how to"
  • "roof inspection cost"
  • "gutter cleaning service"
  • "how long does a roof last"
  • "flat roof installation guide"

None of those people are calling you. Most of them are homeowners in research mode, renters, or people who want to fix the problem themselves. You're paying $18–$35 per click for traffic with zero intent to hire.

In a roofing campaign spending $3,000/month, it's common to find 40–60% of spend going to broad match waste. That's $1,200–$1,800/month funding clicks from people who were never going to become leads.

How to spot it: Pull your Search Terms report (Campaigns → Keywords → Search Terms). Sort by cost. If you see irrelevant searches eating spend, that's your confirmation. If you haven't looked at this report in the last 30 days, your agency hasn't either.

The fix is phrase match and exact match. You control which searches trigger your ads. You stop paying for curiosity.

Before you decide whether your cost per lead is too high, it's worth understanding what you can actually afford to pay — run your numbers through the Max CAC Calculator based on your job values and close rate.


Mistake #2: You're Bidding on the Wrong Geography

Geo-targeting errors are the second most common budget leak in roofing campaigns — and one of the harder ones to catch if you're not looking closely.

The most common mistake: using a radius target around your office instead of targeting specific zip codes or cities you actually service.

Radius targeting sounds logical. But a 25-mile radius in a metro area will pull in neighborhoods you don't serve, municipalities with their own pricing dynamics, and sometimes parts of neighboring counties where storm damage patterns and competition look completely different.

The other mistake is targeting too broad a region because "we can travel for the right job." Roofing leads are inherently local. Someone searching for "roofing contractor" in your city at 7pm after seeing a weather report is not the same intent as a commercial facility manager shopping three states. You're not competing in the same pool.

Zip code layering matters. If you service 15 zip codes, build your geo-targeting around those 15 zip codes. If a major storm event hits a specific metro cluster 30 miles out and you want to compete for that surge — spin up a targeted campaign for it, don't just widen your radius and hope.

Check your Location report (Campaigns → Insights → Geographic report). Look at where your actual clicks are coming from. If you're paying for clicks in areas you don't operate, that's money you can reallocate immediately.


Mistake #3: Your Landing Page Is Killing the Conversion

This one is predictable. Almost every roofing company we audit is sending Google Ads traffic directly to their homepage.

The homepage is built to inform, not convert. It has navigation. It has multiple services listed. It has a "who we are" section. It gives the visitor options — and options kill conversion intent.

Someone who clicked an ad for "storm damage roof repair your city" has a specific, urgent problem. They want to know you handle storm damage, that you're available, and how to reach you. In that order. Fast.

Your homepage makes them look for all of that.

A dedicated roofing landing page — one that matches the ad, leads with the specific service, shows proof of your work, has a clear phone number and form above the fold, and has one call to action — converts at 2–5x the rate of a generic homepage. That's not a theoretical number. That's the consistent gap we see when we look at pre- and post-audit performance.

The test: Click your own ad. What does the page say? Does it match what the ad promised? Is there a form above the fold? Is there a phone number visible without scrolling? If any answer is no, you're converting a fraction of the traffic you're paying for.


What This Looks Like in the Real World

Here's a close composite of what a typical audit reveals.

Mid-sized residential roofer, Southeast metro. Running Google Ads for 14 months. Agency-managed, $3,000/month budget. Getting 6–10 leads/month. Close rate around 25%. Jobs that close are mostly small repairs — not the $8,000–$15,000 re-roofs they wanted to fill the calendar with.

The audit findings:

  • 58% of spend going to broad match keywords — top wasted searches included "roof paint colors," "flat roof DIY repair," "how much does a new roof cost," and "roof inspector near me"
  • Zero negative keywords in the account. Not one. In 14 months of running, no searches had been excluded.
  • Geo-targeting set to a 30-mile radius from their shop. Pulling in three counties — one of which they explicitly said they don't service
  • All four ads in the campaign pointing to the homepage. No dedicated landing pages. No form above the fold on mobile.

The fix:

  • Switched all keywords to phrase and exact match
  • Built a negative keyword list with 45+ terms (DIY, inspection, paint, cost, cheap, free, how to, materials, contractor license, permit — the full list)
  • Rebuilt geo-targeting around 18 zip codes they actually service, with bid adjustments on the three highest-value neighborhoods
  • Launched two dedicated landing pages: one for storm damage / insurance claims, one for standard re-roof/shingle replacement

The result:

Same $3,000/month budget. Within 60 days: 12–16 leads/month, higher job values, better close rate. Cost per lead dropped from $280 to $160. Revenue per ad dollar roughly doubled.

Nothing changed except structure.


The Bigger Problem: Nobody Is Watching the Account

The scenario above is common. Not because agencies are incompetent — but because most Google Ads account management for small service businesses operates on a set-and-forget model.

The campaign gets built. The initial targeting gets set. A few ads go live.

Then: monthly reporting, maybe a budget tweak, and an occasional email saying performance is "trending in the right direction."

Nobody is pulling the Search Terms report weekly. Nobody is adding negatives. Nobody is testing new landing page copy or adjusting bids by zip code based on what's converting. The account slowly degrades as Google's algorithm learns to spend your budget in broader, cheaper ways.

If your agency can't tell you — without looking it up — what your top three wasted search terms were last month, they haven't looked. That's the honest tell.

Account management for a $3,000/month roofing campaign should include weekly search term review, monthly negative keyword additions, landing page performance tracking, and at minimum quarterly geo and bid strategy reassessment. If you're not getting that, you're paying for access to the platform, not for management.


Three Things You Can Check Right Now

You don't need an agency to audit these. Log into your Google Ads account and do this today.

1. Pull the Search Terms Report Go to Campaigns → Keywords → Search Terms. Set the date range to the last 90 days. Sort by cost. Read the first 20 rows. If you see irrelevant searches (DIY content, competitor names, unrelated services), those are real dollars you've already spent on nothing. Note the total cost on those rows.

2. Check Your Geographic Report Go to Campaigns → Insights & Reports → Geographic Report. Look at "User locations." Find clicks from cities, counties, or areas you don't actually service. Add up the spend. That number can be reallocated immediately to areas where you actually convert.

3. Click Your Own Ad and Time Yourself Open a private browser, search your primary keyword (e.g., "roofing contractor your city"), click your ad, and start a stopwatch. How long does it take you to find a phone number? To find a form? To understand what specific service you offer? If it takes more than 10 seconds, a homeowner with storm damage on a Tuesday night is already gone.

None of this requires a tool subscription or an expert. Just look.


The Fix Doesn't Require More Money

This is the part most roofers don't hear from their agency: you probably don't need to spend more.

You need to spend better.

A structural reset — tighter match types, a real negative keyword list, accurate geo-targeting, and a dedicated landing page — will outperform a budget increase on a broken campaign every single time. Every time.

What a clean roofing campaign actually looks like:

  • Phrase and exact match keywords for high-intent searches: "roofing contractor city," "storm damage roof repair," "shingle replacement city," "emergency roof repair"
  • A negative keyword list built from real search term data — not a generic list copied from a blog
  • Geo-targeting built around your actual service area with bid adjustments by neighborhood or zip code
  • At least two dedicated landing pages: one for storm/insurance work, one for standard replacement
  • Monthly search term review and negative keyword additions — not quarterly, not when you think of it

This isn't a complicated build. A focused two-week rebuild will get you here. The ongoing management is about 3–4 hours a month if you know what you're doing.

The gap between a broken roofing campaign and a clean one isn't budget. It's attention.

For more on how we approach paid media — the full structure behind a clean campaign build — see the Paid Media Framework.


You've Probably Already Spent Enough to Know Something Is Off

If you've been running Google Ads for more than six months and the numbers don't add up — leads that don't convert, costs that feel too high, an agency that talks about impressions more than pipeline — trust that instinct.

The good news is this is fixable without starting over or spending more.

We do straight account audits for roofing companies. No pitch. We pull your Search Terms report, your geo data, your landing page performance, and tell you exactly where the spend is going and what's worth changing. If we can't find a meaningful efficiency gain, we'll say so.

If you want a second set of eyes on the account — book a free audit here or run your numbers through the Max CAC Calculator to understand what you should actually be willing to pay per lead given your job values and close rate.

Ready To Install a Revenue System That Actually Scales?

Let's map out your growth plan together.

Talk to a Growth Partner