Short answer: Measure local SEO ROI by tracking outputs, not rankings: count every lead path (Google Business Profile calls, call-tracking numbers, website forms), separate qualified calls from tire-kickers, then run the jobs-won formula — revenue from SEO-booked jobs divided by your SEO spend. Add an intake question to catch AI-referred leads your analytics miss.
Your agency sends a report: rankings up, impressions up, traffic up. Your bank account says something quieter. Somewhere between those two stories is the only number that matters for a trade business: how many jobs did SEO put on the schedule, and what were they worth?
This is the measurement system that answers that question. It starts with tracking the right inputs, separates qualified calls from noise, runs the jobs-won formula on your own numbers (no borrowed benchmarks, no invented percentages), and ends with the intake question that catches the AI-referred leads your analytics cannot see.
ROI is outputs divided by spend, but you cannot compute outputs you never measured. Before the math, the plumbing: make sure every lead path is actually being counted.
Reconcile weekly: tracking-number rings plus profile call estimates plus form fills. That is your gross lead count. It is not ROI yet, because gross counts lie. Which brings us to the step everyone skips.
A call is any ring. A qualified lead is a caller with a real job in your service area who can afford it. Price-shoppers, wrong numbers, vendors selling you something, and callers from towns you do not serve all inflate call counts without adding a dollar of revenue. Measuring ROI on raw calls overstates results, and it is how agencies make mediocre campaigns look good.
The discipline matters because of what comes next: the formula only works on qualified calls and booked jobs. Garbage in, fantasy out.
The only ROI formula a trade business needs: (jobs won × average job value) minus total SEO spend, divided by total SEO spend. Everything else is a vanity metric.
Here is the whole thing, with your numbers:
Revenue from SEO = jobs won from SEO × your average job value. Jobs won, not calls. Average job value, not the biggest job you ever sold. Be conservative: use the trailing three months.
ROI = (revenue from SEO − total SEO spend) ÷ total SEO spend. Total spend includes the retainer or agency fee, plus your own time valued honestly, plus any tools. If you spend ten hours a month on review follow-ups, that is ten hours of your billable rate, and hiding it flatters the math.
Two derived numbers run your decisions month to month:
Notice what is missing: no industry benchmarks, no "average contractor ROI". A $150 cost per lead is expensive for a $120 gutter cleaning and cheap for a $12,000 roof. Your numbers are the only ones that matter. If you want the spend side of the equation, our contractor pricing guide covers what each tier actually buys.
How long until the formula turns positive? For trade businesses, the honest pattern: calls start lifting by month three, and top-three map-pack positions average around 90 days of consistent work. That is the investment period. After that, the curve compounds: reviews keep arriving, pages keep aging, and the same monthly spend buys more than it did at the start.
Payback speed depends mostly on job value. A plumber averaging $600 a job needs a handful of booked calls a month to break even on a typical retainer. A landscaper averaging $80 a job needs far more volume, which means the timeline stretches. This is why the "how long does it take" question has no universal answer, and our timeline guide breaks it down trade by trade.
One warning: expect compounding, not a spike. Local SEO is a flywheel, not a faucet. Anyone promising page-one paybacks in two weeks is selling the kind of guarantee Google itself warns against.
Here is the measurement gap nobody talks about. When ChatGPT or Gemini recommends your business and the homeowner calls, your analytics see an untracked call. There is no referrer, no UTM, no label. AI-referred leads are invisible to every dashboard, which means businesses under-credit the fastest-growing lead source in local search.
This is low-tech on purpose. Call tracking cannot label a ChatGPT referral, but a human asking one question can. The businesses that measure AI leads are the ones that will keep investing in AI visibility while competitors argue about whether it exists.
Put it all on one page, once a month, and the ROI conversation with yourself (or your agency) gets very short. Five numbers:
Run it for three months and you will know more about your SEO's value than any rankings report ever told you. And if an agency ever pushes back on being measured this way, that tells you something too. Our agency autopsy shows what bad measurement has cost other shops.
Most trade businesses see calls lift by month three, with top-three map-pack positions averaging around 90 days. Payback depends on your job value: a plumber averaging $600 a job needs far fewer booked calls to break even than a landscaper averaging $80. Track it monthly against your own spend, and expect compounding, not a spike.
A call is any ring; a qualified lead is a caller with a real job in your service area who can afford it. Price-shoppers, wrong numbers, vendors, and out-of-area callers inflate call counts without adding revenue. Measuring ROI on raw calls overstates results; measuring on qualified calls, then booked jobs, tells you what SEO actually earns.
Yes, with one rule: keep your real number consistent everywhere public, and use the tracking number only where you can control the display, like your website or ads. Your name, address, and phone number must stay identical across directories, or you will trade attribution for rankings. Reconcile weekly: tracking number rings plus profile call estimates.
Your analytics will not tell you, because AI referrals rarely arrive labeled. The practical system is intake scripting: every caller gets asked how they heard about you, and your CRM logs 'AI assistant' as a source. Ask specifically: 'Did ChatGPT, Gemini, or another AI tool recommend us?' The answers will surprise you.
There is no universal number, only your math: divide total SEO spend by qualified leads, then compare that cost per lead to your average job value times your close rate. A $150 cost per lead is expensive for a $120 gutter cleaning and cheap for a $12,000 roof. Benchmarks from other markets are noise; your own numbers are the signal.
Profile, Maps rankings, citations, reviews, competitors, plus whether AI assistants recommend you. A prioritized action plan, free, no pitch.
Delivered within 48 hours. Yours to keep.