The whiteboard said a little over four thousand dollars a month. Nobody in the room could tell me what it bought. That gap is what marketing attribution for home service businesses is actually about: not dashboards, not models, but the ability to point at a paid invoice and say where the phone call came from. I have sat through some version of that meeting a dozen times now, and the story below is a composite of them — rounded numbers, real mechanics, no client's books.
The owner ran nine trucks doing drain and repipe work. He listed his channels for me in the order he trusted them: truck wraps first, because everybody says they see them; then the SEO retainer, because his site ranked; then Google Local Services Ads, because those leads were expensive; then Yelp and a shared-lead marketplace, both of which he described with a sigh. I asked one question. Of the jobs you invoiced last month, which channel produced the most revenue?
He gave me a number. I asked how he knew. He said his office manager tracked it. She was in the room. She said she tracked it when the customer told her, which was maybe half the time, and that most of them said "Google."
What is marketing attribution for home service businesses?
Marketing attribution ties a booked, paid job back to the ad, listing, or referral that produced the first contact. For a home service company it is a chain of custody, not a statistical model: a distinct phone number or tagged web form captures the source, the office puts that source on the job at booking, and the accounting system reports revenue by source at month end. If any one link breaks, the whole channel report becomes opinion.
We picked one job and walked it backwards
Instead of arguing about the whiteboard, we pulled one invoice — a sewer line replacement, a little under ten thousand dollars, closed three weeks earlier. Good job, clean margin, exactly the kind of work he wanted more of. I asked where it came from.
The invoice said nothing. We opened the job record. Lead source: blank. We opened the customer record. Lead source: "Google," typed by someone at some point, no date on it. We opened the phone log. There was a call three weeks earlier from that number, inbound, forty-one seconds, answered. Which of his six listed numbers had it rung? He had one number. Everything pointed at one number. The truck wrap, the yard signs, the website, the LSA profile, the Yelp page, the invoices, the door hangers — one number on all of it.
That was the whole diagnosis. He was not missing a report. He was missing the ability to generate one. Every channel emptied into the same funnel and the funnel had no memory.
Here is the part that mattered more than the missing number, though. When we scrolled further back in the call log, we found the same homeowner had called eight days before that. Nineteen seconds. Nobody picked up. No callback. He almost lost a ten-thousand-dollar job before the attribution question was ever relevant, and if that first call had been the only one, his eventual channel report would have shown a channel that produced nothing. Attribution failures and missed call problems are the same wound seen from two angles: one costs you the job, the other costs you the ability to learn from it.
The three mechanics that make the trace possible
What we built over the next two weeks was not sophisticated. It was three habits and about an hour of setup each.
1. One tracked number per channel, and only per channel
Every offline channel gets its own tracked number that forwards to the main line: one on the truck wraps, one on the door hangers, one on the yard signs, one on the Yelp listing, one on the Google Business Profile. Website traffic gets dynamic number insertion, which swaps the displayed number based on how the visitor arrived, so a paid click and an organic visit ring different numbers.
Two details owners get wrong here. First, the Google Business Profile. Google's guidelines for representing your business allow a tracking number as the primary phone as long as your real main number stays listed as an additional number — the mistake is replacing the main number outright, which quietly breaks the name-address-phone consistency that citations across directories depend on. Second, register your tracking numbers with the carriers' caller-ID databases. Unregistered numbers get labeled "Spam Likely" on outbound callbacks, and a channel whose callbacks never connect looks like a bad channel when it is really a bad phone number. If you turn on call recording, remember that all-party-consent states — California, Florida, Washington, Illinois and Pennsylvania among them — require the announcement to play on the line. Every real call tracking platform ships that pre-roll; use it.
2. Hidden fields on every web form
Web forms should capture, invisibly, the UTM parameters, the Google click ID, the landing page, and the referrer, and those values should ride into the CRM as the lead source on the new customer record. This matters more than it used to. GA4 no longer offers the first-click, linear, time-decay, and position-based models that contractors were used to pulling out of Universal Analytics, so the "assisted conversion" view that people half-remember is not available to reconstruct after the fact. If the tag is not on the form at submission, that information is gone.
Where the tag lands depends on your platform, and the platforms genuinely differ. Jobber hangs lead source on the client. Housecall Pro puts it on the job and lets you make it a required field. ServiceTitan carries a campaign on the job record. That means "our lead source report" means three different things at three different shops, and it is worth knowing which yours is before you draw conclusions from it. If you are wiring automation into any of these, the integration realities between AI tools and Jobber, Housecall Pro, and ServiceTitan decide how much of this can run without a human retyping it.
3. The ask, moved to the right moment
His office manager was asking "how did you hear about us?" at the end of the call, as a courtesy, and skipping it when the customer sounded impatient. We changed two things. The question moved to the booking step, right before confirming the appointment window, where the customer is already answering questions and expects to. And the wording changed from an open-ended question to a short forced choice: "Last thing — did you find us on Google, see one of our trucks, or did somebody refer you?"
Open questions get "Google." Three named options get a real answer roughly twice as often, in my experience, and "somebody referred you" prompts the customer to volunteer the name, which is worth having on its own.
Why "how did you hear about us" lies, and how to make it lie less
Self-report is not a measurement. It is a memory, and it is systematically biased in one direction: toward the last thing the customer touched, which is almost always a search.
Watch the actual path. A homeowner sees a wrapped van at a neighbor's house on Tuesday. Sunday night the water heater goes. She types the company name into her phone, taps the Local Services Ads result at the top, and calls. Google charges for that lead. The LSA dashboard books a win. The homeowner, asked how she heard about you, says "Google" — and she is not lying. She just cannot see that the van created the demand and the ad captured it. Branded search sits at the end of nearly every offline channel and quietly takes credit for all of them.
So run both signals and use them for different decisions. The tracked number decides where the budget goes. The self-report tells you what created the demand. When they conflict — wrap number rang, customer says Google — you have just learned that your wraps are working and your branded search is collecting the credit. That is a genuinely useful thing to know, and neither signal alone would have told you.
The scoreboard that replaced the gut call
At the end of the first full month we built one table. Six columns, one row per channel:
- Leads — calls and forms, deduplicated against existing customers
- Booked jobs — leads that made it onto the calendar
- Completed revenue — invoiced and collected, not quoted
- Spend — including the retainer, the print run, the wrap amortized over its life
- Cost per booked job
- Revenue per dollar spent
Two rules make that table honest. Measure at the job level, not the lead level, because channels produce wildly different work. His LSA leads were mostly clogged kitchen lines. His wrap and referral leads were repipes and sewer replacements. Same lead count, five times the ticket. A cost-per-lead comparison would have told him to cut the wraps.
Second, match the reporting window to the sales cycle. Drain and no-cool calls close same day, so a trailing 30 days is fine. Repipes, sewer replacements, roof replacements, and HVAC changeouts run 30 to 90 days from estimate to signed job, so judging those channels on a trailing 30 structurally undercounts them. He evaluated demand-capture channels monthly and demand-creation channels on a rolling 90.
Four places the trace still broke
The tech overwrote the field. On mobile, closing out a job, a tech would set lead source to whatever was at the top of the picklist to clear a required field. Fix: lock the field after booking, or make it office-editable only.
>Unanswered leads made good channels look bad. Two months in, his marketplace channel showed a terrible close rate. It was not the channel. Those leads arrived at 6:40 p.m. and got called back the next morning, by which point the homeowner had booked somebody else. Shared-lead marketplaces are structurally a race — the FCC's one-to-one consent rule, which would have restricted selling the same homeowner's request to several contractors, was vacated by the Eleventh Circuit in January 2025 before it took effect, so those leads still go out to multiple companies at once. Before you cut a channel for poor conversion, confirm you were actually answering those leads inside five minutes. Otherwise you are measuring your response time and calling it channel quality.
LSA charged leads and LSA leads are different numbers. Local Services Ads bill per lead, and Google allows disputes for leads outside your service area or service categories. If nobody disputes, spend is overstated and the channel looks worse than it performs. Someone should be reviewing that inbox weekly.
Number pools recycled too fast. A short pool of dynamic numbers gets reassigned quickly, so a homeowner who saved the number in March and called in June gets attributed to whatever campaign holds that number now. Size the pool for your traffic and set a long enough session window.
What to do Monday
- Pull your five largest completed jobs from last month and try to name the source of each. Whatever breaks first is your real problem.
- Buy one tracked number per offline channel and one for the Business Profile. Keep the main number listed everywhere as an additional number.
- Add hidden UTM, click-ID, and landing-page fields to every web form and map them into the CRM lead source.
- Move the source question to the booking step and give the customer three named options instead of an open question.
- Lock the lead source field after booking so it cannot be overwritten in the field.
- At month end, build the six-column table. Look at revenue per dollar, not cost per lead.
Six weeks after that whiteboard session, he moved money. Not dramatically — he cut the shared-lead spend by roughly half, put it into a second wrapped van and a bigger LSA budget in the two zip codes producing his repipes, and left the SEO retainer alone because the tracked organic number was producing more revenue than he had believed. What he told me, and what I have heard from other owners once the trace holds, is that the relief was less about the money and more about no longer guessing. The decision was still his. The data just stopped arguing with him.
That is the whole point of doing this well. Attribution does not tell you what to do. It removes the fog so your judgment about your own market gets to work with facts. If you want the wider frame — where measurement fits alongside intake, follow-up, and the rest of the operation — the marketing automation playbook for contractors covers how the pieces connect, and the way we approach this at Turnkey AI is always to fix the trace before touching the budget.
Questions owners actually ask about this
Will tracking numbers hurt my Google ranking? Not if you keep your real main number listed as an additional number on the Business Profile and leave your existing citations alone. The risk comes from replacing your number across directories, not from adding a tracked one.
My CSR forgets to ask. Now what? Make the source field required at booking rather than at close, give three named options, and let the tracked number cover the calls where the ask still gets missed. The number is the backstop; the ask is the color commentary.
How long before the data means anything? Thirty days for same-day service work, ninety for replacement work. Two weeks of data will point you at the wrong channel with total confidence.
Should I use my software's built-in report or a separate tool? Start with what is already in your field service platform. It is usually enough to see channel-level revenue. Add a dedicated call tracking platform when you need per-channel numbers, recordings, or dynamic insertion on the website.
Frequently asked questions
Will using call tracking numbers hurt my Google ranking or local listings?
Not if you keep your real main number listed as an additional number on your Google Business Profile. Google's guidelines allow a tracking number as the primary phone in that setup. The ranking risk comes from replacing your number across directories and breaking name-address-phone consistency, not from adding a tracked line.
My office staff forgets to ask how customers heard about us. How do I fix that?
Move the question to the booking step instead of the end of the call, make it a required field before the appointment is confirmed, and offer three named options rather than an open question. Tracked numbers cover the calls where the ask still gets skipped.
How long do I need to track before the numbers mean anything?
Thirty days for same-day service work like drain calls and no-cool calls. Ninety days for replacement work such as repipes, sewer lines, roofs, and HVAC changeouts, because those carry a 30 to 90 day lag from estimate to signed job. Two weeks of data will confidently point you at the wrong channel.
Why do my shared-lead marketplace leads convert so poorly?
Usually response time, not lead quality. Those platforms sell the same homeowner's request to several contractors at once, so the first company to call generally wins. Before cutting the channel, confirm you were actually calling those leads back within a few minutes, including evenings and weekends.
Should I compare channels on cost per lead or something else?
Compare revenue per dollar spent, measured on completed jobs. Cost per lead treats a clogged kitchen line and a sewer replacement as the same outcome, which will lead you to cut the channels producing your biggest tickets.