(619) 330-0953 Book a call
Insights / Ad Spend / Playbook

Before the Ad Spend: How We Wire CallRail and ServiceTitan for Home-Services Clients

August 17, 2026 Ad Spend 17 min read By the operators
 
  • CallRail and ServiceTitan count conversions differently, and that difference is the point. One proves which channel produced net-new demand; the other proves what that demand was worth.
  • Industry write-ups put the “unknown source” bucket at 30 to 60 percent of inbound calls in a typical ServiceTitan account. Fixing that sits at the tracking layer, above any bid change.
  • The native CallRail to ServiceTitan integration is free, per CallRail’s documentation. It needs ServiceTitan’s Marketing Pro Ads Package, call tracking, and a website number pool.
  • Google Smart Bidding and Meta’s delivery both learn to chase booked-job revenue once it flows back to them, instead of chasing phone calls and form fills.
  • Every figure on this page that came from contractors, agencies, or vendors is labeled that way. None of it is a Magister client result, and none of it is a promise.

The Work That Happens Before the First Ad Runs

A home-services company books a solid install job. The CSR asks how the caller heard about them. The answer lands in ServiceTitan as “Google.” Which Google? Paid search? The map listing? A Local Services ad? Nobody can say, and next month’s budget gets planned on that shrug. At Magister Digital AI, closing that blind spot is where  marketing for home-services companies actually starts. Before we run Meta or Google ads for an HVAC, plumbing, electrical, or garage door client, we don’t assume we already know what’s working. We build the measurement first. This post is the real pre-flight walkthrough: the attribution architecture we stand up for a multi-location home-services account, wired around CallRail and ServiceTitan, and how we decided to run the two together. One thing this post is deliberately missing: revenue promises. Where we quote figures, they’re contractor, agency, or vendor reported, and labeled that way every time. The build takes roughly four weeks from kickoff to a live closed loop across Google and Meta. What follows is what happens inside those weeks, and the honest limits we work within.

What Has This Architecture Produced Elsewhere?

Contractors, agencies, and ServiceTitan have reported strong results from this closed-loop pattern, including cost per booked job dropping 30 to 50 percent within 90 days. We show these figures to describe what the architecture can do when it’s built correctly. They are third-party and vendor reported, and none of them is a Magister client result or a guarantee.
Reported outcome Detail Who reported it
30 to 50 percent lower cost per booked job Within 90 days on the full stack Industry and vendor write-ups
Roughly 100 percent ROI lift in one month Plumbing client using Ads Optimizer; lead quality moved from 44 to 60 percent Vendor-reported case
$2M to $40M in attributed non-brand Google Ads revenue per year Enterprise HVAC, plumbing, and electrical brands Agency-reported case
$71 per booked job $2,000 per month in Google Ads producing 28 booked jobs and $12,600 in booked revenue Agency-reported case
30 percent lead-conversion lift in two months Denver HVAC company after restructuring Agency-reported case

Why Do We Run Both CallRail and ServiceTitan?

Because they count different things, and you need both counts. CallRail counts each caller once, at first touch, and proves which channel produced net-new demand. ServiceTitan tracks that same contact through Lead, Booked, Ran, Sold, and Revenue. Integrated, they put cost per new lead and cost per booked job on the same campaign in the same dashboard. Run alone, either tool gives you half an answer. Here’s the split.
The question CallRail ServiceTitan
Which ad, keyword, or channel made the phone ring? Yes. Session-level source, medium, campaign, keyword, and the Google and Meta click IDs, stamped per visitor. CSR-entered source at best.
Is this caller new demand or a repeat customer? Yes. First-touch counting; repeat callers don’t re-count. Matches the contact record, without channel proof.
Did the lead become a booked, run, and sold job? No. CallRail stops at the call. Yes. Staged funnel from lead through invoice.
What revenue did the campaign produce? No. Yes. Revenue on the job record, by campaign and keyword.
Worth saying plainly: ServiceTitan sells its own dynamic number insertion (number swapping that shows each website visitor a tracked phone number), and their reps sometimes push contractors to drop CallRail. We recommend keeping it, for three reasons. CallRail is the call tracker with a native integration in the ServiceTitan marketplace. Its first-time-caller counting stops repeat callers from inflating attribution. And it captures Meta’s click ID, which ServiceTitan’s native number swapping does not; that one detail is what makes Meta attribution possible at all.

How Big Is the “Unknown Source” Problem?

Black IP desk phone on a dark office desk In a typical ServiceTitan account without dedicated tracking, 30 to 60 percent of inbound calls carry no usable source, per industry write-ups. Once every marketing surface has its own tracked number, the documented industry pattern shows “unknown” collapsing from around 40 percent to around 5 percent. That shift is scope, and it is nothing we present as a Magister result. Every home-services business we onboard has the same blind spot: ServiceTitan shows the booked job, while the “how did you hear about us” field holds a blank, a “Google,” or an “internet search.” The unknown bucket hides which channels earn their budget and which waste it, and no amount of bid optimization inside Google or Meta repairs it. It has to be fixed at the tracking layer.
Source of business Without CallRail With CallRail
Google Ads (paid search) “Google” or unknown Exact campaign, ad group, and keyword
Google Business Profile (Maps and organic Google) “Google” or unknown GBP calls specifically
Google Local Services Ads Sometimes “LSA,” if the CSR notices LSA with lead detail, via Google’s own LSA inbox
Organic search and SEO “Google” or unknown Organic sessions via the website pool
Meta and Facebook ads “Facebook” or unknown The specific Meta campaign
Bing and Microsoft ads Almost always unknown The Bing campaign
Print, direct mail, vehicle wraps Almost always unknown A dedicated number per channel
Referrals Correctly attributed Correctly attributed, unchanged
Moving attribution from mostly-unknown to mostly-named often matters more than any bid tweak we could make, because CallRail stamps the source on the contact before the CSR ever picks up. From that point, ServiceTitan knows too.

How Does the Data Flow End to End?

Marketing analytics dashboard with performance graphs on a laptop screen Each layer has one job. Together they close the loop from ad click all the way back to bidding, on Google and Meta at the same time.
  1. Channels. Every marketing surface displays a CallRail number: Google Ads, the Google Business Profile, Meta, Bing, the website, print, direct mail. The one exception is Local Services Ads, covered below.
  2. CallRail. Captures the first-time caller’s identity and full attribution (source, medium, campaign, keyword, Google and Meta click IDs), records the call, and pushes it to ServiceTitan through the native integration.
  3. ServiceTitan. Matches the caller to an existing contact by phone number, or creates a new one with attribution already stamped, then tracks the staged funnel: Booked, Ran, Sold, Revenue.
  4. Parallel activation. Revenue signals fire to both ad platforms. Ads Optimizer sends daily closed-job revenue and projected job value to Google, plus a refreshed customer list. The Meta Conversions API receives booked-job and purchase events matched by click ID, with actual and predicted values attached.
  5. Both platforms optimize for revenue. Google Smart Bidding and Meta’s delivery bid up on the keywords and audiences producing high-value jobs, and pull back where the revenue isn’t. More revenue produces more signal, which produces smarter bids.

Why Does the Google Ads Funnel Come First?

Because the integration alone delivers nothing. A closed loop on top of a broken ad account just reports the damage in higher resolution. We rebuild the Google funnel first, then activate the loop on top of it. The reporting stack is what proves the campaign work is working, never a substitute for it. This is the step that most often gets skipped, and it’s the core of our Google Ads management work on these accounts:
  • Campaigns separated by intent: branded, non-branded, service-specific, and LSA competitor conquest.
  • Disciplined match types and negative keyword lists at the account and campaign level.
  • Each ad group pointed at a landing page that matches the specific search intent.
  • An optimized tracking template at the account level, so campaign, keyword, and match-type data flows into every call record.
  • One consistent UTM standard across every ad and landing page link. Garbage in, garbage out.
  • Enhanced Conversions for Web enabled, to improve match rates on offline conversions.
  • Imported ServiceTitan conversions re-configured by hand for count method, window, and primary versus secondary status.
  • Bid strategy staged: manual or max-clicks while data accumulates, then value-based Smart Bidding once enough revenue has fed back.

How Does the Same Loop Teach Meta?

Most contractors dramatically under-track Meta because they only measure form fills. Optimizing on “leads” pushes Meta toward junk contacts. Optimizing on booked-job revenue, reported back through the Conversions API and matched by click ID, forces Meta’s delivery to find people who resemble real revenue customers. The mechanics run in six steps. A user clicks a Meta ad and lands with a click ID on the URL. CallRail’s script captures that ID during the number swap. When the visitor calls, the ID rides the call record into ServiceTitan. The job moves through Booked, Ran, Sold, and Revenue. We send the booked and revenue events back to Meta through the Conversions API, matched by that ID and deduplicated so each event counts once. Meta’s delivery then optimizes toward revenue lookalikes instead of cheap leads. On the setup side, our Meta Ads management builds cover the Pixel plus Conversions API with dedupe keys configured, custom booked-job and purchase events carrying revenue value, value-based lookalike audiences from ServiceTitan’s highest-revenue customers refreshed weekly, and retargeting exclusions built from the existing customer list so spend stops chasing people who already booked.

Which Phone Number Goes Where?

The routing rule is strict: caller, then CallRail number, then ServiceTitan tracking number, then the CSR. CallRail stamps attribution before forwarding, and skipping the ServiceTitan hop breaks the revenue loop. Local Services Ads are the one deliberate exception.
Surface Number type Where it forwards
Website, all pages CallRail pool, a unique number per visitor session; captures the Google and Meta click IDs ServiceTitan tracking number
Google Business Profile, primary Static CallRail number ServiceTitan tracking number
Google Business Profile, additional The client’s real office number, preserved as the canonical listing number Straight to the business; no tracking layer
Google Ads call extensions Dedicated static CallRail number, so ad calls separate from landing page calls ServiceTitan tracking number
Local Services Ads Google’s own forwarding number The client’s original business number, directly
Meta and Facebook ads Dedicated static CallRail number ServiceTitan tracking number
Bing and Microsoft ads Dedicated static number or its own pool, with an optimized tracking template ServiceTitan tracking number
Print, direct mail, email signature One dedicated CallRail number per channel ServiceTitan tracking number

How Do We Configure Google Local Services Ads?

LSA never routes through CallRail in our builds. Google’s LSA system already shows customers its own dynamic forwarding number, records the call, and files the lead in its own inbox. We set the LSA receiving number to the client’s original business line and read LSA results inside Google’s reporting. This is where LSA setups most often go wrong. Chaining LSA through a call tracker creates a double-forward pattern: Google’s number, then a tracking number, then the real line. We keep one forwarding layer, because the second one adds account risk without adding any reporting we need. What we give up is seeing LSA calls inside CallRail’s dashboard next to the other channels. What we keep is a clean setup and Google’s own lead-level detail. After configuring it, we verify with a live test call through the ad: the client’s real line rings, the call appears in the LSA lead inbox with recording and duration, and the CallRail dashboard does not claim it. One account-type note: on the legacy LSA dashboard, changing the receiving number can require contacting LSA support, while the newer Google Ads pay-per-lead version lets you edit it directly in campaign settings.

What Happens With Web Forms?

The native CallRail to ServiceTitan integration pushes calls. In our evaluation, CallRail form submissions do not automatically become ServiceTitan contacts, a detail that often goes undisclosed. Since home-services traffic is heavily call-based anyway, we skip CallRail’s form tracking and keep every form inside ServiceTitan’s own tools. Booking-intent forms (“Schedule Service,” “Book Now”) run on ServiceTitan’s native booking widget, so submissions flow straight into ServiceTitan and become bookable conversions in Google Ads. Contact and quote forms run on a ServiceTitan native web form, or on a direct form-to-lead bridge our team builds against the ServiceTitan API. Either way, the small volume of form leads stays in the same attribution loop as the calls, with no dead end.

How Do We Structure Conversion Actions?

Imported ServiceTitan conversions do not arrive configured correctly, and the defaults quietly train Smart Bidding on the wrong thing. The rule we hold: revenue-based actions count every occurrence, while contact-based actions count one per person. Get that backwards and bidding chases repeat callers instead of new revenue. On Google, our primary actions (the ones bidding trains on) are the projected-job-value events for website and call-extension leads, counted every time on a 90-day window, plus integrated bookings, lead calls from the website pool, and ad calls filtered to longer than 90 seconds, each counted once on a 30-day window. Booked-job, completed-job, and unqualified inbound calls stay secondary: completed-job revenue in particular runs 2 to 12 weeks behind the funnel, which is too slow to steer bids. On Meta, the purchase event fires when a ServiceTitan job hits Sold, carrying actual revenue, and the schedule event fires at Booked, carrying projected value. Both are primary. The plain lead event stays secondary, used for deduplication rather than optimization.

What Do Ads Optimizer and JVP Add?

Ads Optimizer is what turns the closed loop from a reporting layer into an optimization layer. It imports closed-job revenue into Google Ads daily, pushes a refreshed customer list, auto-tests value-based bid strategies, and, through the Job Value Predictor, sends projected revenue the moment a job is booked. JVP matters more than actual revenue for one reason: timing. Take a garage-door install. The lead calls today, a tech consults next week, the door gets ordered, and revenue posts 8 to 12 weeks later. Without JVP, Google bids on data that far behind the funnel. With it, Google receives a projected revenue signal tied to today’s ad click, so Smart Bidding can double down on what’s working while it’s still working. On pricing, ServiceTitan currently lists a pay-as-you-go rate of $5.25 per qualified lead, or a flat monthly subscription; vendor pricing, subject to change.

What Does the Stack Cost?

Costs below are vendor list figures at the time of writing; confirm current pricing before budgeting.
Component Cost Required?
CallRail call tracking plan Around $50 per month base; realistically around $135 with usage Yes
CallRail website number pool Included in the plan Yes
ServiceTitan Marketing Pro Ads Package Quoted by ServiceTitan Required for the integration
CallRail to ServiceTitan native integration Free Yes
Google Ads account and tracking template The client’s existing ad spend Yes
ServiceTitan Ads Optimizer $5.25 per qualified lead, or a flat subscription Recommended
Meta Pixel and Conversions API Free Yes, for Meta

What Does the Rollout Look Like?

Network patch panel with labeled ports and connected cables Roughly four weeks from kickoff to a live closed loop across Google and Meta.
  1. Week 1, foundation. Confirm Marketing Pro Ads is in place, generate the ServiceTitan credentials, mirror every channel as a ServiceTitan campaign record, and provision CallRail.
  2. Weeks 1 to 2, the Google Ads rebuild. Restructure by intent, build the negatives, rewrite ads against landing page intent, deploy the tracking template and UTM standard, enable Enhanced Conversions, and start on clicks-based bidding while data accumulates.
  3. Week 2, CallRail configuration. Build the website pool and the static numbers, point every one of them at the ServiceTitan tracking number, and install the script that captures the click IDs. LSA gets its separate configuration.
  4. Weeks 2 to 3, integration activation. Connect CallRail to ServiceTitan with the tenant credentials, then verify a test call lands with source, campaign, and click IDs stamped.
  5. Week 3, conversion cleanup. Import the ServiceTitan conversions into Google Ads and set the count methods, windows, and primary versus secondary status per the framework above.
  6. Weeks 3 to 4, the Meta layer. Pixel plus Conversions API with dedupe, the custom revenue events, the value-based lookalikes, and the retargeting exclusions.
  7. Week 4, Ads Optimizer. Enable it, confirm revenue import activates, turn on JVP per campaign, and set a 30-day pre-optimizer baseline so the lift is measurable.
  8. Ongoing, the reporting rhythm. Weekly checks on lead volume, booking rates, and booked and sold trends by campaign; monthly cost per booked job and revenue by campaign across Google and Meta.

What Do Industry Benchmarks Say?

Benchmark data below comes from a January 2026 industry dataset covering 816 HVAC and plumbing contractors and 8,077 campaigns, plus published LSA figures. It’s context for judging results, and none of it is Magister data.
Metric Figure
Google Ads blended cost per lead $104, with branded around $34 and non-branded around $149
Google LSA cost per lead, 2024 $60.50, up 20 percent from $50.46
Average plumbing booking rate 41.5 percent
Booking rate at top-performing HVAC and plumbing companies 75 to 80 percent
LSA cost per lead by trade HVAC $45 to $85 · plumbing $40 to $75 · electrical $35 to $70 · roofing $50 to $95
That last pair of rows explains one of our favorite things about this stack: it exposes operations, gently. If the client’s CSRs book 45 percent of calls while top performers book 80, no ad optimization fixes that. The stack surfaces the booking-rate gap in the same dashboard as the ad spend, so the operational fix becomes visible next to the marketing one.

The Gotchas We Watch For

  • Attribution reassignment inside ServiceTitan Marketing Pro, where the look-back window can move credit off the campaign that generated the lead.
  • A missing Google Ads tracking template, which silently drops keyword-level attribution even though calls keep appearing in ServiceTitan.
  • Wrong count methods on imported conversions, which train Smart Bidding to chase repeat callers.
  • Too many primary conversion actions, which muddies the optimization signal. Keep it tight.
  • LSA chained through a call tracker. We route LSA to the client’s original number directly, every time.
  • Relying on completed-job revenue alone, which runs 2 to 12 weeks behind the funnel. That lag is exactly why JVP exists.
  • Meta Conversions API without dedupe configured, which double-counts every event and flatters the reporting.
  • Assuming the integration alone does the work. On a broken funnel, the data just reports failure faster.

What This Post Can and Can’t Prove

Candor is part of the method, so here is the other side, stated as plainly as the rest. The figures in the outcomes section are contractor-, agency, and ServiceTitan reported results for this pattern. They describe what the architecture can do when it’s built correctly, and they say nothing about what any specific account will do. Attribution here is call- and session-based; referrals, memory dials, and offline word of mouth stay untraceable, and LSA calls live in Google’s reporting by our own routing choice. The accounts, the tracking, and the data belong to the client, every metric is defined before it judges performance, and media, software, and agency fees stay itemized separately, so spend remains something you can defend, continue, reduce, or reallocate. Results always depend on a client’s market, service, budget, capacity, and timeframe.

Where This Leaves You

A high lead count can hide a low booked-job count. Before you increase spend, the measurement has to be able to tell you which dollars became revenue and which didn’t. That’s the work on this page, and it’s why the order matters: CallRail and ServiceTitan wired first, ads second. We do this level of setup before we run a single ad for a home-services client because it’s the only honest way to know whether the money is working. If you’d like your source-to-booked-job map drawn before a campaign touches your budget, visit Magister Digital and we’ll walk you through the same build on your account

Common Questions About Home Services Ad Spend

Is the CallRail and ServiceTitan integration free?

The integration itself costs nothing, per CallRail’s documentation. You still pay for both platforms, and the connection needs ServiceTitan’s Marketing Pro Ads Package, call tracking enabled, and a website number pool on the CallRail side before it will activate.

Does ServiceTitan work without CallRail?

Operationally, yes. Scheduling, dispatch, and invoicing run fine on their own. What suffers is marketing proof: without per-channel tracked numbers, source data depends on what a CSR types mid-call, and industry write-ups put the resulting “unknown source” share at 30 to 60 percent of inbound calls.

Why does counting a caller only once matter?

Repeat calls are a normal part of service work, and every repeat counted as a fresh lead flatters whichever campaign happened to be running that day. CallRail’s first-touch counting keeps the lead column honest, so cost per new lead means what it says.

Do Local Services Ads calls go through CallRail?

Not in our builds. Google’s LSA product supplies its own forwarding number, call recording, and lead inbox, so we set the LSA receiving number to the client’s real business line and read those results in Google’s reporting instead of adding a second forwarding hop.

What happens with website form leads?

We keep booking and contact forms on ServiceTitan’s own tools, so a submission becomes a contact and a job in the same system that tracks the revenue. The native CallRail integration centers on calls, and a form that stops outside ServiceTitan never reaches the job record.

How long does the setup take?

Around four weeks in our builds: foundation and credentials, the Google Ads rebuild, the CallRail number architecture, integration activation, conversion cleanup, and then the Meta layer. The closed loop starts feeding bidding after that, with a 30-day baseline so any lift from Ads Optimizer is measurable.
Book a call

Bring your numbers. We will tell you what they say.

Forty-five minutes, no deck, and you keep the findings whether or not you hire us.