Home/Resources/How $5-20M Operators Measure Marketing ROI

Strategy guide

How $5-20M Operators Measure Marketing ROI

For $5–20M home-service operators Brand voice: receipts, not pitches No paywall, no email gate Updated 2026-Q2
spreadsheet on laptop with coffee

Most operators can’t answer the simplest question: what’s each marketing dollar actually bringing in? You don’t know if you’re spending $2,000 a month and getting back $8,000 in gross margin, or burning cash. That’s the difference between a business that scales and one that stalls.

The Core Formula: What You Need to Know

Forget the agency word salad. ROI measurement for a home-service operation is arithmetic, not mystery.

Pipeline Added ÷ Marketing Spend = Cost Per Lead

Cost Per Lead × Close Rate × Average Job Value = ROI

That’s it. If you spent $3,000 on Google Local Services Ads last month and those ads produced 20 leads, your cost per lead is $150. If your plumbing crew closes 30% of leads (6 jobs) and the average job is $1,200, you put $7,200 gross revenue on the board from a $3,000 spend. That’s 2.4x return (not counting labor and material cost, but that’s a different conversation).

The trap most operators fall into: they don’t track which leads came from which channel, so they can’t do this math at all. You end up guessing. Guessing kills growth.

LAUNCHER LEDGER — REAL CLIENT RECEIPTS TRAILING 90 DAYS · 2026-Q2
HVAC-04 HVAC operator, 4 locations — booked jobs added Q1 +842
PLB-02 Plumbing operator, 2 metros — pipeline added Q1 $1.9M
RFG-01 Roofing, regional — cost-per-booked-job reduction (90d) −43%
ELC-03 Electrical, 3 markets — LSA win-rate lift (90d) +38%

Attribution Windows: The Hidden Timing Problem

A lead doesn’t always turn into a booked job the same week it lands in your inbox. Some close in 2 days. Others take 3 weeks. If you only look at revenue closed in the same calendar month as the ad spend, you’re missing half the picture (or overstating it).

Set a 30-day attribution window as your baseline. Any lead that comes in during Month 1 gets credited to Month 1 spending, even if the job books in Week 2 of Month 2. This is standard practice in HVAC, plumbing, and roofing because your close cycle is typically 7–21 days.

If your seasonality is heavier (say, roofing after a storm can have a 5–10 day close cycle, or HVAC emergency calls close within 24 hours), adjust down. If you’re selling annual maintenance plans that take longer to close (30–45 days), extend it. But pick one window and stick with it for 90 days minimum so you can spot patterns.

Don’t switch windows mid-quarter. That’s how you end up comparing apples to oranges.

Separating Organic from Paid: The Real Challenge

This is where most operators get it wrong. You run Google Ads and you get 15 calls. You also get 8 calls from past customers referring friends. You get 3 calls from someone who found you on Google Maps search (organic, no ad spend). You get 2 from your website (organic). Are all 28 calls results of your paid campaign? No. But they’re all in your pipeline the same week.

Here’s how to untangle it without going insane.

Track the Source on Every Lead

Your dispatch software (ServiceTitan, Jobber, Housecall Pro, etc.) or even a simple Google Sheet should have a field that says where the lead came from. The options should be: Google Ads, Google Maps (organic), Website (organic), Referral (past customer), Referral (network), Phone (cold inbound, no source), Other.

When someone calls, your office asks: “How did you hear about us?” Train your staff to ask every single time, and log it. This takes 30 seconds and it’s the difference between data and noise.

Use UTM Parameters on Digital Ads

If someone clicks your Google Ad and lands on your website, then calls, the phone number they call should be tracked (use a call-tracking number like CallRail or Invoca). That call gets tagged with the UTM parameter from the click (utm_source=google, utm_medium=cpc, utm_campaign=emergency_plumbing). Same if you run Facebook ads to your website.

If you’re not using call tracking yet, start. A basic call-tracking number costs $20–50 per month and will save you hundreds in wasted spend because you’ll finally see which campaigns actually ring phones.

Organic Means No Direct Ad Spend

Google Maps organic (customers finding you in local search without clicking an ad) and referrals don’t count toward your paid marketing ROI. They’re separate. Track them separately. Celebrate them (they’re high-margin, usually), but don’t fold them into your ad spend analysis or you’ll convince yourself your ads are better than they are and overspend.

Real numbers from a $12M plumbing operation: 40% of leads came from Google Ads (ad spend: $8,000/month). 25% came from Google Maps organic (no ad spend, but Google Business Profile optimization takes internal labor). 20% came from referrals (past customers). 15% from website organic (content, local SEO). If you only measure the Google Ads channel against total pipeline, you understate its real cost per lead and you’ll keep scaling that spend when there’s not much room left.

The Last-Touch Attribution Trap

Last-touch attribution says: whoever touched the customer last before they booked gets credit for the whole sale. This is poison for your ROI math.

Scenario: A customer sees your Google Ad on Monday. They don’t call. They search for you on Google Maps on Thursday and click through to your website. They call Friday and book a job. Last-touch says: “The website booked this job.” Google Ads gets zero credit. But the ad created the first impression. Without it, they wouldn’t have known to search for you.

Multi-touch attribution is more honest, but it’s also more work. The practical operator’s middle ground is this: count any touchpoint in the 30 days before a booked job as a contributing factor, but weight the most recent touch heaviest (say, 50% of credit) and split the remaining 50% across earlier touchpoints.

Or keep it simpler: ask your customer on the phone or in the intake form, “What was the main reason you called us today?” and log that reason. “I saw your Google Ad,” “Friend referred me,” “Found you on Google Maps,” “Saw your website,” “Called because you came out last year.” That’s your primary attribution. It’s not perfect (memory is fuzzy), but it beats staring at your phone system data and guessing.

Real Math: A $15M HVAC Company Example

Last quarter, this operator spent $24,000 total on marketing (Google Local Services Ads, Facebook ads, and Google Maps/website management labor baked into marketing salary).

Pipeline produced:

  • 240 leads from Google Local Services Ads ($12,000 spend)
  • 120 leads from Facebook ads ($6,000 spend)
  • 80 leads from Google Maps organic (no direct spend)
  • 60 leads from past customer referral (no direct spend)
  • 100 leads from website organic (internal labor only, ~$6,000 salary allocation)

Close rate: 22% (industry standard for HVAC is 15–30%, depending on type of work).

Average job value: $2,800 (installation jobs run $4,000+, maintenance is $400–600, so it balances).

Booked jobs from paid channels: (240 + 120) × 0.22 = 79 jobs.

Revenue from paid channels: 79 × $2,800 = $221,200.

Marketing spend (paid only): $18,000.

ROI: $221,200 ÷ $18,000 = 12.3x return on ad spend.

That’s assuming zero cost of goods sold, which is fantasy. But gross margin on HVAC work runs 50–65%, so actual profit from those jobs is roughly $110,000–$143,000 against $18,000 spend. That’s 6–8x return. That operator should scale that spend.

Now separate: Google Ads alone brought 240 leads, closed 53 jobs, $148,400 revenue from $12,000 spend = 12.4x return. Facebook brought 120 leads, closed 26 jobs, $72,800 from $6,000 = 12.1x return. Both channels are almost identical. But the operator was planning to kill Facebook because they “felt” less effective. Math saved $6,000 a month in potential cuts.

The Mistakes That Kill ROI Measurement

Not tracking source on every lead. You’ll never know what works.

Measuring monthly instead of 30-day windows. Calendar months don’t align with your sales cycle. Use rolling 30-day periods.

Mixing organic and paid ROI together. They’re different business levers. One costs cash now. One is mostly internal labor or accumulated brand equity. Track separately.

Changing your attribution method quarterly. Consistency matters more than perfection. Pick a method and run it for 90 days before adjusting.

Including cost of goods sold as a marketing metric. ROI at the marketing level is revenue-to-spend. Profitability is a different calculation. Don’t conflate them.

What to Do This Week

Pick one channel you’re actively spending money on (Google Ads, Facebook, local service ads, whatever). For the last 30 days of data, manually count how many leads it produced and which ones booked. Divide leads into booked jobs. Divide booked jobs into gross revenue. Divide gross revenue by your ad spend. That number is your real return.

It will either be 2x (you’re spending $1 to get $2 back), 5x, 10x, or it will be sub-1x (you’re losing money). That number tells you whether to scale, hold, or kill that channel. No agency fluff needed. Just receipts.

After this week, set up a simple Google Sheet that tracks lead source for every incoming call and email inquiry. Ask your front desk to add the source field to your intake form. By end of month, you’ll have your first clean data set. By end of quarter, you’ll know exactly what’s working.

That’s how you stop burning cash on marketing and start building a predictable pipeline. The math isn’t hard. You just have to do it.

Receipts

Three operators. Three numbers that didn’t exist before us.

Operator confidentiality means we don’t name names publicly. We’ll connect you with the operator on a 1:1 reference call after the diagnostic.

HVAC · 4 LOCATIONS +842 Booked jobs added in Q1

$9M HVAC operator with two underutilized markets. We rebuilt local SEO + LSA + speed-to-lead in 45 days. Q1 booked 842 jobs above prior-year baseline.

Multi-market HVAC · LLL since 2025

PLUMBING · 2 METROS $1.9M New pipeline / Q1

Plumbing operator leaning 90% on referrals. We launched paid + programmatic SEO across two metros. Q1 added $1.9M attributable.

Multi-metro plumbing · LLL since 2025

ROOFING · REGIONAL −43% Cost-per-booked-job, 90 days

Roofing operator with $480 cost-per-booked-job. We rebuilt LSA + landing pages around storm triggers. CPBJ down 43% in 90 days, same spend.

Regional roofing · LLL since 2025

Common questions

Ready to swap dashboards for a calendar full of jobs?

30-minute strategy call. We pull your numbers, find the bottleneck, give you the plan. No deck. No pitch. No follow-up sequence.

3 diagnostic spots open this month