Attribution, cost and ROI
ServiceTitan marketing attribution: tie SEO to booked jobs
Written by the Top SEO Experts Team
Reviewed by Ritik NamdevLast updated 18 min read
Quick answer
To tie SEO to booked jobs in ServiceTitan, give organic search its own trackable phone number through Dynamic Number Insertion. Link every campaign to a business unit, and book each job through its lead record. Then read the Campaign Summary report weekly, watching the Unknown row for broken tracking.
A homeowner searches “water heater repair near me,” taps a result, and calls the number on your site. Three weeks later the job closes at the shop. Whether that job is credited to SEO depends on a handful of settings most teams never audit.
What does ServiceTitan attribute on its own, and where does it stop?
ServiceTitan attributes a call to a campaign by matching the inbound phone number, so the number is the whole mechanism. If a channel has no distinct number, ServiceTitan has nothing to match, and the call shows up as Unknown or Direct.
Definition DNIS is a way to tell which number a caller dialed. Dynamic Number Insertion, or DNI, swaps the number shown on your website based on the visitor’s source.
ServiceTitan’s help center says attribution works through DNIS: the inbound phone number is matched to the campaign. We read that page on 22 October 2026. Each campaign needs its own tracking number, and the page warns never to reuse tracking numbers across campaigns.
Two settings have to agree, and the number must have the right type:
| Requirement | Detail |
|---|---|
| Assign the number to a campaign | Settings > Phones > Phone Numbers |
| Use the same number in the Advertised Number field | Settings > Operations > Campaigns |
| Type the number as a tracking number | Not a direct dial |
If either setting is missing, attribution breaks.
That explains the ceiling. ServiceTitan can only credit what it can tell apart.
What happens when a customer uses several channels?
Take a customer who reads your blog on Tuesday and sees your Business Profile on Friday. If they call the main line on Saturday, they are credited to whichever number they dialed.
Our general guide to SEO attribution covers why no tool settles that fully.
How do you set up ServiceTitan to attribute organic search?
Install Dynamic Number Insertion (DNI) on your website and give each traffic source its own tracking number. Then link the campaign to a business unit and test with a real search. This is the order we would work in.
ServiceTitan describes DNI as a JavaScript snippet that swaps the number shown on your site based on the visitor’s source. Here is the sequence, with the page each step comes from.
- Buy or add a tracking number for organic search. In Settings > Phones > Phone Numbers, choose the default call type (Lead or Not Lead) and set the forwarding number. ServiceTitan’s attract and engage guide covers this.
- Create a tracking campaign. Go to Settings > Operations > Campaigns. Set the name, category, business units, tracking number, source, and medium.
- Link the campaign to a business unit. This is our step. We could not confirm that the docs require it.
- Install DNI. The path is Settings > Integrations > Marketing Integrations > Dynamic Call Tracking. Pick Auto-DNI (the documented recommendation) or Manual DNI, enter your domain, and paste the snippet into the head of your pages.
- Test it as a customer would. Search for your business in Google, click through, and call the number the page displays. The Marketing Campaign field on the call booking screen should fill in on its own.
- Name the campaign so reports read cleanly. We use a plain label such as “SEO - organic website” so that anyone in the office can tell what the Campaign Summary row means.
- Add a tracking numberOne number for organic search, with the call type and forwarding set.
- Create a tracking campaignName, category, business units, number, source and medium.
- Link it to a business unitOtherwise attribution breaks.
- Install DNIAuto-DNI is the documented recommendation.
- Test it as a customer wouldSearch, click through and call the number the page shows.
- Name the campaign plainlySo anyone can read the Campaign Summary row.
Keep a test log in a spreadsheet. Record the date, the page you started from, the number the page displayed, the device, and which campaign filled in on the booking screen. When a number breaks six months from now, that log tells you what “working” looked like.
Do step 5 before you tell anyone it works. The docs say that if DNI is missing from a landing page, those calls show as Direct. A failed test usually comes down to snippet placement, domain format, or cache.
One caution from our side. The docs describe the swap as source-based.
Watch out We did not find a statement of exactly how ServiceTitan’s snippet classifies an organic Google visit. Verify it in your own account, using the test above, before trusting the organic row.
How do you track Google Business Profile calls separately?
Treat the profile as its own source. Tag the website link on the profile so its visits are separable in analytics, and decide on purpose whether to use a different phone number. Do not change the profile number casually.
Profile calls are usually your highest-intent organic calls, and in a blended report they hide inside general organic search. We want them separate for a practical reason: they respond to different work than your website pages do.
Two moves leave the public listing alone, so start there.
First move: how do you tag the profile’s website link?
First, tag the profile’s website link. Google Analytics documents the three manual parameters: utm_source, utm_medium, and utm_campaign. Google says to always use all three, and that values are case sensitive, so “google” and “Google” count as different sources.
Missing parameters produce “(not set)” values in reports. See Google’s guidance on UTM parameters.
Google Analytics classifies a visit as Organic Search when the source matches its list of search sites. It also does so when the medium exactly matches “organic” (see its default channel group definitions). That gives us a tagging pattern, which is our practice and not a Google recommendation:
?utm_source=google&utm_medium=organic&utm_campaign=gbp-profile
The campaign value separates profile visits from other organic traffic, while the medium keeps them in the Organic Search channel.
For online booking, ServiceTitan’s capture and convert guide lists adding tracking parameters to Scheduling Pro URLs. That way bookings attribute to the right source.
Second move: what does Google’s own reporting add?
Second, use Google’s own Business Profile performance reporting as a cross-check. We did not open Google’s metric definitions for this post, so expect it to disagree with ServiceTitan, and compare trends, not totals.
Third option: should the profile get its own number?
The third option is a dedicated tracking number on the profile. It gives ServiceTitan a direct record of profile calls, but it edits a public listing.
We did not verify Google’s current rules on primary and additional phone numbers. Read them first, keep the original number listed, and test before swapping anything.
- Tag the website linkUse utm_source, utm_medium and utm_campaign so profile visits are separable in analytics.
- Use Google's reportingA cross-check. Expect it to disagree with ServiceTitan, and compare trends, not totals.
- Add a dedicated numberGives ServiceTitan a direct record of profile calls, but it edits a public listing.
Our view If the shop gets fewer than a few dozen profile calls a month, the tagged link and Google’s own reporting are enough. The risk of touching the listing outweighs the extra detail.
For the ranking side of the profile, see our guides on Google Business Profile for plumbers and the map pack and proximity. Google says local results rest on relevance, distance, and prominence, so where the caller stands matters when you compare call counts across neighborhoods.
What should you check before trusting the numbers?
Check the Unknown row first. ServiceTitan’s docs say a high Unknown rate signals three problems.
They are broken tracking numbers, missing campaign assignments, and CSRs overriding the auto-populated campaign field. It points you to the Campaign Summary report.
Run this audit monthly. It is a short list, and it is where most attribution problems surface.
- Call each tracking number from a cell phone and confirm the campaign fills in.
- Confirm no number is shared by two campaigns. Reuse merges the data and hides each campaign’s performance.
- Confirm every active campaign is linked to a business unit.
- Open the Unknown row and read ten call recordings. Look for CSRs who changed the campaign.
- Deactivate ended campaigns instead of deleting them, because deactivation keeps history.
- Check how leads are converted. The docs say to always book the job through the lead record so the lead converts automatically. Booking separately leaves the lead open and breaks lead-to-revenue attribution.
- Confirm a reason code is recorded when a lead does not convert, such as Price Too High or No Availability.
- Call each tracking numberFrom a cell phone, and confirm the campaign fills in.
- No shared numbersReuse merges the data.
- Every campaign has a business unitActive campaigns must be linked.
- Read ten Unknown recordingsLook for CSRs who changed the campaign.
- Deactivate, do not deleteDeactivation keeps history.
- Book through the lead recordSo the lead converts automatically.
- Record a reason codeWhen a lead does not convert.
The reason codes matter more for SEO than most owners expect. If organic leads convert poorly, you need to know whether the leads were wrong or the follow-up was. Without codes you cannot tell, and SEO takes the blame.
Want to apply this to your site?
Not sure where to start? Get a plan for your own business.
How do you read the Campaign Summary report for SEO?
Read the SEO row by booked jobs and revenue, not by call volume, and compare it against a baseline from the same season last year. A growing call count with a falling booking rate is a capacity or follow-up problem before it is an SEO problem.
ServiceTitan lists four key marketing metrics: Volume, Conversion, Recovery and Accuracy.
Where is the Campaign Summary report?
Campaign Summary lives under Reports > All Reports.
What is the campaign attribution rate?
Its measuring-impact section adds a metric we like: campaign attribution rate, how many calls map to a real campaign, read from the Unknown row. If that rate is poor, no other number on the page is safe.
We use four rules here, and they’re ours, not ServiceTitan’s.
- If the Unknown share is high, fix tracking before you judge SEO. A channel cannot look good when its calls are unattributed.
- If SEO calls rise but booked percentage falls, check the dispatch board and CSR conversion before changing SEO.
- If booked jobs rise but revenue per job falls, check which job types SEO is bringing. Our post on lead value math for home services shows how to value them.
- If the numbers are small, compare quarters. Do not read a single week.
Start with the attribution rate, since everything else rests on it. Say, hypothetically, a shop logs 120 calls in a month and 30 sit in the Unknown row. That’s 25 percent unattributed (30 divided by 120).
Our view ServiceTitan gives no threshold for this. A quarter of calls unattributed is too many to judge any single channel, SEO included.
What does a falling booked rate tell you?
Now the booking pattern, again hypothetical. A plumbing company logs 40 organic-attributed calls in a month and books 18, a booked rate of 45 percent (18 divided by 40).
A month later it logs 52 calls and books 18, about 35 percent (18 divided by 52). Calls grew by 30 percent, yet booked jobs did not move. That points at the schedule or the phones, not the search listing.
| Hypothetical month | Organic-attributed calls | Booked jobs | Booked rate |
|---|---|---|---|
| First month | 40 | 18 | 45 percent |
| A month later | 52 | 18 | About 35 percent |
Source: Hypothetical example
View the data as a table
| Item | Value |
|---|---|
| First month | 45% |
| A month later | 35% |
Key takeaway Fix tracking before you judge SEO. If calls rise but bookings do not, check the schedule and the phones before changing the search listing.
How do seasonality, lead value, and regulation change the picture?
Home-service demand swings by season. Jobs vary widely in value, and rules differ by state. So attribution needs a year-over-year baseline, a job-type view, and a check with your own counsel on recording and advertising rules.
Why is seasonality the biggest trap?
Seasonality is the biggest trap. An HVAC shop’s organic calls climb in the first heat wave regardless of what SEO did.
Example Suppose August brings 52 attributed calls against 44 last August (hypothetical). That’s up 18 percent, and the heat may explain all of it.
Compare the same month last year, and use Search Console’s Performance report, which counts clicks and impressions from Google Search, to separate demand from visibility. Our seasonal HVAC SEO guide goes deeper on timing.
Why does lead value matter?
Lead value is the second. A tune-up and a system replacement both appear as a booked job. Read the SEO row by job type or business unit so that a handful of high-value jobs is not drowned out by volume.
Our guides on HVAC leads versus SEO and plumbing leads versus SEO show the economics.
What about regulation?
Regulation is the third. Call recording notices and advertising rules vary by state and trade.
We have not sourced those rules for this post, so ask your own counsel before changing recording or call-handling practices. Do not take legal advice from a marketing blog, ours included.
What about Housecall Pro and other field service tools?
The principles carry over: one trackable source per channel, a lead source that staff cannot skip, and a report that reaches revenue. We did not open Housecall Pro’s docs for this post, so we make no claim about its specific features.
Before you rely on any field service platform for SEO attribution, ask five questions in a demo or your own account.
- Can I assign a distinct phone number to organic search and to the profile?
- Is lead source a required field when a job is created, or can it be left blank?
- Does the website number change by visitor source, or only by campaign?
- Does the report join source to booked jobs and revenue, not just calls?
- Can I export the records, so I can check them against Search Console and Business Profile?
If the answer to the last question is no, keep a simple spreadsheet outside the tool. A weekly export of source, job type, and revenue is enough to compare against Google’s numbers.
What mistakes do we see most often?
The failures are mundane, and each one makes organic search look worse than it is.
- DNI installed on the homepage only, so calls from service pages show as Direct. The fix is a sitewide snippet, then a test call from a service page.
- A single tracking number used for “all online,” which merges SEO, the profile, and paid search.
- Reading a three-week drop as an SEO failure when a tracking number expired.
- No baseline. Without last year’s same month, a seasonal spike looks like an SEO win and the dip looks like a loss.
- Treating a booked call as a sold job: The sold job is the one that pays. A shop that books 20 calls and sells 8 (hypothetical) has a 40 percent close rate. Whether that pays depends on the size of the jobs.
Our post on when an SEO agency should show calls sets expectations for when attributed calls should start to appear.
What does the data not show?
It does not show your results. We have no US home-services SEO case study of our own yet.
So every number here is a documented ServiceTitan feature or a labeled hypothetical. We make no claims about what SEO will deliver for your trade.
Four limits apply to everything above.
- We read the docs, not a live account. We did not test ServiceTitan’s DNI in a production account, so the verification steps matter.
- Attribution rules can change. Our reading is dated 22 October 2026. Menu paths and features may differ in your edition, so confirm in your own account.
- Last-number credit isn’t the whole story. The docs we read describe number-based matching. We found no description of how a customer with several visits across channels is credited.
- Call counts differ between systems. Business Profile, Analytics, and ServiceTitan each count different events, so they will not reconcile exactly.
What you can leave with is a repeatable audit. A shop that runs it monthly can answer one plain question. How many booked jobs came from organic search last quarter, and what were they worth?
What does this mean for your shop?
- Start with the number. Give organic search its own trackable number, and link the campaign to a business unit.
- Then test it like a customer. Search, click through and call. Keep a log of what filled in.
- Each month, check the Unknown row first. Fix tracking before you judge SEO.
- Last, read the SEO row by booked jobs and revenue. Compare it with the same season last year.
Frequently asked questions
Can ServiceTitan show which booked jobs came from SEO?
Yes, if organic search has its own tracking path, because ServiceTitan’s docs say attribution works by matching the inbound number to a campaign. They add that Dynamic Number Insertion swaps the website number by visitor source. Without a distinct number or tagged link for organic search, those calls land in Direct or Unknown instead.
Why do so many of my calls show as Unknown?
ServiceTitan’s docs name three causes: broken tracking numbers, missing campaign assignments, and CSRs overriding the auto-filled campaign field. It says every campaign needs a way to track calls back to its source, and leads without one show as Unknown. Check the Unknown row in the Campaign Summary report, then test each number by calling it.
Should I put a tracking number on my Google Business Profile?
It can work, but check Google’s current guidance on primary and additional phone numbers first, because we did not verify it for this post. A cleaner starting point is a tagged website link plus a test-call routine. Never change the profile number without keeping the old one listed.
Does this work with Housecall Pro or other tools?
The principles carry over: one trackable number or source per channel, a required lead source field, and a report by source that reaches revenue. We did not open Housecall Pro’s docs for this post, so confirm each feature in your own account before you rely on it.
How many calls do I need before the SEO numbers mean anything?
We have no sourced threshold. Small monthly counts swing widely, so compare quarters rather than weeks, and compare the same season in the prior year. Treat any single month as a prompt for a question, such as whether a tracking number broke, not as a verdict on the channel.
Who should own attribution, the marketing manager or the CSRs?
Both, with different jobs: the marketing manager owns numbers, campaigns, and the weekly report. CSRs own each record’s quality: leaving the auto-filled campaign alone, booking through the lead, and picking a reason code when a lead does not convert. ServiceTitan’s docs point to CSR overrides as one cause of Unknown sources.
Once the numbers are trustworthy, the question becomes what organic search is worth to your shop. Our SEO ROI calculator turns booked jobs and job value into a payback estimate. Our local SEO checker gives a quick look at your profile and listings.
If you want a team to build the plan and report against these numbers, see our SEO service and Get Your Organic Growth Plan.
Sources
- ServiceTitan Help, Capture and convert leads, accessed 22 Oct 2026.
- ServiceTitan Help, Capture and convert leads (residential), accessed 22 Oct 2026.
- ServiceTitan Help, Attract and engage customers, accessed 22 Oct 2026.
- Google Analytics Help, Manual tagging with UTM parameters, accessed 22 Oct 2026.
- Google Analytics Help, Default channel group, accessed 22 Oct 2026.
- Google Search Console Help, Performance report (Search results), accessed 22 Oct 2026.
- Google Business Profile Help, Improve your local ranking on Google, accessed 22 Oct 2026.
Want to apply this to your site?
Not sure where to start? Get a plan for your own business.
