How to Measure Local SEO ROI: Calls, Leads, Bookings, and Revenue

How to measure local SEO ROI: calls, leads, bookings, and revenue

Your website is getting traffic, your Google Business Profile is generating calls, and your rankings have improved. Those are all encouraging signs, but none of them answers the question that really matters: is your investment in local SEO generating business?

To find out, you need to follow the entire customer journey. First, identify the contacts coming from Google. Then determine which ones were genuine opportunities, how many resulted in a booking or sale, and how much margin they generated. Only then can you compare the result with the amount invested in SEO.

Rankings explain performance, but they do not measure ROI

Rankings, impressions, and website visits show whether the business is gaining visibility. Phone clicks, form submissions, and booking requests indicate whether that visibility is prompting people to take action. Further along the journey come the commercial metrics: new customers, sales, revenue, and margin.

Each metric explains a different part of that journey:

  • Visibility: rankings, impressions, and the searches where the business appears.
  • Interaction: website visits, phone clicks, and direction requests.
  • Lead generation: answered calls, completed forms, and qualified leads.
  • Commercial results: completed bookings, new customers, revenue, and margin.

We recently worked with a business that still ranked well for several service pages but had experienced a considerable drop in leads. SEO was continuing to provide visibility. The problem was on the mobile version of the website, where a design change had made the contact form harder to find. Once the previous layout was restored, inquiries began to increase again.

This case shows why looking at a single metric is rarely enough. A drop in leads may come from lower rankings, but it could also be caused by a hard-to-find form, a modified call to action, or slower website performance. If traffic remains steady while inquiries decline, the problem may be that the website is failing to turn visits into inquiries. Attracting even more visitors probably should not be the first response.

Decide what counts as a lead and a sale

Before opening Analytics or checking your Google Business Profile, the business needs to decide what it intends to measure. A lead may be an answered phone call, a valid form submission, or an appointment request, but not every interaction qualifies. A phone click that never connects should not carry the same value as a conversation with someone genuinely interested in hiring the business.

Not every lead is equally useful, either. An inquiry may come from outside the service area, concern work the business does not offer, or come from an existing customer who only wants to reschedule an appointment. That is why it helps to distinguish between a contact, a qualified lead, a new customer, and a repeat contact.

The same applies at the end of the journey. A booking can still be canceled, and an estimate may never be accepted. Confirmed revenue requires a completed and paid appointment, invoiced work, or a recorded sale. This definition may sound basic, but it prevents different people from interpreting conversions in different ways.

Identify which leads come from local SEO

Contacts can reach a business through several routes. Someone may visit the website through an organic search result, access it from Google Business Profile, or call directly from the listing. Your measurement process should recognize these different journeys without mixing them together.

Reconstructing every journey with complete accuracy will not always be possible. What matters is applying the same criteria throughout the period being analyzed and clearly separating what can be confirmed from what is being estimated.

Distinguish the source of forms and calls

Analytics can show how many people arrived through organic search and what they did afterward, provided the tracking is configured correctly. To measure forms reliably, you need to record completed submissions rather than visits to the contact page or clicks that merely open the form.

Links from Google Business Profile to the website need their own identifier. By adding UTM parameters such as utm_campaign=gbp, Analytics can separate visits from the listing from the rest of the organic traffic. If one of those visitors submits a form, the resulting lead can be attributed to Google Business Profile.

Calls provide slightly less certainty. The listing may record a click on the call button, but that does not confirm that anyone actually spoke with the business. Phone records show which calls connected and which were answered. A call-tracking system can identify their source more accurately. Without one, the business can ask callers how they found it and compare their answers with the information already available.

The source should remain attached to the lead’s details. It can be passed into a CRM or recorded in a spreadsheet, depending on the size of the business. What matters is preserving that information until you know whether the contact eventually became a customer.

Connect leads and visits with commercial results

Once you have identified the lead’s source, you need to follow it through to the outcome. The record should include the contact date, source, requested service, current status, and final value if the person becomes a customer. This information can be stored in a CRM, booking system, or spreadsheet.

At one healthcare practice we worked with, we reviewed the calls and forms attributed to SEO and checked its appointment system to see what had happened with each contact. This allowed us to distinguish people who had actually booked from those who had only requested information. We could also separate new patients from existing ones. The review did not calculate the financial return by itself, but it prevented a common mistake: treating every phone call as a new customer.

At a store, restaurant, or another business people can visit without a booking, attribution becomes more difficult. Google Business Profile may record a direction request, but it cannot confirm that the person reached the location or made a purchase. Businesses can ask new customers how they found them and store the answer with the sale, although those answers will not always be accurate.

The business model determines how far attribution can go. It is therefore useful to separate revenue confirmed as coming from SEO, revenue that can only be estimated, and sales whose source remains unknown. An unattributed sale does not mean SEO played no role. It simply means there is not enough information to prove that it did.

More calls do not always mean better results

While reviewing the contacts received by that same healthcare practice, we noticed that many people were calling only to ask whether they could use their health insurance. The front desk spent time answering those questions, and if the practice did not accept that provider, the conversation ended without any possibility of booking an appointment.

That led us to make the accepted insurance information more visible on both the website and Google Business Profile. People could check before calling, and the number of calls made solely to ask that question went down. The decline did not necessarily mean the practice was losing potential patients. Some people simply knew in advance whether they could receive treatment there.

A drop in call volume alone was not enough to prove that the change had worked. We also needed to check whether qualified leads and bookings were holding steady or increasing. The value of a call depends on the genuine opportunities it creates, not simply on how many calls come in.

Calculate ROI using the margin generated

Once you have identified the sales that came from SEO, you can determine how much revenue they generated. Revenue alone, however, does not show profitability. A job invoiced at $1,000 may require materials, travel, and several hours of labor. Before calculating ROI, you therefore need to subtract the direct costs of completing those sales.

Margin attributed to SEO = attributed revenue − direct costs of the sales

You can then compare that margin with the SEO investment:

Local SEO ROI = [margin attributed to SEO − SEO investment] ÷ SEO investment × 100

Suppose ten customers acquired through SEO generate $10,000 in revenue. Completing their jobs costs $6,000, leaving a margin of $4,000. If the SEO investment was $2,000, another $2,000 remains after covering it. The ROI is 100%.

This result shows how much the SEO generated after covering the direct costs of the sales and the investment in the channel. It does not represent the company’s net profit, which also depends on overhead and taxes. SEO investment should include agency or consultant fees, content, tools, and internal time. This is particularly important when comparing different SEO services, because two similar monthly fees may cover very different amounts of work.

Calculate lead value and customer acquisition cost

We can use the same example to calculate four different figures. During the period analyzed, the business received 40 qualified leads. Ten became customers, generating $10,000 in revenue and a combined margin of $4,000.

The close rate was 25% because ten of the 40 leads converted. If we divide the $10,000 in revenue by all 40 contacts, the average revenue per qualified lead is $250. That does not mean every lead produces that amount. Thirty generated no revenue, while the purchases from the other ten made up the difference.

The margin calculation follows the same logic. Dividing the $4,000 margin by 40 leads gives an average margin of $100 per qualified lead before subtracting the SEO investment. This figure is more representative than average revenue because it already accounts for the direct cost of completing the work.

We can now calculate the acquisition costs. The SEO investment was $2,000:

  • Dividing $2,000 by ten customers gives a customer acquisition cost of $200.
  • Dividing $2,000 by 40 qualified leads gives a cost of $50 per lead.

These figures measure different things. One shows how much it cost to acquire a customer; the other shows how much it cost to generate a commercial opportunity. If the business offers services with very different prices and margins, the calculations should be performed separately. Otherwise, the overall average may hide the fact that some jobs are highly profitable while others barely cover the cost of acquiring the customer.

Check whether the problem is SEO, the business, or the calculation

A low ROI can have several explanations. SEO may be generating too few opportunities, but leads may also be getting lost while the business responds, prepares an estimate, or tries to close the sale. There is another possibility as well: the result may have been calculated incorrectly because of duplicate contacts or sales assigned to the wrong period. This distinction matters because each problem requires a different response.

Imagine a repair company that receives 30 estimate requests through local SEO. When it reviews what happened, it discovers that only 18 estimates were prepared. Some prospects did not respond when the company tried to contact them, while other requests simply took too long to receive attention. In the end, five estimates became paid jobs.

The easy conclusion would be that the business needs more leads. SEO had already generated 30 opportunities, however, and twelve did not even reach the estimate stage. Before increasing the investment, the company should review its response times and find out what happened to those requests. Pursuing more visibility without resolving the issue would only increase the number of missed opportunities.

Avoid counting the same lead more than once

A customer’s journey is rarely as tidy as it appears in a report. Someone might discover the business on Maps, return through an ad, submit a form, and call a few hours later. If each interaction is counted separately, one prospective customer may appear several times in the results.

This becomes especially important when a business invests in both SEO and Google Ads. Whenever the data allows it, the form and phone call should be associated with the same lead. The business then needs to decide which channel receives credit for the sale and apply that rule consistently. What it cannot do is attribute the full value to SEO and then award the entire amount to the ad as well. It is still only one sale.

Admittedly, reconstructing every journey will be impossible. Someone may search for the business by name on Google after receiving a personal recommendation. Google will appear in the data, even though it probably did not create the initial interest. That limitation needs to be accepted. Applying a consistent standard is better than claiming a level of precision the data cannot support.

Compare periods that reflect the same sales journey

The calendar can be misleading. On the one hand, SEO takes time to begin generating opportunities. On the other, a lead may take days or months to accept an estimate. If the deal is still open at the end of the month, it cannot yet be counted as revenue, but it should not be treated as lost either.

One way to avoid this mismatch is to group leads by the month in which they arrived and update their status when they become a booking or sale, or when the opportunity is closed. This prevents you from comparing March’s investment, for example, with sales produced by contacts acquired in January.

Seasonality matters too. An HVAC company cannot compare demand for heating services in January with demand in July and expect a clean comparison. Price changes, advertising campaigns, opening hours, and team capacity may also affect the results. If any of these factors changed, make a note of it. Otherwise, it becomes very easy to praise or blame SEO for something that had little to do with it.

Frequently asked questions

Can you measure ROI without knowing the exact revenue?

Without revenue and cost data, you cannot calculate a confirmed ROI, but you can produce an estimate. Qualified leads, historical close rates, and average margin per customer can be used for this purpose. Any assumptions should be shown clearly, and when data is limited, a provisional range is more honest than a figure that merely looks precise.

Should revenue from repeat customers count toward SEO ROI?

It can be included when analyzing the subsequent value of customers originally acquired through SEO. That revenue should be reported separately from the first purchase and should account for the costs of completing the later work. An existing customer finding the phone number on Google does not automatically turn the next purchase into a new SEO acquisition.

How often should local SEO ROI be reviewed?

Leads, bookings, and sales can be reviewed monthly to identify problems. ROI usually needs a longer measurement period, especially when SEO takes time to produce results or customers need time to make a purchase. The review should take place once enough leads from that period have either converted into sales or been closed as lost.

Use ROI to decide what deserves more investment

After doing all this work, reducing the outcome to a positive or negative ROI would waste much of the information you have gathered. The results can also reveal which services attract contacts with genuine potential, which ones become sales, how much margin they generate, and how long they take to convert. That is where the calculation becomes genuinely useful.

One service may generate a large number of inquiries but very few sales. Another may attract fewer contacts while closing at a higher rate and producing a much stronger margin. At first glance, the first service may look more successful. Follow the full journey, and you may discover the exact opposite. The comparison still needs to respect different sales cycles: a service purchased during the first call cannot be measured in the same way as one that takes several weeks to close.

There is a broader conclusion here that is often overlooked: local SEO ROI is not a fixed number that can be calculated once and treated as permanent. It changes according to the service, its margin, the time of year, and how long leads need to become customers. Some sales will have an origin that cannot be confirmed, and it is better to admit that than to assign them to SEO simply to make the report look better.

At Proyecto Jenesis, we use this information to approach local SEO with better judgment. If you want to understand which parts of your current strategy are actually producing business, our SEO team can review the starting point with you. We prioritize the services that genuinely matter to the business, examine which searches are attracting useful opportunities, and adjust the strategy according to which ones ultimately become bookings and sales. Ranking higher matters, of course, but ranking for what the business actually wants to sell—and can sell profitably—matters even more.

Contact us:

© 2026 Proyecto Jenesis. All rights reserved.