google ads for contractors: the playbook for trades (hvac, plumbing, roofing)
contractors are one of the highest-leverage industries on google ads, and most of them run it badly. the searches are urgent, the intent is clean, the case values are high. but the dynamics between paid search, local service ads (lsa), and the map pack are more complex than in any other industry. get the mix wrong and you pay 3x what you should.
this article covers the playbook i use for remodelers, roofers, HVAC, plumbers, and general contractors. the same framework adapts across trades with small adjustments.
why contractors are different from other trades
three things make contractor search unique.
one: the range of urgency. a burst pipe is an emergency. a kitchen remodel is a 6-month decision. your campaigns need to handle both, separately. bundling emergency and considered searches in the same campaign is how budget disappears.
two: local service ads (lsa) exist for most trades. lsa is google’s pay-per-lead product that sits above normal ads for plumbing, HVAC, roofing, electrical, and a growing list of trades. in cities where lsa is active, ignoring it is a strategic mistake. in cities where it is not yet active, ignoring it is fine.
three: seasonality is brutal. HVAC demand triples in july and drops 60% in october. roofing spikes after every storm. landscaping is summer-only in the north. your campaign needs to scale with demand, not run flat.
search volume by trade
rough volume patterns across most US metros. this is not exact data, it is the shape i see:
- HVAC: high volume, highest in summer (cooling) and january (heating). emergency-heavy.
- plumbing: consistent year-round, spikes on weekends and after hours. emergency-heavy.
- roofing: seasonal and storm-driven. volume can 5x in a week after a hail event.
- remodeling (kitchen, bathroom): considered purchases. research phase lasts weeks. lower volume, higher case value.
- general contractor: broad, mixed intent. needs aggressive negative keyword filtering.
- electrical: steady, emergency-heavy, moderate competition.
- landscaping: seasonal, considered purchases for big projects, impulse-driven for routine maintenance.
lsa vs google ads: when each wins

local service ads charge per lead, not per click. google verifies your business, checks licensing and insurance, and you pay only when someone calls or messages. in markets where it is active, lsa typically delivers cheaper leads than traditional google ads for urgent trades.
lsa wins when: the trade is an emergency service (plumbing, HVAC, electrical), the market has active lsa inventory, and you can pass the verification requirements.
google ads wins when: the trade is a considered purchase (kitchen remodel, whole-house rewire), you need control over which zip codes or service types you advertise, or lsa is not yet live in your city.
run both when possible. lsa for the top-of-funnel emergency queries, google ads for branded, specific-service, and considered-purchase queries. the overlap is small and the combined coverage beats either alone.
campaign structure for contractors
same principle as legal: one campaign per major service line, not one campaign with everything.
for an HVAC company:
- emergency repair (ac repair, furnace repair, no heat, no cooling)
- ac installation / replacement
- furnace installation / replacement
- maintenance / tune-up
- commercial HVAC (if applicable, separate budget)
each campaign gets its own ad groups by intent (near me, in [city], specific model searches), its own budget, and its own landing page. the emergency campaign converts at 15-20%. the installation campaign converts at 4-8%. if they share a budget, the cheap installation clicks eat the expensive emergency clicks.
geo targeting by zip code, not city. contractors have service radii that rarely match city boundaries. use zip-code-level targeting to include your actual coverage area and exclude neighborhoods you will not drive to.
dayparting matters. emergency services should bid higher at night, weekends, and holidays when competition drops but intent spikes. installation services should bid higher during business hours when homeowners are researching.
realistic budget for contractors

CPC ranges i see:
- emergency HVAC: $40-80 per click
- emergency plumber: $30-60 per click
- roof replacement: $60-150 per click
- kitchen remodel: $35-90 per click
- general contractor: $15-40 per click (low intent, needs tight negatives)
back-of-envelope math for an HVAC company wanting 15 installs a month at $8,000 average ticket:
- 15 installs ÷ 30% close rate = 50 booked appointments
- 50 appointments ÷ 40% call-to-appointment rate = 125 qualified calls
- 125 calls ÷ 12% landing page conversion = 1,040 clicks
- 1,040 clicks × $55 blended CPC = $57,200/mo
against 15 × $8,000 = $120,000 in revenue, that is a 2.1x roi before maintenance contracts and referrals. if that math does not work at your trade’s margins, the fix is not “lower your bid,” it is “fix your close rate and landing page conversion.” roi in contractor ads is almost always a conversion problem, not a cost problem.
landing page: photos of completed work win
contractor landing pages convert on trust and proof, not copy. what moves the needle:
- photos of completed projects. real jobs, not stock photos. before/after sets when possible. for remodelers, this is 70% of the conversion job.
- licensing and insurance visible above the fold. “licensed, bonded, insured” with numbers if you can share them. skeptical homeowners need this.
- service area map. literally a map of the zip codes you serve. removes the “do you even come to my area” objection.
- response time promise. “we answer in under 2 rings during business hours” or “24-hour response guaranteed.” concrete beats vague.
- review score + count prominently displayed. “4.9 stars, 312 google reviews” in the hero.
- click-to-call phone + lead form. both options. emergency callers need the phone, considered-purchase researchers prefer forms.
3 mistakes i see 80% of contractors make
1. one massive “all services” campaign. a general contractor running “kitchen remodel” and “deck repair” in the same ad group, sharing the same budget. impossible to optimize. split by service line on day one.
2. no negative keywords. “home depot,” “diy,” “how to,” “jobs,” “near me salary,” “cheap,” the words “career” and “hiring.” homeowners researching how to do it themselves, job seekers, and competitors’ employees eat budget. i maintain a 600+ word contractor negative list.
3. pausing ads in the slow season. the instinct is “demand is low, kill the ads.” the smarter play is “demand is low, CPCs are low, my competition is pausing, this is when i grab market share cheap.” scale down, do not stop. the brand familiarity you build in the slow months pays off when demand spikes.
when google ads is not the right move for a contractor
pause and fix these before launching:
- you do not answer calls on nights or weekends and most of your work is emergency-adjacent
- your website was built in 2014 and takes 7 seconds to load on mobile
- you do not have 5 decent photos of completed work
- your service area is smaller than 15 zip codes and you are competing against 20+ companies
- your average job size is under $500 and close rate is under 20%
fix the foundations first. ads amplify what exists. cheap leads from a broken business is a worse problem than no leads at all.
next step
if you already run google ads and want a review of your practice areas, match types, geo targeting, and landing page, start with a free audit. if you are running lsa and traditional ads together, i can show you where they overlap and where the leaks are.
is your business visible on google?
get a free, no-obligation audit of your google presence. i'll show you exactly where you're leaving money on the table.
get your free audit