Toronto HVAC Contractor: $89 → $28 CPL with AI Ads | Case Study
Case Study — HVAC · Toronto · 90 days

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.

📞 CPL $89 → $28 🔥 furnace + AC ramps 🇨🇦 GTA-only geo ⚡ 90 days
❄️ $89 → $28 CPL Toronto HVAC 🔥 furnace + AC seasonality 📞 +220% qualified calls 🤖 AI booking assistant 💰 65% lower CPA 📈 14× ROAS at peak ❄️ $89 → $28 CPL Toronto HVAC 🔥 furnace + AC seasonality 📞 +220% qualified calls 🤖 AI booking assistant 💰 65% lower CPA 📈 14× ROAS at peak
Google Ads Performance Max Landing Page Smart Bidding Audience Layering AI Booking GA4 Quality Score Google Ads Performance Max Landing Page Smart Bidding Audience Layering AI Booking GA4 Quality Score
Home / Case Studies / HVAC — Toronto, ON
TL;DR — Real Numbers Inside

Industry: HVAC  |  Location: Toronto, ON  |  Services used: Google Ads · PMax · Smart Bidding · AI Booking

$89Before
$28After
-69% CPLGrowth
90 daysTimeline

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

Cost-Per-Lead (CAD) $89 Before $28 After
Before vs After — cost-per-lead (cad).
MetricBeforeAfter (Day 90)Change
Cost per lead$89$28-69%
Qualified calls / mo62198+220%
Self-booked appointments031% of leadsnew channel
Avg Quality Score6.18.4+38%
ROAS at peak (Jan)~4x~14x+250%
Bounce rate (landing)62%31%-50%
Monthly CPL Trajectory $80$60$40$19 $89$62$41$28 M0M1M2M3
Trend over the engagement period.
-69%
Cost-per-lead reduction in 90 days. The owner did not change his brand, his trucks, or his pricing — only the ad architecture and the funnel below the click.

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

  1. Don't rebuild — operate. The 18 months of conversion history was a moat. Pausing the account would have reset Smart Bidding learning.
  2. 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.
  3. 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.
  4. 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.

HVAC Marketing Google Ads Toronto Smart Bidding Performance Max AI Booking Quality Score

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.

"My CFO doesn't usually pay attention to ads. After month two she asked me what we changed. The numbers were not in line with the previous agency."— Owner, Toronto HVAC contractor

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.

Frequently Asked Questions

Why not just delete the old account and start fresh?
The old account had 18 months of Smart Bidding learning embedded in it. Deleting it would have forced Google's algorithm to re-learn from zero — typically a 4–6 week period of inflated CPL. We preserved the account history and rebuilt the campaigns inside it, which kept Smart Bidding hot during the transition.
How does Lead4Pro decide tCPA per vertical?
We pull lifetime-value (LTV) data from the CRM by service line, divide by historical lead-to-customer conversion rate, and apply the agency's margin target. For this client: furnace install LTV $4,200 × 22% close rate × 40% target margin = $370 contribution; tCPA gets set at ~25% of contribution = $70. We repeat per vertical and per season.
Will the chatbot replace my CSR team?
No. It removes the bandwidth-eating jobs (after-hours bookings, simple FAQ requests) so the CSR team can focus on the high-touch closes — system replacements, custom quotes, financing conversations. Most clients see their CSR team become more productive, not redundant.
How long until I see CPL drop after engagement starts?
First measurable drop usually within 30 days. Full compression typically takes 60–90 days as Smart Bidding accumulates enough clean conversion signal. This client saw CPL $89 → $62 in 30 days, → $41 in 60 days, → $28 in 90 days.
What is Local Services Ads (LSA) and why isn't it in the engagement?
LSA is Google's verified-business ad unit that sits above standard Search ads. It pays per qualified lead, not per click. We always plan to layer LSA in once the underlying Search account is healthy, but it requires license verification and background checks that take 4–8 weeks. This client is in verification now.

Want similar results for your HVAC business?

Book a free 30-minute strategy call. We will map your funnel, identify the biggest leak, and show you exactly how Lead4Pro AI can scale your leads — no fluff, no pressure.

⚡ Reply < 2h 🔒 Zero obligation 📈 ROI roadmap included