Get your Home Services tracking to 95%+ accuracy guaranteed in writing.
Nearly every dollar in HVAC, roofing and plumbing closes on a phone call, and the jobs behind those calls run from a drain clear to a full system changeout. If the only thing you return to Google and Meta is an undifferentiated booked job, they'll buy you the cheapest one they can find. We push the invoiced job back instead.
Free30 minutesNo obligation
Home Services · what breaks
Why the phone is where your tracking breaks — Home Services
- 01
Two scripts fighting over the same phone number
CallRail's dynamic number insertion and your ServiceTitan campaign numbers both try to rewrite the number in the header. Whichever loads second wins, calls land in the wrong pool, and the job source is wrong from the first ring.
- 02
Job source is whatever the CSR clicked at 7am
The "how did you hear about us" dropdown is a human guess made during a no-heat call. It's the field your marketing decisions rest on, and it's the least reliable field in the system.
- 03
A changeout and a drain clear are the same event
A booked job with no value tells the algorithm every call is worth the same. It optimizes toward the calls that are easiest to win, which are the cheap high-volume ones, and quietly stops chasing replacement demand.
- 04
Booked isn't sold, and roofing isn't sold for weeks
Cancels, no-shows, out-of-area calls and unsold estimates all hide inside "booked." On the roofing side the deal can sit waiting on an adjuster, which can push the sale past Google's 90-day click import window if nobody planned for it.
Home Services · the fix
What changes when invoiced revenue is the conversion — Home Services
Bidding weighted by what the job actually invoiced
job_completed carries the invoice total, so a system replacement counts as a system replacement. Campaigns that only produce diagnostics start losing budget on their own.
Every call attributed, including after-hours
Overflow, answering service and second-ring calls get captured in the same model as the ones your CSRs answer, instead of falling out as direct traffic.
Out-of-area calls stop training your campaigns
Calls from zip codes you don't serve are excluded from the conversion feed, so bidding stops treating them as wins and buying more of them.
Cost per sold job, by job type
Changeouts, re-roofs, repipes and maintenance plans reported separately and reconciled against your own invoice totals, so you can bid toward the work you actually want.
Home Services · architecture
From the 2am no-heat call to the invoiced job — Home Services
The money path is ad click, tracked call or booking form, a job on the dispatch board, a tech on site, then an invoice. Your website only owns the first step of that.
- 1
One number swap, one owner
Dynamic number insertion is settled so only one script rewrites the phone number, and the pool is sized against paid session volume so two visitors never share a number.
- 2
Calls and forms land in the same session record
CallRail, CallTrackingMetrics or WhatConverts posts the call to the server container carrying the click ID captured at session start, alongside form and chat submissions.
- 3
The dispatch board creates the job
ServiceTitan, Jobber, Housecall Pro, FieldEdge or Service Fusion books the job and stamps it with job type, service zip and the technician assigned.
- 4
The invoice sets the real value
Completed job and invoiced total come back on a schedule, and that number rather than the booking is what the platforms receive as conversion value.
- 5
Your container fans it out
Booked and completed events go to Google offline import, Meta CAPI and Microsoft UET from your own subdomain, deduplicated by event_id against the browser event.
Home Services · events
Two-stage event map: booked fast, then invoiced true — Home Services
The early event trains bidding while the click is still in window; the invoiced event corrects the value once the work is done.
| Event | Fires when | Key parameters | Sent from / role |
|---|---|---|---|
| click_to_call | Visitor taps the tracked number on mobile | gclid, _fbp, event_id, service_area | Browser · reporting only |
| form_submitted | Book-online or estimate request posts | gclid, em (hashed), ph (hashed), job_type_requested, event_id | Browser + server, deduped by event_id · reporting only |
| call_qualified | Tracked call connects and clears your duration threshold | gclid, ph (hashed), call_duration, ring_group | Server · reporting only |
| booked_job | Job lands on the dispatch board with a date | gclid or ph (hashed), value (job-type tier), currency, job_id | Server · optimization (primary) |
| estimate_signed | Replacement or re-roof contract signed, work not yet done | gclid or hashed contact, value (contract amount), currency, job_id | Server offline import · optimization (secondary) |
| job_completed | Work finished and the invoice is issued | gclid or hashed contact, value (invoice total), currency, transaction_id | Server offline import · value correction, reporting |
| job_canceled | Booked job cancels or the customer no-shows the window | job_id, cancel_reason_code | Held in your systems · reverses the booked_job value |
| out_of_area | Call or form arrives from a zip code you don't service | zip_group, no value | Server · excluded from every conversion feed |
Home Services · prove
Reconciled against your invoices, not the ad account — Home Services
Once a month we take the invoice register and the platform conversion export and account for every difference between them, job type by job type.
Source of truth
Completed jobs with invoiced totals in ServiceTitan, Jobber, Housecall Pro, FieldEdge or Service Fusion
- Pull every completed job for the month with invoice total, job type, service zip and the lead source stamped on it.
- Match jobs to a click ID or hashed phone, and report the unmatched share per source instead of hiding it in an average.
- Compare invoiced revenue to Google Ads and Meta reported conversion value by conversion date, split by job type.
- Confirm the two-stage math: booked_job tier values and job_completed invoice totals must not both count as revenue.
- Verify the exclusions held. Out-of-area calls and existing-customer repeat calls should be absent from the conversion feed.
- Separate window and model differences from events that never fired, then fix only the events that never fired.
Home Services · free audit
What we check in the free audit
- Two scripts fighting over the same phone number
- Job source is whatever the CSR clicked at 7am
- A changeout and a drain clear are the same event
- Booked isn't sold, and roofing isn't sold for weeks
Checked against
Completed jobs with invoiced totals in ServiceTitan, Jobber, Housecall Pro, FieldEdge or Service Fusion
Free30 minutesNo obligation
Home Services · when not to buy
When a shop shouldn't pay us to build this — Home Services
Four honest disqualifiers for a home services contractor.
- One truck, one zip code, mostly repeat customers and referrals. A single tracking number plus a monthly invoice review is enough.
- You buy shared leads from Angi or Thumbtack. Those never touch your site, so there's no click to reconcile. Fix the lead contract first.
- Your CSRs don't reliably create jobs in the field-service CRM. Fix the dispatch process first, or we'd be measuring an incomplete record.
- You're capacity constrained year round and already turning work away. Better routing beats better bidding until you add a crew.
Home Services · what we deliver
What we build for a shop that runs on calls and trucks — Home Services
A container fed by the CRM, not just the website
A GTM server container on your own domain and cloud project, receiving website events and field-service events side by side, so a conversion never depends on a browser staying open.
One owner for the number swap
We settle the DNI conflict, size the number pool against your paid session volume, and map ring groups, after-hours routing and the answering service into the same call record.
A field-service bridge to booked and completed jobs
ServiceTitan, Jobber, Housecall Pro, FieldEdge or Service Fusion: booked job, completed job, invoiced total and job type pulled on a schedule and matched back to the click or hashed phone.
A two-stage conversion model
booked_job fires early with a job-type value tier so bidding has something fast to learn from. job_completed follows with the real invoice total and corrects it.
Hashed-phone matching for calls with no click ID
Enhanced conversions for leads on the Google side, Meta CAPI on the other, deduplicated by event_id so a caller who also filled out the form isn't counted twice.
A weekly bid-down list
Job types, service areas and campaigns ranked by cost per sold job against your own invoices. It's the reconciliation step, delivered as something your media buyer can act on Monday.
Written guarantee
95%+ tracking accuracy
Measured against Completed jobs with invoiced totals in ServiceTitan, Jobber, Housecall Pro, FieldEdge or Service Fusion. Miss it and we keep working at no cost.
FAQ
Home Services questions, answered
ServiceTitan reports what your CSR selected, and it reports it to you. Neither Google nor Meta ever sees it, so your bidding is still running blind. We take the job and invoice data ServiceTitan does hold, which is good data, and get it back to the platforms attached to the right click.
Not on its own, which is why the model is two-stage. The booked or signed-estimate event lands inside Google's 90-day click import window, and the revenue correction follows later through conversion adjustments where the window allows it, or through a job-type value tier set at booking where it doesn't.
No. CallRail, CallTrackingMetrics, WhatConverts and ServiceTitan's own numbers all work fine. What usually has to change is that only one of them is allowed to rewrite the number on the page, and that the pool is big enough that two visitors don't share a number.
It's one of the better reasons to build it. Once bidding is weighted by invoiced value and job type, you can pull budget off the job types your trucks are already full of and keep buying the ones you have room for, instead of pausing campaigns wholesale and rebuilding the learning later.
Both come in as their own sources with their own call records. LSA especially needs separate handling, because those leads never touch your website and the credits you win on disputes change what a lead really cost. Mixing them into search reporting is how people end up double counting.
One truck, one zip code, mostly repeat customers and referrals: skip it. Get a single tracking number, tag your Google Business Profile links and check your invoices monthly. This is worth building once you're running paid across several job types or several markets, and the mix of what you're selling has drifted toward the cheap end.
You do. The container, cloud project and documentation are in your company's name, and the CRM connection uses your credentials rather than ours. We'd rather you be able to fire us than be stuck with us.
More on Home Services
- GuideHome Services Ad Tracking: HVAC, Roofing and Plumbing Leads That Actually Close
- GuidePhone Call Conversion Tracking: Stop Losing Your Best Leads to the Phone
- Home Infusion ServiceGoogle Ads for home infusion service: the build order
- AgenciesMost agencies lose clients not to bad creative, but to broken tracking. Be the o…
- Financial ServicesGoogle and Meta will happily optimize you toward applications that never fund
Free · 30 min
Stop paying replacement prices for tune-up leads
Free30 minutesNo obligation
