If you're running roofing Google Ads without a properly maintained negative keyword list, you're paying $8–$25 per click for traffic that will never become a customer. We've audited 47 roofing accounts in the last 18 months. The average waste? 34% of monthly spend.

What negative keywords actually do

A negative keyword tells Google: "Don't show my ad when someone searches for this."

Even if you're bidding on "roof replacement near me," Google's match types — especially Broad and Phrase match — will trigger your ad on searches like:

None of those people are calling you. They're researching, not buying.

34%
average wasted spend in roofing accounts we audit
$18
average roofing CPC in the US (2026)
10 min
to add the full list below to your campaign

The 9 negative keywords to add today

1. diy + do it yourself + how to

Homeowners researching how to install asphalt shingles themselves are not your customers. They're saving money, not spending it.

2. free

"Free roof inspection" sounds like a query you want — except 80% of people typing that are looking for federal/state assistance programs, not paid services. If you offer free inspections, capture them via a separate dedicated landing page, not your main "roof replacement" campaign.

3. training + school + course + certification

Aspiring roofers and contractors-in-training looking to learn the trade. Zero buying intent for your service.

4. job + jobs + career + hiring + salary

People searching for roofing jobs, not roofing services. This is often the single biggest waste category — we've seen accounts spend $400/mo just on "roofer salary" related searches.

5. calculator + estimate + cost calculator + price calculator

Surprised? "Roofing cost calculator" is high-intent for content, low-intent for buying. Most of these searchers will play with numbers and bounce. Build a calculator on your site and run a content campaign to it — but don't bid on it from your service campaign.

6. wikipedia + history + definition

Pure research traffic. Sounds obvious but Google's Broad match will absolutely show your ad for "roof Wikipedia" if you're bidding on "roof."

7. amazon + walmart + home depot + lowes + menards

Product searches. "Roofing nails home depot," "roofing felt Lowes," "tarp Amazon." These are people buying materials, not hiring a contractor.

8. insurance (sometimes — depends on your offer)

This one's nuanced. If you handle insurance claims, you want these. If you don't, "roofing insurance claim" searches will eat budget. Decide based on your service.

9. Competitor brand names

Bidding on competitors is a strategy, but defaulting to it without a plan means clicking-but-not-converting. By default, negative-out the top 3 competitor names in your service area until you've decided to run a dedicated competitor campaign.

Pro tip

Add these as phrase match negatives (in quotes), not exact. That way "DIY roof help" and "roof DIY guide" both get blocked.

How to add them (60 seconds)

  1. Open Google Ads → click your campaign
  2. Left menu → KeywordsNegative keywords tab
  3. Click + to add
  4. Paste the list one per line, set match type to Phrase
  5. Apply to campaign (not ad group, so future ad groups inherit)

The weekly review routine

Static negative lists are a starting point. The real value comes from reviewing your Search Terms Report every week:

  1. Open Search Terms Report (last 7 days)
  2. Sort by Cost (highest first)
  3. Read each search term that drove cost but no conversion
  4. Add the irrelevant ones as new negatives
  5. Move on to the next

This 15-minute weekly habit, done consistently for 90 days, typically cuts cost per lead by 30-50% in roofing accounts.

Want us to audit your Google Ads account and find your wasted spend?

Get a Free Audit

The bottom line

Negative keywords are not optional in 2026. With CPCs climbing every year and Broad match becoming Google's default, the difference between a profitable roofing campaign and a money pit often comes down to a 90-line negative keyword list and a 15-minute weekly habit. Start with the 9 above. Iterate from there.