Skip to main content
← BlogGOOGLE ADS11 MIN READ

Home Services Ad Tracking: HVAC, Roofing and Plumbing Leads That Actually Close

Track calls first, split LSA from Search, and feed booked-job values back to Google Ads so bidding chases replacements, not tune-ups.

Ariful IslamAriful IslamFounder · computer engineer ·
inX

An HVAC lead in a competitive metro can cost $200 before anyone picks up the phone, and the job on the other end might be worth $99 or $15,000. Yet most contractors I talk to judge their ads on one signal: the phone rang. That's how you end up scaling the campaign that books tune-ups while starving the one that books replacements.

Why does "the phone rang" fail as a measurement strategy?

Because it counts every ring the same: the $18k roof replacement, the solicitor, the guy three counties over, the existing customer calling about an invoice. Ring volume tells you the phone works. It doesn't tell you which campaign or keyword produced a caller who became a booked job.

The spread is brutal. A plumbing campaign can produce 40 calls where 12 are spam, 15 are small drain jobs, and 2 are repipes worth more than everything else combined. Call count tells you none of that.

How do you track phone calls from HVAC, roofing and plumbing ads?

At three points: calls from the ad itself, calls from your website after a click, and call length as your junk filter. This vertical is phone-dominant. Someone with water on the floor doesn't fill out a form and wait.

  1. Call assets and call ads. Turn on Google forwarding numbers so Google swaps in a trackable number when someone taps to call straight from the ad. You get campaign, keyword, and call duration without touching your website.
  2. Calls from the website. This is where most contractors go blind. Use a call tracking platform (CallRail-class) with dynamic number insertion: the number on your site swaps per visitor, so a call two hours after the click still ties back to the ad, the keyword, and the Google click ID.
  3. Call length as the junk filter. Don't count every connected call. Set a minimum duration — I usually start around 60 to 90 seconds — so wrong numbers and robocalls stop polluting the data Smart Bidding learns from. A real call about a dead furnace doesn't end in 20 seconds.

Should you track forms and online booking too?

Yes, but as secondary conversions worth less than a qualified call. Track form submits on the actual submission event, not button clicks, and fire a conversion on booking confirmation if you use an online scheduler. The gotcha I see constantly: multi-step quote forms where only step one is tracked, so you optimize for people who type a zip code and leave.

Whatever the lead path, capture the gclid into a hidden field or cookie and store it on the lead record. That one habit makes everything below possible.

How is Local Services Ads tracking different from regular Search?

Local Services Ads live in a separate world: you pay per lead instead of per click, leads land in the LSA dashboard with their own reporting, and none of it flows through your normal Google Ads conversion tracking. Three things matter in practice:

  • Use the dispute flow. LSA lets you dispute junk leads — spam, wrong service area, solicitors — for credit. Skip this and you quietly overpay every month.
  • Work your lead statuses. Mark leads as booked or archived inside LSA. A clean lead inbox is the only way your per-lead cost numbers mean anything.
  • Keep the CPL math separate. An LSA "lead" and a Search "conversion" are different units. Compare channels on cost per booked job — which your CRM can tell you and neither ad platform can on its own.
Two columns contrasting ring-volume measurement with booked-job measurement across spam calls, tune-ups versus replacements, bidding strategy and LSA comparison.
When every conversion is worth one, Smart Bidding fills the calendar with the jobs that are easiest to win.
Counting callsCounting booked jobs
40 calls, 12 of them spamCall length filters the junk out
$99 tune-up counts as a $15,000 jobReal job value on every conversion
Smart Bidding hunts cheap callsTarget ROAS instead of Target CPA
LSA leads mixed in with SearchLSA judged on cost per booked job
Ring volume, never booked jobsThe CRM outcome is the truth

Why do job values belong in your conversion tracking?

Because a $99 tune-up lead and a $15,000 replacement lead cost about the same to generate and are completely different businesses. If every conversion is worth "1," Smart Bidding will happily fill your calendar with tune-ups — they're easier to win, so the algorithm sees equally good outcomes at a cheaper cost.

The fix is offline conversion tracking with values:

  1. Store the click ID (and the caller's phone/email) on every lead in your CRM.
  2. When the job books, upload a "Booked job" conversion tied to that original click, with the actual or estimated job value.
  3. Switch from Target CPA to Target ROAS once enough valued conversions exist.

Now the algorithm isn't hunting phone calls. It's hunting the searches that historically turned into $12k installs. I've watched this single change flip which campaigns "look good": the cheap-lead campaign falls apart, and the expensive one turns out to be the profitable one.

Flow from an ad click storing a gclid, through a tracked call and a junk-length filter, to the job booking in the CRM and uploading as a valued offline conversion.
The loop usually dies at intake — if the CSR never attaches the click ID, there is nothing to upload later.
  1. Ad click — gclid captured and stored on the lead
  2. Phone rings — Forwarding number or DNI keeps the click ID
  3. Call under 60s — Robocalls and wrong numbers filtered out
  4. Job books in the CRM — ServiceTitan, Jobber or Housecall Pro
  5. Offline conversion — Booked job uploaded with its real value

How do you get booked jobs from ServiceTitan, Jobber or Housecall Pro back into Google Ads?

Your field-service CRM is the source of truth for outcomes: it knows which calls became estimates, which became booked jobs, and what each was worth. The tracking job is closing that loop — lead arrives with a click ID attached, the CRM records the outcome, and the outcome plus value goes back to Google Ads as an offline conversion.

ServiceTitan, Jobber and Housecall Pro all sit in this category, and their marketing features change often enough that I won't promise specifics — check your CRM's current native Google Ads / offline-conversion integration before building a custom pipe. The pattern doesn't change: if a native integration passes click IDs and job values cleanly, use it. If not, a webhook from the CRM to a small server endpoint that calls the Google Ads upload API does the job.

Why does last month's conversion data mislead you?

Because home services demand is weather and season, and bidding algorithms learn from recent history. A heat wave makes every HVAC campaign look brilliant; the first cool week makes the same campaigns look broken. Roofing spikes after storms. Plumbing spikes with freezes.

So compare year over year, not month over month, and don't panic-restructure in the first slow week of a shoulder season. Google Ads has seasonality adjustments for short, predictable spikes, but the bigger discipline is knowing that "conversions dropped 40% versus last month" in October usually describes the weather, not your ads. Booked-job revenue by season tells you what to expect next year. Call counts don't.

Should you track speed-to-lead?

Yes, and most contractors don't measure it at all. The customer calls three companies and books with whoever answers. Log two timestamps on every lead — created and first contact — and report the gap weekly, along with missed and abandoned calls from your call tracking platform. I've seen ad accounts get blamed for what was actually an after-hours answering problem.

Why does first-party server-side tracking hold this whole system together?

Because every loop above depends on one fragile thing: connecting a click to a call, then to a CRM record — and browser-only tracking keeps dropping that connection. If you've never heard the term: normally, tracking scripts run in your visitor's browser and send data straight to Google, which means ad blockers can eat them and Safari's privacy protections cut cookie lifetimes short, so the click-to-lead thread snaps. Server-side tracking adds a middle step you own — events go from your website to your own tagging server (built on Google Tag Manager, on your own subdomain) and from there to the ad platforms.

For a home services company that changes four things. Click IDs and lead data get captured on your first-party domain, so the roofing prospect who clicks Tuesday and calls Friday still ties back to the ad instead of showing up as a mystery call. Signal lost to ad blockers and iOS privacy limits gets recovered — with $200 leads, every dropped conversion is real money misallocating your budget. Your server becomes the single source of truth feeding Google Ads, GA4, and your offline uploads, so the numbers finally agree. And you control exactly what gets shared, per the visitor's consent, instead of every script on the page freelancing with customer phone numbers.

Frequently asked questions

How do I track phone calls from Google Ads for my HVAC business?

Turn on Google forwarding numbers for call assets, and add a call tracking platform with dynamic number insertion for calls from your website. Set a minimum call duration (60-90 seconds) so junk calls don't count.

Do Local Services Ads leads show up in Google Ads conversion tracking?

No. LSA is pay-per-lead with its own dashboard and reporting. Track it as its own channel and compare it to Search on cost per booked job, not cost per lead.

Can I dispute bad leads from Local Services Ads?

Yes. LSA has a dispute flow for junk leads like spam, solicitors, and out-of-area requests, and valid disputes are credited. Review weekly — skipping this means overpaying.

What are offline conversions in Google Ads for contractors?

Conversions you upload after the fact: when a lead becomes a booked job in your CRM, you send that outcome and its dollar value back to Google Ads tied to the original click. Smart Bidding then optimizes toward searches that produce big jobs, not cheap calls.

Why does my HVAC campaign perform differently every month?

Seasonality. Demand swings with weather, so month-over-month comparisons mostly measure the forecast. Compare year over year and judge campaigns on booked-job value per season.

Is call length a reliable way to qualify leads?

It's a good first filter — short calls are almost never jobs — but not proof. The reliable qualifier is the outcome your CRM records, fed back to the ad platform as an offline conversion.

Do home services companies need server-side tracking?

If you're spending real money on ads, yes. Every conversion lost to ad blockers and browser privacy limits means Smart Bidding optimizes on incomplete data. A first-party server-side setup recovers that signal and ties calls and CRM outcomes back to clicks.

  • home services
  • local
  • lead gen
  • calls
SETUP GUIDES

Guides for this topic

How accurate is your conversion tracking?

PLATFORM-REPORTEDconversionsdivided byBACKENDreal orders or leadsequalsaccuracy
TRY IT · YOUR NUMBERS
68%Broken. Something is missing entirely. Worth a free audit.
Reading guides because something is broken?Book 30 minutes with Ariful. We'll find it on the call and send a written fix list within 24 hours.
Get my free audit →
Ariful Islam
WRITTEN BYAriful IslamFounder of Tracking Consulting and a computer engineer (Diploma, BSc, MSc in CSE). 300+ clients and 1,000+ tracking projects since 2019.
About Ariful →
FREE · 30-MIN CALL · WRITTEN AUDIT IN 24H

Want us to check your accuracy for you?

We look at your setup together on the call. Within 24 hours you get a written audit and a prioritized fix list you can hand to any developer. Not a fit? We'll say so.