Why raw Google Ads numbers lie to contractors
Open the Google Ads dashboard and it will happily show you clicks, impressions, cost per click, and click-through rate. For a home-service contractor, almost none of that is the business. Your business is a phone that rings and a job that lands on the calendar. The dashboard, out of the box, has no idea whether any click ever became a phone call, let alone a booked job. It is measuring the doorway, not the sale.
Here is the gap in plain terms. A homeowner searches "AC not cooling," taps your ad, and calls from the search results page. Google counts the click. But the call happened on your phone, in your world, and unless you told Google about it, the ad account never learns that click turned into a lead. So Google optimizes toward clicks it can see, which may be the cheap, low-intent ones, and away from the expensive clicks that actually call. You are steering the account blind and letting the algorithm steer it wrong.
It gets worse at the money end. Even if you track calls, a call is still just a lead. The job might close for $9,000 or it might be a wrong number, and a raw conversion count treats both the same. Two campaigns can show identical cost per lead while one books five-figure jobs and the other books tire-kickers. On clicks alone, they look like twins. On booked revenue, one is a machine and one is a drain.
This is the trap generic agencies live in, because clicks are easy to report and jobs are hard. They hand you a dashboard full of green arrows, the arrows point at metrics that do not touch your bank account, and everyone nods. Meanwhile the one question you actually asked, "is this making me money," never gets answered. A rising click-through rate feels like progress on a monthly call, but a truck does not run on click-through rate, and a payroll does not clear on impression share. The rest of this guide is how you answer the real question yourself, with numbers you can trust because you wired them, tied to jobs you can point to on the calendar.
Call tracking numbers: the piece most contractors skip
The foundation of the whole thing is a call-tracking number. It is a phone number that forwards straight to your real line, so the homeowner never knows the difference, but every call through it gets logged: which ad, which keyword, what time, how long, and often a recording. Without it, a call is a ghost. It rang, someone talked, and you have no idea where it came from. With it, every ring has a paper trail.
There are two ways contractors do this, and the difference matters.
- One static number per source. You assign a single tracking number to your Google Ads landing page and another to your website's organic traffic. Cheap and simple. It tells you the call came from paid, but not which campaign or keyword. Fine for a small account, thin for a real one.
- Dynamic number insertion (DNI). A small script swaps the number on your landing page depending on how the visitor arrived, so a call can be traced back to the exact campaign, ad group, and often the keyword and Google click ID. This is what lets you see that "emergency plumber" books jobs and "cheap plumber" books nothing.
Both feed the same goal: getting the call event out of your world and back into the ad account as data. Google Ads also has its own free call reporting through Google forwarding numbers, which counts calls from your ads and call assets, and for a lean setup that alone is a real upgrade over nothing. A dedicated call-tracking platform layers on recordings, keyword-level detail, and the ability to mark which calls actually booked.
One honest caution: do not scatter tracking numbers across your Google Business Profile, your directories, and your citations. Your name, address, and phone need to stay consistent everywhere for local ranking, so tracking numbers belong on your ads and ad landing pages, not smeared across your listings. Keeping tracking where it belongs and your real number where it belongs is a detail worth getting right the first time.
Wiring calls back into Google Ads as conversions
Tracking a call in a separate platform is step one. The step that makes Google Ads actually work for you is feeding those calls back in as conversions, so the account learns which clicks lead to phone calls and optimizes toward them. A tracked call that Google never hears about improves your reports but not your results. You want both.
There are a few conversion types worth knowing, because they cover different ways a homeowner reaches you:
| Conversion type | What it captures | Set it up when |
|---|---|---|
| Calls from ads | Taps on the call asset or a call-only ad | Always; this is the baseline for phone-driven trades |
| Calls from a website | Homeowner lands on your page, then calls the number on it | You run Search ads to a landing page |
| Imported calls (offline) | Calls a tracking platform marks as qualified or booked | You want quality, not just call volume, fed to Google |
| Form submissions | The after-hours homeowner who fills out a form instead | Your landing page has a form (most should) |
The one most contractors miss is imported (offline) conversions. Instead of telling Google "a call happened," you tell it "a call happened and it was a real, qualified lead that booked." You do that by passing the Google click ID (GCLID) through your tracking platform and importing the outcome back. Now the account is not chasing any call, it is chasing the calls that turn into work. That single change quietly reshapes where your budget goes, because Smart Bidding starts buying the clicks that book jobs instead of the clicks that just ring.
Set a minimum call length as a conversion threshold too, so a fifteen-second wrong number does not count as a lead. A call under, say, sixty seconds is usually not a real conversation. Filtering those out keeps your conversion data honest and stops Google from optimizing toward noise. None of this is exotic, but it is fiddly to wire correctly, and most accounts we inherit have it half-done or not at all, which is why their numbers never made sense.
From tracked call to booked job: closing the loop
A tracked call still is not money. To measure real ROI you have to connect the call to what happened after it: did it book, what was the job worth, did the homeowner show and pay. That last mile, from ring to revenue, is where the honest ROI number finally appears, and it is the mile most contractors never close because it lives partly in the ad account and partly in the shop.
The mechanics are not complicated, they just require discipline:
- Every tracked call gets an outcome. Someone (a CSR, a dispatcher, you) marks each call as booked, quote-only, wrong number, or spam. This is fifteen seconds per call and it is the whole game. Skip it and the loop stays open forever.
- Booked jobs get a value. When the job closes, the ticket value goes back against that call. Now the campaign that generated it has real revenue attached, not a lead count.
- The value flows back to Google. Through offline conversion import or value-based bidding, Google learns not just that a call booked, but roughly what it was worth, so it can bid harder for the calls that book big.
Do this for ninety days and the fog burns off. You stop asking "are Google Ads worth it" in the abstract and start reading a ledger: this campaign spent $2,400 last month and booked $18,000 in work, this one spent $900 and booked $1,100 and needs fixing or killing. That is not a guess or a benchmark from someone else's blog. That is your account, your trade, your market, measured.
The reason this loop stays open in most shops is not technical, it is human. The tracking is running, but nobody marks call outcomes, so the data ends at "a call happened" and the revenue side is a black box. The fix is a habit, not a tool: outcomes get logged the same day, every day. Wire the technology once, build the habit, and you own a measurement system generic dashboards cannot match, because it reaches all the way into your calendar.
The ROI math that tells you to scale, fix, or kill
Once calls tie to jobs and jobs tie to revenue, the ROI math is grade-school arithmetic, and it hands you a decision every month. You are not comparing your cost per lead to a national average. You are comparing what a campaign spent to what it booked, in your shop, with your close rate baked in.
Three numbers do the work. Ad spend for the period. Revenue from jobs that traced back to those ads. And your margin on that revenue, because top-line booked dollars are not profit. Run it and you land in one of three buckets:
| What the numbers say | What it means | What you do |
|---|---|---|
| Booked profit well above spend, room to grow | The campaign is a machine that is under-fed | Scale the budget until returns flatten |
| Roughly break-even after margin | Something in the build or the phone side is leaking | Fix negatives, landing page, or answer rate before touching budget |
| Spend consistently beats booked profit | Wrong keywords, wrong trade fit, or a phone nobody answers | Restructure, or kill that segment and say so |
Here is the discipline that makes it real. Do the math per campaign and per keyword theme, not for the account as a whole. An account can look break-even in total while one keyword group prints money and another quietly bleeds. Blended numbers hide exactly the thing you need to see. Split it, and the winners and losers separate themselves, and the budget decision becomes obvious instead of emotional.
Watch the lag, too. High-ticket trades like roofing, remodels, and solar have long sales cycles, so a call in January might book in March. If you judge that campaign on the same-month numbers you will kill something that was working, because the revenue had not landed yet. Measure booked jobs against the month the call came in, not the month the money arrived, and give considered trades a full cycle before you rule. A shop that runs this math every month never panics about a headline metric, because it is reading the only scoreboard that matters: profit in, against dollars out.
What a clean tracking setup looks like, start to finish
Pulling it together, a contractor account that measures ROI with no guessing has a specific shape. None of the pieces are rare. What is rare is having all of them wired at once, feeding each other, and actually maintained. Here is the full stack, in the order you build it.
- Call tracking on every paid path. A tracking number on the landing page (dynamic number insertion where the account is big enough), plus Google's own call reporting on ad call assets. Every ad-driven call is logged, not guessed.
- Conversions wired back to Google Ads. Calls from ads, calls from the website, and form fills all reporting as conversions, with a minimum call length so junk taps do not count.
- Offline conversion import running. The GCLID follows the call, booked outcomes flow back, and Smart Bidding learns to chase jobs, not noise. This is the piece that separates a real setup from a pretty one.
- Outcome logging as a daily habit. Every tracked call marked booked, quote, or junk the same day, with job value attached when it closes. The technology is one-time; the habit is forever.
- A monthly ROI read, split by segment. Spend against booked profit, per campaign and per keyword theme, with sales-cycle lag accounted for, ending in a plain scale-fix-kill decision.
Notice what is not on this list: vanity clicks, impression share bragging, and any metric you cannot trace to a job. That is deliberate. Since 2008 the trade behind this brand has run local-service accounts, and the accounts that make money are the ones wired to booked jobs, not the ones with the prettiest dashboard. We speak dispatch, service area, and ticket size because that is where the ROI actually lives.
If your current account cannot answer "which ad booked which job last month" in one sentence, it is not tracked, it is just running. The good news is this is fixable, and it is a one-time build plus a small daily habit, not a mystery. Wire it once and you will never again wonder whether paid is working, because the ledger will tell you, in your own numbers, every single month.