HVAC marketing attribution for booked jobs, not calls

HVAC marketing attribution for booked jobs, not calls: count jobs in ServiceTitan, Jobber or Housecall Pro, net out the weather, and judge LSA on real work.

By The Countlift team · · 9 min read

HVAC marketing attribution should end at a booked job, not a phone call. The honest way to get there is to count booked jobs by branch or ZIP from your field-service software, then compare areas where spend changed with matched areas where it didn’t. The gap is what the marketing added. Calls are a useful early signal along the way, nothing more.

Most HVAC marketing reports stop at calls because calls are easy to count and every channel produces them. That’s exactly the problem. A channel can double your calls and barely move the dispatch board.

Why calls are the wrong finish line for HVAC attribution

A tracked call tells you the phone rang. It doesn’t tell you who was on the other end. In a typical week that includes existing customers checking on a part, members booking their tune-up, warranty callbacks, price shoppers comparing three companies, vendors and plain spam. Some of those calls become jobs. Many never will.

And the definition of a “lead” keeps moving under you.

Oct 1, 2026
Google Local Services Ads began charging for business-hours missed calls when the caller stays on the line for more than 20 seconds.Source: Google Local Services Ads Help, 2026

Whatever you think of the change, it means an LSA lead this winter is not the same thing as an LSA lead last winter, so cost per lead can’t be compared across the two. A booked job is a booked job in both years. Your field-service software has been counting them consistently all along.

Normal calls book at 41 percent; the campaign's extra calls booked at 19 percentIllustrative. Of 5,750 normal calls (grey), 2,380 booked (41 percent) and 2,250 completed. Of 1,150 extra calls from the campaign (green), 220 booked (19 percent) and 200 completed.NORMAL CALLS5,750 calls the twin expectedCalls5,750100%Booked2,38041.4%Completed2,25039.1%EXTRA CALLS FROM THE CAMPAIGN1,150 calls above the twinCalls1,150100%Booked22019.1%Completed20017.4%SHARE OF CALLS · 6 WEEKS · 3 TEST BRANCHESILLUSTRATIVE
Illustrative. Normal calls and the extra calls a campaign added, from the worked example below. The extra calls booked at less than half the usual rate.

Weather is the biggest channel you don’t buy

Nothing moves HVAC demand like the first 98-degree week of June or the first hard freeze. Cooling is close to universal in American homes, so heat drives demand almost everywhere at once.

88%
of U.S. households use air conditioning.Source: U.S. Energy Information Administration, Residential Energy Consumption Survey 2020

That is why before-and-after comparisons fail so badly in this trade. Any campaign that starts the week before a heat wave looks like genius. The fix is a comparison group that lives through the same weather: branches or ZIPs in the same climate, matched on how their booked jobs moved through last summer and last winter.

A heat wave lifts test and comparison branches alike, and full crews close the gapIllustrative. Weekly booked jobs at three test branches (green) and their twin (grey dashed) over 14 weeks. A six-week campaign runs in weeks 5 to 10. A heat wave in weeks 7 and 8 (amber band) lifts both lines to about 450 to 460 jobs, where crew capacity caps the test branches, so the gap nearly disappears. Before and after the heat, the test branches run 40 to 60 jobs a week above the twin.WEEKLY BOOKED JOBS · 3 TEST BRANCHESILLUSTRATIVETest branchesTwin from 6 steady-spend branchesHeat wave300350400450500HEAT WAVECAMPAIGN · WEEKS 5–10Crew capacity ≈ 460 jobs / week+40–45 / wk+60 / wkCrews full: gap closes151014WEEKS →
Illustrative. Weekly booked jobs at three test branches and their twin. A heat wave lifts both. During the heat, crews are full and the gap closes; the ads only show up when there is capacity to book.

Notice the second thing in that chart. When every tech is booked through Friday, more ads can’t create more jobs; they create a longer callback list. In peak weeks, the measured lift drops towards zero for a good reason. Plan tests for shoulder weeks, when the schedule has room, or the result will tell you the ads did nothing.

What to export from ServiceTitan, Jobber or Housecall Pro

All three systems can export jobs with a branch (or business unit), a customer ZIP, dates and a job type. You want a count per branch or ZIP per day, split a few useful ways. No customer names, street addresses or phone numbers are needed.

Fields for a booked-jobs export, and what to do with each
FieldUse it toWatch out for
Branch or business unitAssign each job to a locationJobs moved between branches for dispatch reasons
Customer ZIPMeasure by service area, and run ZIP-level testsCommercial jobs billed to a head-office ZIP
Booked date and completed dateBooked for the early read, completed for the final oneJobs rescheduled into a later week
Job typeSplit repair, replacement estimate and maintenanceMaintenance-agreement visits you scheduled yourself
New or existing customerSeparate demand you created from demand you already hadFields left blank by busy CSRs
Status and invoice totalDrop cancellations; value completed workZero-dollar warranty callbacks

Leave maintenance-agreement visits out of the outcome. Your dispatchers booked those from the membership list, not from an ad. Replacement estimates deserve their own series: they are rare, valuable and slow, so they drown in the noise of repair calls if you mix them together.

Measuring LSA, search and radio against booked jobs

Each channel buys geography differently, and that decides how you test it.

  • Local Services Ads. You set service areas and a budget. Raise or pause LSA in some branches’ areas while holding others steady, then compare booked jobs. Judge it on cost per extra booked job, not on the charged-lead count Google shows you. Our guide on whether Google Local Services Ads are worth it goes deeper.
  • Search and Performance Max. Target by radius or ZIP, which makes ZIP-level holdouts practical. Watch for branded search: it intercepts customers who already chose you, which is great for cost per call and weak for extra jobs.
  • Radio and TV. Bought by metro, so the unit of comparison is the branch or the whole market. You need several branches across several metros to read it. Streaming audio can be targeted by ZIP, which is easier to test.
  • Direct mail and door hangers. Already ZIP-based. Mail to half the matched ZIPs, hold back the other half, and count booked jobs in both.

Worked example: calls up 20%, booked jobs up 9% (illustrative)

A nine-branch HVAC company adds $3,000 a week of streaming audio and extra LSA budget at three branches for six early-summer weeks: $18,000 in total. The other six branches keep their usual spend. Each test branch normally books about 120 jobs a week.

Illustrative. Six-week totals for the three test branches; the twin is built from the six steady-spend branches
MetricTest branchesTwin (expected)DifferenceCost per extra
Tracked calls6,9005,750+1,150 (+20%)$15.65
Booked jobs2,6002,380+220 (+9.2%)$81.82
Completed jobs2,4502,250+200 (+8.9%)$90.00
  1. The call story. $18,000 ÷ 1,150 extra calls = $15.65 a call. It looks cheap.
  2. The booking rate. Normal calls book at 2,380 ÷ 5,750 ≈ 41%. The extra calls booked at 220 ÷ 1,150 ≈ 19%. The campaign reached people who were more likely to be shopping around.
  3. The job story. $18,000 ÷ 220 = $81.82 per extra booked job, and $90 per extra completed job.
  4. The value. If a completed repair averages $450 and about half is left after parts and tech labor (use your own numbers), each extra job is worth about $225. 200 × $225 = $45,000 against $18,000 of spend.

So the campaign paid. But a manager who planned next summer on $15.65 calls and a 41% booking rate would expect about 470 extra jobs (1,150 × 0.41) and get fewer than half that. Budget on the number from the dispatch board.

One branch? Use a ZIP-level test instead

A single-branch operator has no second market to compare against. What you do have is a service area made of ZIP codes, and a job history that says how many jobs each one books in a normal week. That’s enough to build a test.

  1. Pair up ZIPs that booked similar jobs per week over the past year, adjusted for households.
  2. In each pair, randomly pick one to get the campaign and one to hold out.
  3. Leave out ZIPs at the edge of your drive time and any with a big new subdivision coming online.
  4. Run 8–12 weeks in shoulder season, then compare booked jobs in test ZIPs with holdout ZIPs over the same weeks.
A ZIP-level test for a single HVAC branchIllustrative. The branch's service area is a grid of ZIP codes. Matched pairs of ZIPs are split at random into test ZIPs in green, where the campaign runs, and holdout ZIPs in amber hatch, where it doesn't. ZIPs at the edge of drive time or with large new developments are left out of both groups (grey dashed).ONE BRANCH · SERVICE AREA BY ZIPZ01Z02Z03Z04Z05Z06Z07Z08Z09Z10Z11Z12SHOPZ13Z14Z15Z16Z17Z18Z19Z20Z21Z22Z23Z24Z25CountliftZIP test planSAMPLE1Pair ZIPs on last year’sbooked jobs per household2Flip a coin in each pairfor test vs. holdout3Run 8–12 shoulder weeks,compare booked jobsEARLY ACCESS IN COUNTLIFTTest ZIPHoldout ZIPLeft out
Illustrative. A single-branch service area split into matched test and holdout ZIPs, with edge-of-range and fast-growing ZIPs left out of both.

Both halves live through the same heat, the same holidays and the same competitor’s billboard, so the gap is the campaign. Spillover is the main risk: radio and broad social will reach holdout ZIPs too, which makes ZIP tests best suited to channels that target precisely, like search, LSA service areas, streaming audio and mail. If you can’t split by ZIP, the measuring ads for a single location guide covers alternating on and off weeks instead.

Common mistakes in HVAC marketing attribution

  • Optimizing to cost per call. The worked example’s extra calls booked at half the normal rate.
  • Crediting the weather. Comparing June with May, or this heat wave with last year’s mild week.
  • Testing at peak. When crews are full, ads can’t add jobs. The test will read zero.
  • Counting maintenance visits. Membership tune-ups you scheduled yourself aren’t marketing results.
  • Mixing replacements with repairs. Track replacement estimates and sold systems as their own series.
  • Trusting “how did you hear about us?” CSR-entered lead sources are useful color, but people credit whatever they saw last, often Google.
  • Comparing LSA leads across years. The charging rules changed in October 2026. Booked jobs didn’t.

Questions people ask about HVAC attribution

How do I track which marketing brings in HVAC jobs?

Export booked jobs by branch or ZIP from your field-service software and line them up with spend by area. Then compare areas where spend changed with matched areas where it didn’t, over the same weeks. The difference in booked jobs is what the marketing added. Call tracking and lead-source fields help, but they can’t separate new demand from existing customers.

What is a good cost per booked job for HVAC?

It depends on your ticket size, margins and job mix, so set it from your own numbers. Take the average value of a completed job after parts and labor, decide the return you need, and that gives a ceiling. Then judge channels on cost per extra booked job, measured against a comparison group, not on cost per call.

Are Google Local Services Ads worth it for HVAC?

Sometimes, and you can find out. Raise or pause LSA in some service areas while holding others steady, and compare booked jobs over six to eight weeks. Judge it on cost per extra booked job. Since October 2026 Google charges for some missed calls, so charged-lead counts are a weaker guide than they used to be.

How do I separate weather from marketing results?

Compare against branches or ZIPs that experienced the same weather. A heat wave lifts both the test and comparison areas, so it cancels out of the gap. Avoid comparing a campaign period with the weeks before it, and avoid testing during peak weeks when crews are fully booked and can’t take more jobs.

Can a single-location HVAC company measure ads?

Yes, with ZIP codes. Split your service area into matched pairs of ZIPs, run the campaign in one of each pair, and compare booked jobs. It works best for channels that target precisely, such as search, LSA service areas, streaming audio and mail. Countlift offers ZIP-level tests to single-location service businesses in early access.

Your dispatch board is the most honest marketing report you have. Count booked jobs, compare like with like, and let calls go back to being what they are: a sign the phone rang.

Next step

Put your own locations through the comparison.

Your first location report is free at any size. Bring a CSV of weekly sales and spend, or connect your POS and ad accounts.

Written by The Countlift team at First Byte in The Woodlands, Texas. Questions or corrections? Email hello@countlift.com.

Keep reading

IndustriesMed spa marketing ROI by location: count booked treatments, not DMsMed spa marketing ROI by location: count treatments from Zenoti, Boulevard or Mindbody, net out promo pull-forward, and fund the locations that grow.10 min read · Read guide →IndustriesRestaurant marketing attribution by location: count covers, not clicksRestaurant marketing attribution by location, done with covers from Toast or Square: separate ad lift from LTOs, delivery and weather at every store you run.11 min read · Read guide →IndustriesRetail store marketing attribution: how to measure in-store sales lift by storeRetail store marketing attribution that holds up: measure in-store sales lift by store from POS data so retail media, CTV and circulars stop double-counting.10 min read · Read guide →MethodologyHow MarketTwin™ worksThe method behind every Countlift read: comparable locations, twin markets, intervals and placebo checks.Read the method →

See which of your markets your ads actually move.

Your first location report is free at any size. No card, no customer records.