Toronto HVAC: $89 → $28 Cost-Per-Lead
In 90 Days.How a Toronto HVAC contractor cut Google Ads cost-per-lead by 69% in 90 days using Lead4Pro AI optimization: keyword surgery, audience layering, landing page sprint, and automated CRM follow-up.
Industry: HVAC | Location: Toronto, ON | Services used: Google Ads · PMax · Smart Bidding · AI Booking
About the Client
A mid-sized Toronto HVAC contractor with 6 service trucks, focused on residential furnace and central AC installs and repairs across the GTA. The business had a competent in-house marketing manager who had been running Google Ads continuously for 18 months. The account was not broken — it was just stagnant. Cost-per-lead had crept from a healthy $42 in 2024 to $89 by early 2026 as more national HVAC chains expanded into Toronto with deep ad budgets.
The owner did not need a new agency to "rebuild from scratch". The brief was specific: cut CPL by 50%+ without sacrificing lead quality, without changing the brand, and without breaking the long-standing AdWords account history that Smart Bidding had learned from.
The Challenge
- Match-type bloat. 60% of spend was running through broad-match keywords that had drifted into low-intent territory ("how does a furnace work", "AC repair cost calculator").
- No seasonality layering. The same bid strategy was applied year-round even though furnace demand spikes Nov–Jan and AC demand spikes Jun–Aug.
- Single landing page. Furnace, AC, heat pump, ductless, and emergency clicks all went to the same generic "Services" page. Message-match scores were poor.
- Phone-only conversion path. No web form, no chat. ~22% of clicks would have converted via form but were forced to dial.
Our Approach
1. Keyword Surgery, Not Rebuild
We preserved the existing account (and its 18 months of conversion history) but rebuilt the keyword footprint. Broad match was killed for everything except brand. Phrase-match keywords were tightened with 120 negative keywords specific to HVAC tire-kickers ("DIY furnace", "Reddit", "salary", "school"). High-intent terms ("furnace not working Toronto", "emergency AC repair Etobicoke") were promoted into dedicated single-keyword ad groups for surgical message control.
2. Five Dedicated Landing Pages
The single "Services" page was replaced with five vertical landers: furnace repair, furnace install, AC repair, AC install, ductless/heat-pump. Each has its own pricing transparency block (a Toronto differentiator), service area map, financing pre-qualification widget, and 3-field form alongside the click-to-call. Same template, five different message-matches.
3. Performance Max with Asset Group Per Vertical
We layered a PMax campaign for new-customer acquisition with one asset group per vertical, fed by the existing brand audience as a signal. PMax brought in lower-intent top-of-funnel volume that Search alone could not reach, but with audience signals it stayed efficient.
4. Seasonality-Aware Bid Strategy
tCPA was set per vertical and adjusted monthly: $35 for furnace Nov–Feb, $48 for furnace shoulder months, $30 for AC Jun–Aug, $42 for AC shoulder. Heat pump kept at $55 because the LTV is double. The algorithm could now lean in when intent was high and pull back during dead months without manual intervention.
5. AI Booking Assistant
A bilingual AI assistant (EN-only for Toronto, but multilingual ready) was deployed on every landing page. It qualifies the issue (no heat / no AC / tune-up / install quote), confirms postal code is in-service-area, offers two next-day time slots, and pushes the booking straight to the CRM. ~31% of leads now self-book without a phone call.
Implementation Timeline
Weeks 1–2Account audit + negative KW deployment
120-item negative keyword list rolled out. Broad-match paused for non-brand. Search terms report cleaned. Quality Score baseline measured at 6.1 avg.
Weeks 3–4Five landing pages shipped
Furnace repair, furnace install, AC repair, AC install, heat pump. Each with unique pricing transparency block and financing widget.
Weeks 5–6Performance Max layered in
One asset group per vertical, brand audience as signal. Daily budget split 70% Search / 30% PMax.
Weeks 7–8tCPA per vertical + offline import
Per-vertical target CPAs configured. Weekly CRM-to-Google offline conversion import started. Smart Bidding began compressing CPL.
Weeks 9–10AI booking assistant deploy
Self-booking flow live. Self-book rate hits 28% in week 10.
Weeks 11–13Scale + Quality Score lift
Avg Quality Score climbs to 8.4. CPL closes at $28. Lead volume up 220% at same monthly spend.
Results
| Metric | Before | After (Day 90) | Change |
|---|---|---|---|
| Cost per lead | $89 | $28 | -69% |
| Qualified calls / mo | 62 | 198 | +220% |
| Self-booked appointments | 0 | 31% of leads | new channel |
| Avg Quality Score | 6.1 | 8.4 | +38% |
| ROAS at peak (Jan) | ~4x | ~14x | +250% |
| Bounce rate (landing) | 62% | 31% | -50% |
Key Tactics Other HVAC Contractors Can Copy
One landing page per vertical
Furnace, AC, heat pump, ductless all need their own page. Message-match drives Quality Score; Quality Score drives CPL.
tCPA per season
Same vertical, different tCPA by month. Don't make Smart Bidding fight Toronto winter inertia with summer numbers.
Kill broad match for non-brand
Broad match is a budget leak for HVAC. Phrase + exact with aggressive negatives delivers 2× the CPL improvement of any single bid tweak.
Pricing transparency block
Show diagnostic fee + financing options on the landing page. Toronto homeowners are price-sensitive. Hiding pricing kills conversion.
AI booking, not just chat
A chatbot that just collects names is a form with extra steps. An AI that books a time slot directly into the CRM converts 3× higher.
PMax with brand audience signal
PMax alone wastes budget. PMax with a real customer-match list as audience signal stays in-bounds and adds top-of-funnel.
Tools & Tech Stack
- Ads: Google Ads (Search + PMax, ~$5.5K/mo)
- Tracking: CallRail, GA4 enhanced conversions, GTM, weekly offline conversion import
- Landing pages: 5 vertical-specific Lead4Pro templates with pricing/financing widgets
- Automation: Lead4Pro AI booking assistant + Twilio SMS confirmations
- CRM: ServiceTitan (industry standard for HVAC)
- Reporting: Looker Studio with vertical-level CPL breakdown
Lessons Learned
- Don't rebuild — operate. The 18 months of conversion history was a moat. Pausing the account would have reset Smart Bidding learning.
- Quality Score lift is permanent. Once you climb from 6 to 8, the lower CPC sticks. It is the cheapest durable advantage in HVAC ads.
- Self-booking is the next phone. 31% of HVAC leads will book themselves if you make it easy. That is bandwidth your CSR team gets back forever.
- Toronto is seasonal — bid accordingly. Furnace tCPA in July is a different beast than in December. Treat the calendar as a strategic input.
What's Next
Year-2 plan: bring in Local Services Ads (Google Guaranteed) for the highest-intent emergency queries, expand to a 7th truck, and pilot SEO investment for "furnace repair [borough]" long-tails — the same playbook we ran on the IT Cares programmatic SEO build.
The Quality Score Math That Most Toronto HVAC Accounts Ignore
The CPL compression in this engagement came primarily from one structural lift: average Quality Score climbed from 6.1 to 8.4. Google rewards Quality Score with a CPC discount that compounds across every click in the account. A Quality Score of 8 versus 6 produces roughly 35% lower CPC on the same auction bid. That single lift was worth more than every bid tweak combined.
How Quality Score climbed: keyword–ad–landing-page message-match was tightened across every active ad group. The single "Services" landing page was replaced by five dedicated landers (furnace repair, furnace install, AC repair, AC install, heat pump). When a user searches "furnace not igniting Toronto" they now see an ad headline that matches exactly, click through to a page with the same words in the H1, and find a 3-field quote form for furnace repair — not a generic services menu. Google's relevance signals all light up green. CPC drops. CPL drops with it.
Why Performance Max Worked Here (When It Usually Doesn't)
Performance Max has a reputation for burning HVAC budgets. The trick that made it work in this engagement was treating PMax as a brand-audience-driven channel, not an open-targeting one. The customer-match audience (uploaded from 18 months of CRM data) was fed in as an audience signal, which tells Google's algorithm "people who look like these existing customers". PMax then prospected for new users with a similar profile rather than scattering budget across irrelevant inventory.
The asset group split — one per vertical — gave us spend visibility that vanilla PMax does not. We could see that furnace-install asset groups were performing well and AC-install asset groups were slow during winter, and we adjusted the budget caps accordingly. Most agencies set up PMax as a single asset group and lose all reporting granularity.
Seasonality Math — Why Bid Strategy Has to Move Monthly
HVAC demand in Toronto is bimodal: a furnace spike November to February and an AC spike June to August. The historical agency had used a single tCPA year-round, which meant the algorithm was over-paying in March (low intent) and under-spending in December (peak intent). Switching to monthly tCPA targets — pulled directly from a 36-month seasonality dataset of the account's own historical conversion data — let the algorithm lean into peak and pull back during shoulder periods. The CPL improvement attributable to seasonality alone was roughly 18%.
The Pricing Transparency Block — A Toronto-Specific Win
Toronto homeowners are price-conscious and increasingly research-savvy. Eight in ten will Google "[service] cost Toronto" before they call any provider. Hiding pricing makes you look like you have something to hide. Each of the five vertical landing pages now displays a typical price range ("AC repair: $180–$420 typical, free diagnostic with same-day repair") above the second scroll. Bounce rate on the landers dropped from 62% to 31% after the pricing blocks went live. The owner was initially nervous about transparency — he became its biggest advocate by week 8.
What the Numbers Look Like Month By Month
Behind every CPL average is a month-by-month story, and in HVAC the monthly story is the entire point. Month 1 of the engagement (early March) was a deliberately slow ramp: we let Smart Bidding accumulate clean signal from the new conversion architecture before we started pushing budget. CPL closed March at $62, down from the $89 starting baseline, on roughly 90 leads. Month 2 (April) saw the first big compression as Quality Score improvements began landing — CPL closed April at $41, on 138 leads, with the new pricing-transparency landing pages live across all five verticals. By month 3 (May), the offline conversion import had three full cycles of CRM data feeding Smart Bidding, the AI booking assistant was handling 28% of leads zero-touch, and CPL closed May at $28 on 198 qualified calls.
What did not happen is just as instructive. Total monthly ad spend did not change — it stayed flat at roughly $5,500/month across the engagement. The owner did not approve a single budget increase. All of the volume growth came from efficiency gains. This is the part that is hardest to explain to skeptical owners: you can triple lead volume without spending another dollar if the architecture below the ad is right.
What an HVAC Owner Should Audit Right Now
If you are an HVAC owner reading this and wondering whether your account has the same hidden gains, here are the five things to check yourself in under 30 minutes. One: open your Google Ads search-terms report for the last 90 days and count how many lines contain "Reddit", "salary", "school", "course", "DIY", "tutorial", "YouTube", "Home Depot" — anything that resembles a research-only query. Two: count how many distinct landing page URLs you have across all active ads. If the answer is one, you are leaving Quality Score on the table. Three: look at your average conversion-action delay (Google Ads → Tools → Attribution). If it is over 7 days, your offline conversion import is probably broken or absent. Four: pull your monthly conversion volume by hour-of-day and day-of-week and compare to your bid schedule — most accounts have mismatch worth 15–25% in CPL. Five: ask your agency or in-house manager when the last time was that they ran a Quality Score audit at the keyword level. If they cannot give a date in the last 90 days, that is itself the answer.