Local HVAC company in Peel Region, ON
Heating, cooling, and tune-ups. Budget $3k–$5k/month. Leads were sporadic and expensive. They wanted booked calls, not just clicks.
Generic keywords mixed installs, repairs, and research—all at $120 CPA.
Couldn’t see which keywords/ad groups actually drove phone bookings.
Old multi-offer page; slow on mobile; no trust badges or map.
Broad match hoovered low-intent searches; little exact coverage.
Region lumped together; city distance affected close rate.
Night clicks, few conversions; no dayparting.
Multiple CTAs, slow hero, no price anchors or financing cue.
Paid for DIY queries (“thermostat blinking,” “how to fix…”) repeatedly.
No dynamic number insertion; missed calls from ads & landing page.
Fix the basics
Show real proof
Build authority & keep tuning
Call spam & missed calls
Fix: CallRail spam filter + missed-call text-back; counted only ≥60s qualified calls.
After-hours waste
Fix: Paused midnight traffic; voicemail prompt to book 7am slot; schedule bid rules.
Technician capacity swings
Fix: City-level budgets: throttle installs during backlog; keep repair always-on.
Calls: CallRail → imported to Google Ads/GA4.
Forms: GA4 events; source/medium + campaign.
Landing tests: Unbounce A/B and page speed logs.
CPA: $120 → $50 (-58%)
Calls: 41 → 127 / month
Quality Score: 5.4 → 8.1
CTR: 3.2% → 6.8%
Conv rate: 3.1% → 9.4%
Price in headline beat benefit line (+22% CTR)