Most contractors can tell you exactly how many leads came in last month. Almost none can tell you which campaign paid for the trucks. That gap is the single most expensive blind spot in home services marketing, and it is a plumbing problem, not a strategy problem: the money lives in the CRM, the spend lives in the ad account, and nothing connects the two.
CRM revenue sync closes that loop, and once it is built it runs on its own. Here is what it does, what it shows you, and what it takes to set up.
Why Lead Counts Lie
Ad platforms optimize toward whatever you feed them. Feed Google Ads a form fill, and it will go find you more form fills. It has no idea that the $39 lead from a price shopper on a Saturday night never booked, and that the $210 lead from a panel upgrade search turned into a $9,400 job.
So the account does exactly what you told it to do. It chases the cheapest possible lead, which is almost never the most profitable one. You end up with a great looking cost per lead and a worse business.
- Two campaigns can post identical CPLs and have completely different close rates
- The cheapest lead source is usually the lowest intent one
- Average ticket varies by service line, so lead volume tells you nothing about revenue
- Anything that happens after the form submit is invisible to the ad platform by default
What Revenue Sync Actually Means
The mechanic is simple. Every paid click carries a click ID. When someone submits a form or calls a tracked number, that ID gets stored on their record in your CRM alongside their name and job. When the job is marked won, an automation sends the click ID, the outcome, and the dollar value back to the ad platform.
Google Ads matches the value to the original click and rewrites history: that keyword, that ad, that campaign is now credited with real revenue, not a form fill. Same idea applies to Local Services Ads lead feedback and to paid social, with different plumbing behind each.
Nothing about this is theoretical. It is the standard offline conversion import that enterprise advertisers have used for years. The reason most contractors do not have it is that nobody wired the CRM to the ad account.
How the Automation Runs
1. Capture the click ID
A hidden field on every form stores the Google click ID from the URL. Call tracking passes the same ID for phone leads, which matters a lot in home services where most of the money still comes in by phone.
2. Write it to the CRM
The ID rides along with the lead into ServiceTitan, Jobber, Housecall Pro, JobNimbus, HubSpot, or whatever you run, stored on a custom field. If it does not land on the customer record, nothing downstream works.
3. Watch for the status change
The automation listens for the job to move to won, invoiced, or paid, depending on which milestone you want to optimize toward. It reads the actual invoice amount, not an estimate.
4. Push the value back
On a daily schedule, the closed jobs are uploaded to Google Ads as offline conversions with their real dollar values. Google recommends uploading daily, or at least on a consistent schedule, so the bidding system is never working from stale data.
5. Report from one source
The same data feeds your dashboard, so ad spend and booked revenue sit in one table by campaign, by service, and by month. No spreadsheet reconciliation at the end of the month.
The 90 day rule.
Google Ads will not accept a conversion uploaded more than 90 days after the click that produced it. For most home services work that is plenty of room. For long cycle work like full remodels or commercial roofing, import an earlier milestone such as estimate signed, and keep the final invoice for internal reporting.
What You Can Finally See
This is the part owners care about. Once revenue flows back, the reporting stops being about marketing activity and starts being about money.
- Revenue by campaign and keyword. Not clicks. Not leads. Booked dollars against the exact search that produced them.
- Cost per booked job, by service line. The number that actually governs whether you scale or pull back.
- Lead to sale rate by source. Two sources with the same CPL almost never close at the same rate, and now you can prove it.
- Average ticket by channel. Search, LSA, and social rarely bring in the same size job.
- Wasted spend, named. The keywords and placements that have produced leads for months and zero revenue.
- Geography that pays. Zip codes and cities ranked by revenue rather than lead count, which often redraws the service area map.
The uncomfortable finding is common and worth expecting: a chunk of spend that looked fine on a CPL report turns out to have produced almost no revenue. That is the point. You cannot cut what you cannot see.
What Changes Inside the Ad Account
Reporting is only half the return. The bigger shift is that the bidding system gets a better instruction.
- Value based bidding becomes possible. Maximize conversion value and Target ROAS need real values to work against. Without revenue sync you are guessing at proxy values, which is how accounts end up optimized toward the wrong thing.
- Budget moves toward high ticket work. If emergency calls average $600 and system replacements average $8,000, the account learns to compete harder for the replacement searches.
- Junk lead sources starve automatically. Sources that never convert to revenue stop being rewarded, without you auditing search terms by hand every week.
- Negative keyword and audience decisions get evidence. You are cutting based on revenue, not on a hunch about which term feels low quality.
A word of honesty here: value based bidding needs conversion volume to learn from. On a small account it can take a while before there is enough closed job data for the system to act on it. The reporting benefit arrives immediately. The bidding benefit arrives once the data builds.
What You Need in Place
- A CRM with an API or webhooks. ServiceTitan, Jobber, Housecall Pro, JobNimbus, and HubSpot all qualify. A shared spreadsheet does not, at least not reliably.
- Job values you trust. If half your jobs are closed out without an invoice amount, fix that first. The sync inherits whatever discipline your office already has.
- Call tracking that passes the click ID. Phone-heavy trades lose most of the value without it.
- Consent and privacy handled properly. Only conversion identifiers and values leave your CRM. Customer records do not.
- A named owner for job status. The automation is only as accurate as the person marking jobs won.
The Limits Worth Knowing Before You Start
- The 90 day import window caps how long a sales cycle you can attribute directly
- Repeat customers need de-duplication, or one loyal client inflates a single keyword
- Organic, referral, and repeat work still need their own attribution logic, since there is no click ID
- Revenue is not profit. If margin varies wildly by service, feed margin instead of top line
- Reported ad platform revenue will not tie out perfectly to your books, and that is normal
Where to Start
Start by asking your office one question: for the jobs you booked last month, can you tell which ad, or even which channel, produced them? If the answer takes more than a minute, the loop is open.
From there the build order is click ID capture, then CRM field, then the daily upload, then the reporting layer. Each step is useful on its own, so this does not have to be a big bang project.
Thomas Town Digital builds this loop as part of the AI automations work, and every account and integration stays in the client name. If you want to know what your current spend is actually producing in booked revenue, we will look at it for free and tell you where the loop is broken. Book a free audit or get in touch.
More: about, all guides. Related: cost per lead benchmarks, SEO vs Google Ads, Local Services Ads explained.
