Most local SEO reports show keyword rankings and a line about "impressions up 40 percent." An owner reads it, cannot tell whether the phone rang more because of the work, and quietly starts wondering if the money is doing anything. That gap between activity and results is the reason a lot of good local SEO gets cancelled and a lot of bad local SEO keeps getting paid for.
This is a framework for measuring local SEO the way an owner actually thinks about it: calls, booked jobs, and revenue, with cost attached. It covers what to measure, how to set a baseline, how to track calls and form leads properly, how to read Google Business Profile data, how to connect a lead to a completed job, and where the measurement genuinely breaks down so you are not fooled by a number that looks precise but is not. The same approach applies to any local channel, paid search, Local Services Ads, directories, not just organic work, so once you build it you can judge every marketing dollar the same way.
Why a ranking report is not a results report
Rankings are an input. They are worth tracking, because they tell you whether the work is having the intended effect on visibility, but they are not the outcome, and treating them as the outcome causes two problems.
Rankings are personalized and volatile
Two people searching the same term from different points in your service area, on different devices, signed into different accounts, see different results. A "rank 3" in one report might be rank 1 for someone standing near your shop and rank 6 for someone across town. Rankings also bounce day to day for reasons that have nothing to do with your work. A report that leads with "you moved from position 4.2 to 3.8" is reporting noise as if it were progress.
Rank does not equal calls
You can rank first for a term nobody searches, or first for a term where the searcher is a competitor checking on you, or first and still lose the call because your review rating is lower than the business at position two. Ranking is necessary but not sufficient. The thing you are actually buying is more qualified people contacting your business, and more of them becoming jobs.
What a results report answers
A useful report answers questions an owner cares about: How many calls did we get this month, and from where? How many became booked jobs? What did those jobs bill? How does that compare to before we started, and to last month? What did we spend to get it? Rankings and traffic belong in the report as supporting detail, not as the headline.
The trap of vanity metrics
Impressions, clicks, and "profile views" all go up when a campaign is active, and a report built on them will always look positive. That is exactly why they are comfortable for a vendor to lead with and useless for a decision. An owner cannot spend impressions, cannot make payroll with profile views, and cannot tell from a clicks chart whether to keep paying. If a report never shows booked jobs and cost per booked job, assume the news it is hiding is not good, and ask for the numbers that matter.
The metrics that actually matter
Here is the short list, roughly in order of importance for a service business.
- Calls, total and by source, and how many were answered or recovered.
- Form and message leads, total and by source.
- Booked jobs from those leads.
- Revenue from those booked jobs, ideally completed revenue, not just quoted.
- Cost per lead and cost per booked job, by channel.
- Lead quality: the share of leads that were in your service area, for services you offer, and worth booking.
- Google Business Profile actions: calls, direction requests, website clicks, and how those trend.
- Map pack visibility for your core terms, tracked as a trend from consistent locations, not as a single number.
- Organic visibility for service and city terms on your website.
- Review count and rating, because they drive both ranking and conversion.
Notice that rankings are ninth. They matter, but they are a leading indicator, and by the time you have call and job data you should be steering by that.
Setting a baseline before you start
The most common measurement failure is not having a "before." Six months into a campaign, the phone seems busier, but nobody can say by how much because there is no record of what normal looked like. Capture the baseline first.
What to record before any work begins
- Monthly call volume for the last 6 to 12 months if you have phone records, noting seasonality.
- Monthly booked jobs and revenue for the same period, from your invoicing or job software.
- Current Google Business Profile performance: screenshot the calls, directions, and clicks for the last 6 months from the profile's performance view.
- Current map pack position for your 3 to 5 core "service near me" terms, checked from 3 consistent points in your service area, with screenshots.
- Current organic rankings for your main service and city page terms.
- Current review count and average rating.
- Current website traffic and lead volume from analytics.
Account for seasonality
Local service demand swings with the calendar. Comparing October to July for an HVAC company tells you nothing useful. The right comparison is this October to last October, and this quarter to the same quarter last year, plus month-over-month within a season. If you do not have a full year of history, note that your early comparisons will be distorted by the season and be patient. The realistic timeline for what moves when is covered in how long local SEO takes to show results.
A simple baseline template
You do not need software for this. A one-page document with these rows, filled in for the trailing 12 months where you have data, is enough:
- Month, total calls, calls answered live, form leads, booked jobs, completed revenue.
- Google Business Profile: calls, direction requests, website clicks (screenshot the trend).
- Map pack position for each core term, checked from three fixed points, with the date and screenshots.
- Organic position for each main service and city page term.
- Review count and average rating on the first of the month.
- Website sessions and lead conversions from analytics.
Save it, date it, and do not touch it. In six months it is the only honest answer to "did this work," and in a year it is a record no vendor can spin.
Call tracking done right
Calls are usually the largest source of leads for a service business, and untracked calls are a blind spot you cannot afford. But call tracking done carelessly can hurt your local ranking, so the setup matters.
How call tracking works
You use tracking phone numbers that forward to your real line. Each number is tied to a source, one for your Google Business Profile, one for your website, one for paid ads, one for a specific campaign. When a call comes in, the system logs which number was dialed, so you know the source, and it can record the call and note the duration.
The NAP problem, and how to avoid it
Your business name, address, and phone number, the NAP, need to be identical everywhere for local ranking to work well, as covered in the NAP consistency guide. Swapping tracking numbers around, or using a different number on your profile than on your website, undermines that consistency. The safe approach:
- Google Business Profile: set one tracking number as the primary phone and leave it. Keep your real local number as an additional phone. Do not rotate it.
- Website: use dynamic number insertion that swaps the displayed number based on how the visitor arrived, but make sure the number in your site's structured data and footer NAP matches your profile's primary number, and that the tracking numbers all forward to the same place.
- Consistency check: whatever number you put on the profile should be the one in your schema markup and your main citations, so search engines see one consistent primary number.
Done this way, call tracking gives you source data without creating a data-consistency problem. Done carelessly, with a rotating profile number, it can cost you ranking.
Which calls to count as leads
Raw call volume overstates your lead flow, because it includes wrong numbers, robocalls, suppliers, existing customers calling to reschedule, and job seekers. Before you report a call count, filter it. A useful rule: a lead is a first-time or returning potential customer calling about work you might do. Everything else is a call but not a lead. Call tracking systems can auto-tag by duration, very short calls are usually not leads, but a person should spot-check, especially early on, because the auto-tagging is imperfect. Reporting "180 calls" when 110 were leads makes every downstream number wrong.
What to do with call data
Every tracked call gets categorized: which source, was it answered or missed, was it a real potential customer or a wrong number or a solicitation, and did it become a booked job. This is where call tracking connects to call handling, covered in call handling systems for local service businesses, and to revenue, covered below.
Recordings make the data trustworthy
Categorizing calls from a log alone means guessing. With recordings, someone can listen to a sample each week and confirm the tags: this really was a qualified lead, that one was a supplier, this "missed" call was recovered by text. The sample check keeps the whole dataset honest, and it doubles as coaching material. Recording laws vary by state, so use a recorded-greeting disclosure where all-party consent is required.
Form and web lead attribution
Not every lead calls. Form fills, chat messages, and booking widget submissions all need tracking too.
Tag the source
Your analytics should record how each form submitter arrived: organic search, the Google Business Profile website link, paid, direct, referral. A hidden field on the form that captures the traffic source, or proper analytics event tracking on the form submission, makes this possible. Without it, every web lead looks like it came from nowhere.
Track the form as a conversion
Set up the form submission as a conversion event in your analytics so you can see how many you get, from which channels, and how that trends. If you run Google Ads, import that conversion so the ad platform can optimize toward leads rather than clicks.
Connect the form lead to the outcome
A form lead is only useful if you know what happened to it. Route form submissions into the same system where you track calls and jobs, so a submission on Tuesday can be marked "booked, 1,200 dollars" the following week. The tools for this are usually a CRM or field service software, covered in the leads-to-revenue section.
Do not forget the profile's own lead paths
Google Business Profile has its own contact routes beyond the call button: the website link, the messaging feature, and a booking link if you use one. Each is a lead. The website link sends people to your site, where your normal analytics and forms take over, as long as you have tagged that traffic as coming from the profile. Profile messages live in the profile or the app and are easy to ignore, so assign someone to check them daily and log them like any other lead. A booking link that writes straight into your schedule is the cleanest of all, because the lead and the appointment are the same event.
Chat and text leads
If you run website chat or accept inbound texts, treat those as leads with sources too. A chat conversation that ends in a booking is worth exactly as much as a phone call that does, and it should show up in your totals. Many businesses under-report their true lead volume simply because chat and text sit outside the phone log and never get counted.
Google Business Profile performance data
Your profile has its own performance view, and it is one of the most direct signals of whether local SEO is working.
What it shows
- Calls made from the profile, by month, with a trend.
- Direction requests, people who tapped for directions to your location.
- Website clicks from the profile.
- Messages, if you have messaging on.
- Searches that showed your profile, and which terms, and whether people found you by name or by category.
- How people found you: discovery searches, meaning category searches like "plumber near me," versus direct searches for your business name.
How to read it
The number to watch most closely is the balance of discovery versus direct searches, and the trend in profile calls and website clicks. Rising discovery searches mean more people are finding you by category, which is what local SEO is supposed to produce. Rising profile calls and direction requests mean that visibility is turning into contact. If your rankings improved but profile calls are flat, something is wrong with your profile's conversion, your primary photo, your review rating relative to competitors, or your hours.
Export it monthly
The profile's data view has a limited history window, so export or screenshot it every month. Over a year you build a record that shows the real trajectory, which the profile itself will not keep for you.
Compare against what you can change
Profile performance responds to specific inputs, so when a number moves, connect it to a cause. Added a full set of new photos, and website clicks rose the next month? Worth noting. Review rating slipped below the top competitor, and profile calls flattened even though searches kept climbing? That is a conversion problem on the profile, not a visibility problem. The value of tracking these monthly is that it turns a vague sense of "things seem better" into a chain of cause and effect you can act on.
A note on AI and search features
As Google adds AI-generated answers and other search features, some of the visibility your profile earns happens in places the profile's own metrics do not fully capture. Google has been adding reporting for these, but the picture is incomplete. Treat profile performance data as a strong directional signal, not a complete census of every time your business appeared.
Connecting leads to booked jobs and revenue
This is the step most local businesses skip, and it is the one that turns a marketing report into a business decision.
You need one place where a lead becomes a job
A lead comes in as a call or a form. Someone books it as a job. A tech completes it and it gets invoiced. If those three events live in three disconnected places, a phone log, a paper schedule, and QuickBooks, you can never connect the marketing source to the revenue. The fix is a system, usually a CRM or field service platform like the ones built for the trades, where the lead is entered with its source, converted to a job, and tied to the invoice. Then you can run a report that says "leads from the Google Business Profile this quarter: 84, booked: 41, completed revenue: 62,000 dollars."
Offline conversion tracking
For businesses running Google Ads or Local Services Ads, you can close the loop further by importing the booked-job and revenue data back into the ad platform. Google Analytics supports importing offline conversion data, and Google Ads supports offline conversion import, so a lead that clicked an ad and later became a 3,000-dollar job can be attributed to that click. This is more setup than most small businesses need on day one, but for anyone spending meaningfully on paid, it is what lets the platform optimize toward revenue instead of raw lead count.
A practical pipeline, end to end
Here is what the flow looks like when it works, without heavy software:
- A call or form lead comes in. It is logged immediately with the source (from the tracking number or the form's captured source) and the requested service.
- The person handling intake marks it qualified or not, and if qualified, either books it or sets a follow-up.
- When it books, it becomes a job with a scheduled date, still carrying its source tag.
- When the job completes and is invoiced, the completed amount is recorded against that original lead.
- Once a month, someone runs the totals: leads by source, booked by source, revenue by source, and the cost figures.
The only hard requirement is that the source tag rides along from first contact to final invoice. If your field service software has a "lead source" field, use it religiously. If it does not, keep the spreadsheet and reconcile it to your invoicing monthly. Thirty minutes a month of reconciliation is the price of knowing what your marketing actually produces.
Keep it simple if you have to
If a full CRM is not realistic yet, a shared spreadsheet works: one row per lead, columns for date, source, type, in-area yes or no, service requested, booked yes or no, job value, notes. It is manual, but a business that fills it in honestly for three months learns more about its marketing than one with expensive software nobody updates.
Who does this, and when
Assign the reconciliation to one person, usually whoever runs the office, and give them a fixed slot: the first Monday of the month, an hour, before the month gets busy. If it is nobody's job it does not happen, and then you are back to steering by rankings. If an agency runs your marketing, they should be doing this with your job data, not just pulling their own platform numbers, and you should see the reconciled figures every month.
A worked example: reading a real month
Numbers make this concrete. Here is a simplified monthly picture for a plumbing company, six months into a local SEO engagement, compared to the same month last year.
| Metric | Same month last year | This month | Read |
|---|---|---|---|
| Qualified calls | 142 | 196 | Up 38%, most of the gain from the profile |
| Form and message leads | 18 | 34 | Website is now ranking for service terms |
| Booked jobs from marketing | 77 | 112 | Book rate held, so the extra leads converted |
| Completed revenue from marketing | 34,600 | 51,300 | Average job value roughly steady |
| Marketing spend (SEO + tools) | 1,900 | 2,400 | Modest increase |
| Blended cost per booked job | 25 | 21 | Falling, which is the goal |
| Qualified lead rate | 79% | 83% | Quality improved slightly, not diluted |
What the owner learns from this: the campaign is working, and it is working the right way, more qualified leads, a steady book rate, revenue up more than spend, and a falling cost per booked job. The profile is carrying the biggest gain, the website is now contributing, and lead quality did not drop as volume rose. That is a keep-going report, and it took no ranking chart to reach.
Now a different reading. Suppose calls were up 38 percent but booked jobs were flat. That would point straight at either lead quality (the extra calls were out of area or out of scope) or call handling (the calls came in and were not converted). Either way, the fix is not "more SEO." The report tells you where to look, which a ranking report never does.
Cost per lead versus cost per booked job
Cost per lead is the number vendors love to report, because it usually looks good. Cost per booked job is the number that tells you whether the channel is profitable.
Work the full calculation
Take a channel, say local SEO. Add up what you spent on it in a quarter, the agency fee or your internal cost, plus tools. Count the leads it produced, then the booked jobs, then the completed revenue. Now you have:
- Cost per lead: spend divided by leads.
- Cost per booked job: spend divided by booked jobs.
- Return: completed revenue divided by spend.
Do this for every channel: local SEO, Local Services Ads, regular paid search, referrals, repeat customers. The comparison is often surprising. A channel with a higher cost per lead can have a lower cost per booked job if its leads convert better, and a lower cost per lead can be worse if half those leads are junk.
Account for the lag
Local SEO spend in month one does not produce jobs until months three through six, and then it keeps producing for a long time at no additional cost. Comparing this month's SEO spend to this month's SEO jobs makes SEO look terrible early and unrealistically good later. Look at cost per booked job over a rolling 6 to 12 month window, and factor in that the asset keeps working after you stop paying, which paid channels do not.
Comparing channels honestly
Laid out side by side, a channel comparison for a service business often looks something like this, with the caveat that your real numbers depend on your trade and market:
| Channel | Cost per lead | Book rate | Cost per booked job | Keeps working when you stop paying? |
|---|---|---|---|---|
| Repeat and referral | Very low | Very high | Lowest | Yes, if you keep serving well |
| Organic local SEO | Falls over time | High | Low, after ramp | Yes, for a long time |
| Local Services Ads | Fixed per lead | Varies by category | Medium, category-dependent | No |
| Regular paid search | Per click, so higher effective | Medium | Medium to high | No |
| Third-party lead vendors | Low headline | Often low, shared leads | Frequently high | No |
The pattern that matters: the channels you own get cheaper per booked job as they mature and keep producing after you stop investing, while the rented channels hold a roughly fixed cost forever. A sensible plan funds the owned channels as the foundation and uses the rented ones to fill gaps and add controlled volume.
Blended cost per booked job
The number to steer the whole marketing budget by is your blended cost per booked job: total marketing spend divided by total booked jobs from marketing. When you add a channel, that number should fall or hold. When it rises, the new channel is not pulling its weight. How to size the overall number is covered in how much a local business should spend on marketing.
Lead quality, not just lead count
A report that says "leads up 30 percent" can hide the fact that the extra leads were all out of area, or for a service you do not want. Track quality alongside quantity.
Score every lead on three questions
- In area? Was the job address inside your target service area?
- In scope? Was it for a service you actually offer and want?
- Real intent? Was it a genuine potential customer, not a solicitation, a wrong number, a competitor, or a job-seeker?
A qualified lead is yes to all three. Your qualified lead rate, by channel, tells you which sources are worth expanding. If local SEO leads are 85 percent qualified and a lead-gen vendor's are 45 percent, that difference matters more than the raw counts.
Watch for setup-driven junk
Low lead quality is often a settings problem. A service area set too wide, a service list that includes work you do not want, a website that ranks for the wrong terms, or a Local Services Ads configuration that is too broad. When quality drops, check the configuration before blaming the channel.
Quality and quantity together
The useful metric is qualified booked jobs, not qualified leads and not total leads. A channel producing 60 leads at 80 percent qualified and a 40 percent book rate gives you about 19 jobs. A channel producing 100 leads at 45 percent qualified and a 25 percent book rate gives you about 11 jobs, from more calls and more effort. Reporting only the lead count would make the second channel look better. Following it through to booked jobs shows the truth, and it is the reason the whole chain, lead to qualified to booked to revenue, has to stay connected in your data.
Building the monthly report
A good report is one page and answers the owner's questions in order.
- Results this month: calls, form leads, booked jobs, completed revenue, each with the comparison to last month and to the same month last year.
- By source: the same numbers broken out by channel, so you can see what is carrying the load.
- Cost and return: spend by channel, cost per booked job, return on spend, and the blended cost per booked job.
- Lead quality: qualified lead rate by channel.
- Leading indicators: Google Business Profile calls, direction requests, and website clicks; map pack visibility trend for core terms; organic visibility trend; review count and rating.
- What we did and what is next: the actual work completed and the plan for next month.
Rankings and traffic charts can go in an appendix. They are useful for diagnosis, but they are not the headline, and an owner should be able to read the first section and know whether the marketing is working.
Review the report as a decision meeting
The report is not a document to file. Once a month, spend twenty minutes with it and answer three questions out loud: Is total booked-job volume from marketing growing compared to last year? Is the blended cost per booked job stable or falling? Which single channel should get more budget next month, and which should get less? If you cannot answer those from the report, the report is missing something. If you can, you are running your marketing like a business instead of hoping.
Signs your reporting is misleading you
Even a results-focused report can point you the wrong way if a few things are off.
You are counting raw calls, not qualified leads
If your call count includes suppliers, wrong numbers, and existing customers rescheduling, your cost per lead looks great and your book rate looks terrible, and neither is real. Filter to qualified leads first.
You are reporting quoted revenue, not completed revenue
A quarter can look strong on "revenue from marketing" if it counts every estimate sent. Count completed jobs, or at minimum signed jobs, so the number reflects money that actually arrives.
Your comparison period is wrong
Month-over-month across a seasonal boundary makes good months look like wins and bad months look like failures regardless of the marketing. Compare to the same period last year and look at rolling windows.
You are giving all credit to the last click
Last-touch attribution starves the channels that build awareness. If branded searches, direct traffic, and "how did you hear about us" mentions of your visibility are rising, upstream work is paying off even when the model credits the final branded search.
One big job is distorting the average
A single 40,000-dollar job in a slow month can make cost per booked job look amazing and hide a real slowdown. Look at job counts and median job value alongside totals.
The vendor picks the metrics
If your report changes shape every month and always highlights whatever went up, that is a sign it is being curated. Fix the report format once, keep it stable, and require the hard numbers, booked jobs and cost per booked job, in every edition.
Limitations and privacy you should be honest about
Attribution is useful and imperfect. Pretending it is exact leads to bad decisions.
The multi-touch reality
A customer might see your truck, look you up, read reviews, leave, come back a week later through a branded search, and then call. Which channel gets credit? Most tracking gives it to the last touch, which undercounts the channels that created awareness earlier. Do not over-optimize toward last-touch numbers. If branded searches and direct traffic are rising, something upstream is working even if the model cannot name it.
Some calls and jobs will never be attributed
Word-of-mouth referrals, a neighbor's recommendation, someone who saw you at a job site. Ask new customers how they heard about you and log it, because that qualitative data fills gaps the tracking cannot. Over a year, the "how did you hear about us" answers become their own dataset, and they often reveal that a channel you were about to cut is actually driving referrals two steps removed, or that your yard signs and truck wraps are doing more than any digital report shows.
Tools change, and reporting shifts with them
Analytics platforms get replaced, ad products get restructured, and search adds features that are hard to measure. Every few years the measurement toolkit changes enough to create a gap in the data. This is another reason to keep your own simple record of leads, booked jobs, and revenue by month in a format you control. When the platforms shuffle, your spreadsheet is still there, and it is still the truth.
Privacy and consent
Call recording laws vary by state, and some require all-party consent, which a recorded greeting handles. Analytics and tracking should respect the consent choices visitors make, and you should not be storing more customer data than you need or keeping it longer than you use it. Work with tools that handle consent properly, and if you are in a regulated space, get advice on what applies to you.
The goal is a good decision, not a perfect number
You will never have flawless attribution. You do not need it. You need enough signal to answer, each quarter: is total booked-job volume from marketing growing, is the blended cost per booked job stable or falling, and which channel should get more or less next quarter. A business that can answer those three questions with real data is far ahead of one steering by a ranking report, and it is in a position to keep investing in what works and cut what does not. If you also want the visibility trend that feeds all of this checked properly, run it against the quarterly SEO audit checklist so the leading indicators stay honest too.

