Skip to main content
Home ServicesFor HVAC, roofing and plumbing

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

  1. 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.

  2. 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.

  3. 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.

  4. 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. 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. 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. 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. 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. 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.

click_to_callVisitor taps the tracked number on mobilegclid, _fbp, event_id, service_areaBrowser · reporting only
form_submittedBook-online or estimate request postsgclid, em (hashed), ph (hashed), job_type_requested, event_idBrowser + server, deduped by event_id · reporting only
call_qualifiedTracked call connects and clears your duration thresholdgclid, ph (hashed), call_duration, ring_groupServer · reporting only
booked_jobJob lands on the dispatch board with a dategclid or ph (hashed), value (job-type tier), currency, job_idServer · optimization (primary)
estimate_signedReplacement or re-roof contract signed, work not yet donegclid or hashed contact, value (contract amount), currency, job_idServer offline import · optimization (secondary)
job_completedWork finished and the invoice is issuedgclid or hashed contact, value (invoice total), currency, transaction_idServer offline import · value correction, reporting
job_canceledBooked job cancels or the customer no-shows the windowjob_id, cancel_reason_codeHeld in your systems · reverses the booked_job value
out_of_areaCall or form arrives from a zip code you don't servicezip_group, no valueServer · 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

Get my free conversion tracking audit

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.

Get my free conversion tracking audit

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.

Free · 30 min

Stop paying replacement prices for tune-up leads

Free30 minutesNo obligation