I've been on calls with four home service owners in the last seven days. Different states, different sizes — one doing $1.8M in a bad year and $4M in a good one, another pushing from $4.3M toward $10M, another spending $15K a month on ads in Texas.

All four have the same blind spot. And odds are, you do too.

The problem

Every one of them is spending real money on marketing — 4% to 8% of revenue, climbing toward 10%. Meta. Google LSA. Yelp. SEO agencies. Call tracking software. Sometimes three or four of those running at once.

None of them can tell me, with any confidence, which channel is actually producing closed revenue.

They can tell me cost per lead. They can tell me total spend. A few can tell me which channel drove a phone call last Tuesday. But when I ask "which channel produced the $380K in jobs you closed last month?" — the room gets quiet.

Why it happens

It's almost never one thing. It's three, stacked on top of each other:

1. The same phone number is on everything. Your Meta ads, your LSA, your Yelp listing, your website, your truck wraps, your yard signs — all pointing to the same number. When a call comes in, there's no way to know whether it came from the $2K you spent on Facebook or the $5K you spent on LSA. Everything just lands in the same ring group and gets labeled "inbound call."

2. Nobody's capturing lead source at intake. Your web forms don't have a source field — or if they do, it's a dropdown most homeowners skip. Your phone intake doesn't require one either. And even when your CSR does ask "how did you hear about us?" — the answer is almost always the same generic, useless reply: "Google." That's not a channel. That could be LSA, organic search, Map Pack, a paid Google ad, or a homeowner who googled your name after seeing your truck in their neighbor's driveway. You can't make a budget decision off "Google." The result: your CRM is full of blank source fields, "web form," "phone," and "Google." Useless for attribution.

3. Leads live in one system, jobs live in another. This is the big one. You might have Go High Level or a call tracker capturing the lead. Then the lead gets re-entered into your estimating tool — Roofer, JobNimbus, Leap, AccuLynx — and the sales process takes over. The source data doesn't travel with the lead. By the time the job closes in your production system, the original channel is gone. You have revenue in one tool and marketing spend in another, and nothing connects them.

So you keep funding the channel that generated the most leads instead of the channel that generated the most revenue. Those are almost never the same channel.

I've seen it over and over: Yelp produces 40% of the leads and 5% of the closed revenue. LSA produces 15% of the leads and 50% of the closed revenue. Referrals produce zero "spend" but 30% of the jobs. If you're making budget decisions on lead volume, you're actively starving the channel paying your bills.

What to do this week

Go back to the last 10 jobs you closed. Not leads. Not opportunities. Paid invoices.

For each one, write down the original source: Google LSA, Meta, referral, Yelp, SEO, repeat customer, BNI, whatever. If you don't know, call the homeowner and ask — they'll usually remember. "Hey, quick question — how did you first hear about us?" Thirty-second call.

Then match that against what you spent per channel during the 60 days before those jobs closed.

That's your real ROAS. Not the dashboard number your agency sends you. The actual one.

You'll almost certainly find:

  • One channel is carrying the others.

  • At least one channel is producing zero closed revenue and you're still funding it.

  • Referrals are doing more work than you thought, and you're not nurturing them intentionally.

Make your next budget decision based on that number. Not cost per lead. Not impressions. Not clicks. Closed revenue per dollar spent.

One thing. Do it before Friday.

— Matt

P.S. If pulling this data is a mess because your CRM, call tracking, and ad platforms don't talk to each other — that's exactly the problem we solve for contractors. Reply "attribution" and I'll send you a free diagnostic on where your tracking is leaking.

Keep reading