← All posts
Google AdsMarketing ROIMay 11, 2026Clint Research Team

How to Track Google Ads ROI for Home Service Contractors

Google Ads attribution for home services breaks at the phone call. Most contractors see a click cost but never connect it to an invoiced job. This post walks through the full attribution chain from ad click to booked revenue, with the exact tools and setup needed to calculate real ROI.

8 min read

Key takeaways

  • The attribution chain for a home service Google Ads click is: ad click, call or form, CRM lead, booked job, invoiced job. Most contractors only measure the first two steps.
  • Call tracking via CallRail or WhatConverts is required to connect a phone call back to the specific Google Ads campaign and keyword that generated it
  • A well-run Google Ads account for residential HVAC produces $3-$6 ROAS. Below $2 is a signal to audit the campaign or the close process
  • ROI requires revenue data from your CRM, not just Google's conversion count. Google counts calls as conversions; your CRM shows whether the call became a booked job
Contents
  1. 01Why Google Ads Attribution Breaks at the Phone
  2. 02Setting Up Call Tracking
  3. 03Connecting Ad Data to CRM Job Data
  4. 04Calculating Your Actual ROI
  5. 05What a Good vs. Bad Number Looks Like by Trade
  6. 06How Clint Fills the Attribution Gap
  7. 07Sources
  8. 08Frequently Asked Questions

Most home service contractors know roughly what they spend on Google Ads each month and have no idea what they earn back.

Google's dashboard shows clicks, impressions, and conversions. The conversions are usually phone calls. Whether that phone call turned into a booked job, a dispatched tech, and an invoiced $400 ticket is information that lives in your CRM, not in Google Ads. Connecting those two data sources is the work most contractors skip, and it is why "I don't know if Google Ads is working" is the most common marketing statement in home services.

This post walks through the full attribution chain and the specific tools and steps to close it. For the broader attribution model across channels, see how to track marketing attribution for home services and how to track lead source in a service CRM.

Why Google Ads Attribution Breaks at the Phone

When someone searches "emergency AC repair" and clicks your ad, Google records a click and charges you for it. If that person calls your phone number from the ad, Google may record a conversion using its call forwarding number. That is where Google's visibility ends.

Google does not know:

  • Whether the call lasted long enough to be a real lead
  • Whether the lead was quoted
  • Whether the quote converted to a booked job
  • What the job was worth when invoiced

Your CRM has all of that. The problem is the CRM record for that customer says "source: phone call" or, if your intake person guessed, "source: Google," but there is no link to the specific campaign, keyword, or ad group that generated the click.

The gap between "Google says I got 47 conversions last month" and "my CRM shows 12 jobs attributed to Google" is the number most contractors never resolve.

Text Clint: "how many jobs were attributed to Google Ads last month and what was the total invoiced value?"

Setting Up Call Tracking

Call tracking software inserts a unique forwarding phone number for each traffic source. When someone calls the number shown to Google Ads visitors, the call tracking platform records it, routes it to your real number, and logs the source.

The two platforms most commonly used in home services:

  • CallRail: strong call recording, keyword-level attribution, CRM integrations. $45-$90/month for most home service shops.
  • WhatConverts: similar feature set with slightly stronger lead management reporting. $30-$100/month.

Setup for Google Ads call tracking:

  1. Create a tracking phone number in CallRail or WhatConverts for your Google Ads traffic source.
  2. Replace the phone number shown to Google Ads visitors (either in the ad extension or on the landing page) with the tracking number.
  3. In Google Ads, set up a call extension that uses the tracking number, or use the landing page number via dynamic number insertion.
  4. Configure the call tracking platform to push call data to your CRM, tagging each call with "Lead Source = Google Ads" and the campaign name.

Once this is running, every call from a Google Ads visitor gets logged in your CRM with the source attached. The intake team does not need to ask how the customer found you for Google Ads calls. The source is already populated.

For form submissions: most home service landing pages connect to the CRM via a form integration (Gravity Forms to Jobber, Unbounce to HubSpot, etc.). In the form integration settings, add a hidden field that captures the UTM source from the URL and passes it to the lead source field in the CRM. Any Google Ads click with ?utm_source=google&utm_medium=cpc in the URL will populate the lead source field automatically.

Text Clint: "show me all leads from last month where the source is Google Ads and the job status is booked or invoiced"

Connecting Ad Data to CRM Job Data

With call tracking running and form UTMs passing through, you now have CRM jobs tagged to Google Ads. To calculate ROI, you need to pull those jobs and sum their invoice values.

The query is straightforward:

  • Filter jobs where lead_source = "Google Ads" and job_status = invoiced
  • Sum the invoice amounts for the period
  • Pull the Google Ads spend for the same period from the Google Ads dashboard

That is the core data. But there are two quality adjustments to make:

First, filter out jobs under $50 or jobs with no invoice attached. Call tracking will capture some calls that are vendor calls, wrong numbers, or existing customers who were not actually new Google Ads leads. Setting a minimum invoice threshold removes noise.

Second, distinguish between new customer revenue and return customer revenue. A customer acquired via Google Ads two years ago who finds your number in their contacts and calls is not a Google Ads conversion today, even if they call through a tracking number. Your CRM should distinguish new customers from returning customers. Count only new customers in the Google Ads revenue total for ROI purposes.

Text Clint: "what was the total invoiced revenue from new customers tagged Google Ads last month?"

Calculating Your Actual ROI

With spend and revenue in hand, the calculation is:

ROAS (return on ad spend) = Revenue attributed to Google Ads / Google Ads spend

ROI = (Revenue - Spend) / Spend

Example:

  • $4,800 Google Ads spend in April
  • 22 jobs attributed to Google Ads
  • $380 average invoice = $8,360 in attributed revenue
  • ROAS = $8,360 / $4,800 = 1.74
  • ROI = ($8,360 - $4,800) / $4,800 = 74%

A 1.74 ROAS means you earn $1.74 for every $1 spent on ads. That sounds positive, but it does not account for labor cost, overhead, or materials on those jobs. For a service business with a 50% gross margin, a 1.74 ROAS leaves roughly $0.87 in gross profit per $1 spent after subtracting job costs. That is thin.

The ROAS threshold where Google Ads is clearly working in home services: 3x or higher. Below 2x is a signal to either audit the campaign (keywords, match types, landing page conversion rate) or audit the close process (are leads from Google Ads being followed up on the same day?).

Text Clint: "what was my ROI from Google Ads last month?"

What a Good vs. Bad Number Looks Like by Trade

Google Ads ROAS benchmarks vary by trade because average ticket and close rate differ. A $2,200 roof repair lead is worth more than a $120 gutter cleaning lead, so the cost-per-lead threshold is different.

TradeExpected ROAS (well-run account)Cost per Lead Benchmark
HVAC service3x to 6x$35 to $75
Plumbing emergency4x to 8x$25 to $60
Roofing (storm/repair)5x to 10x$80 to $150
Electrical3x to 5x$40 to $80
Landscaping2x to 4x$20 to $50
Cleaning2x to 3x$15 to $35

These are benchmarks for accounts that are managed competently: tight match types, negative keyword lists, location targeting, ad schedule optimization. An unmanaged broad-match campaign will produce half these numbers or worse.

If your ROAS is below the low end of your trade's range, look at three things in order: landing page conversion rate (below 8-10% for a direct-response HVAC page is a problem), average position and impression share (if competitors are outranking you, your CPCs are higher than they need to be), and close rate on the leads generated (if calls are not converting to booked jobs, the issue is the sales process, not the ads). The sales-side companion piece is how to calculate cost per lead for a contractor.

Text Clint: "show me my cost per booked job from Google Ads this quarter vs. last quarter"

How Clint Fills the Attribution Gap

Once you connect your CRM and ad platforms to Clint, the attribution chain is closed. Clint can read job records with lead source tags, invoice values, booking dates, and completion status. When you connect your Google Ads account, Clint can pull spend by period.

You can ask:

  • "What was my Google Ads ROAS last month?"
  • "How many jobs came from Google Ads this quarter?"
  • "What is my average invoice value for Google Ads jobs vs. organic search jobs?"
  • "Which Google Ads campaigns have the lowest cost per booked job?"

The data Clint reads is CRM data: jobs that were actually invoiced, not just calls that Google counted as conversions. That is the number that matters. For LSA-specific ROI math, see Google LSA ROI in home services and HVAC stopped tracking clicks started tracking booked jobs.

Text Clint: "what was my ROI from Google Ads last month?"

Sources

Frequently Asked Questions

4 questions home service owners actually ask about this.

  • 01Do I need CallRail if Google Ads already has call tracking built in?

    Google's built-in call tracking records whether a call happened and its duration. It does not integrate with your CRM or tag the lead record. CallRail or WhatConverts provides the CRM integration that closes the loop. If you only care about call volume and not about which calls became booked jobs, Google's native tracking is enough. If you want revenue-level attribution, you need a third-party call tracking tool.

  • 02What if my intake team sometimes tags the source and sometimes does not?

    This is the most common data quality problem in home service Google Ads attribution. The fix is to automate as much source tagging as possible: call tracking auto-tags Google Ads calls, UTM parameters auto-tag form fills. The only remaining gap is calls that come through your main phone number instead of the tracking number. Those will always require intake discipline. Over time, move toward dynamic number insertion on your website so every channel gets a tracked number.

  • 03How do I know if the problem is my ads or my close rate?

    Pull the number of calls or form fills from Google Ads (from your call tracking platform) and the number of those calls that became booked jobs (from your CRM). If the call volume is reasonable and the booked job rate is below 30%, the issue is in the sales process. If the call volume is very low relative to your spend, the issue is in the campaign. Most home service businesses have close rate problems, not volume problems.

  • 04What is a realistic first-month budget for Google Ads in HVAC?

    $1,500-$2,500/month to generate meaningful data. Below $1,000/month in a competitive HVAC market, you will get too few clicks to know if the campaign is working. Run for 60 days before drawing conclusions.

See Clint in action

Clint is the pre-built AI for home service shops. Connect your CRM, email, and phone system in minutes and the agents run on your real data.