How to Measure SEO ROI
To measure SEO ROI, take the gross profit that organic search produced in a period, subtract everything you spent on SEO in the same period, divide by that spend and multiply by 100. That gives you three inputs to get right: the full cost, the return organic search actually earned, and the share of that return SEO deserves credit for. The formula is simple. The work is in filling it with numbers you would defend in front of your accountant, and in choosing a time window long enough to be fair to a channel that pays back slowly.

The SEO ROI formula, and why profit beats revenue
Written out, the formula is SEO ROI = (gross profit from organic search minus total SEO cost) divided by total SEO cost, times 100. Most guides put revenue in the first slot, and that is the most common reason SEO ROI figures look better on a slide than they do in a bank account. Revenue includes the cost of the materials, labour and stock you needed to deliver the sale, so a revenue-based figure counts money that was never profit. If you sell a $2,400 job that costs $1,500 to deliver, SEO earned you $900, and that is the number to compare with what SEO cost.
A result above zero means the channel returned more than it cost over the period you measured. A negative result early on does not mean SEO failed, because the costs of SEO arrive before the results do. That is why the time window matters as much as the formula, and it is covered in step four below.

Step 1: Count the full cost of SEO
The cost side is usually understated, because the outside invoice is the only line most businesses track. A fair total includes every cost that exists because you are doing SEO, whether it is paid to a provider or absorbed by your own staff.
| Cost line | Where to find it | Often missed? |
|---|---|---|
| Agency or consultant fees | Invoices for the period | Rarely |
| Staff time on SEO tasks | Hours spent times a loaded hourly rate (wages plus benefits and overhead) | Usually |
| Content, photography and video | Writer and supplier invoices, or staff hours | Often |
| Tools and subscriptions | Card statements, sometimes spread across departments | Often |
| Developer time for technical fixes | Developer invoices or internal hours | Usually |
Canadian businesses also need to decide how to treat GST. If your business is registered for GST/HST, the Canada Revenue Agency lets you recover the GST you pay on business purchases as input tax credits, so the pre-tax fee is your real cost. A business that stays under the $30,000 small supplier threshold and has not registered cannot claim those credits, so in Alberta the 5% GST on each SEO invoice is part of the cost and belongs in the formula.
Keep the cost side for the same period as the return side, and keep one-off costs such as a site rebuild separate so you can decide whether to spread them over several years. If you are still deciding how much to spend on SEO in the first place, this cost list is also a useful budget checklist.

Step 2: Measure what organic search produced
For an online store, Google Analytics 4 records purchase revenue, and you can filter it to the Organic Search channel. Google defines that channel as visitors who arrive through non-ad links in organic search results, including Google’s AI Overviews and AI Mode, so clicks from AI answers are already counted there. Convert the revenue to gross profit using your average margin, or your margin by product category if it varies a lot.
For a business that sells through leads, give each lead a value. In GA4, the actions that matter to your business, such as a form submission or a click on your phone number, are set up as key events, and you can attach a value to each one. A defensible value per lead is your close rate times the average gross profit per new customer. If three in ten leads become customers and an average customer is worth $900 in gross profit, each lead is worth $270.
Many Calgary service businesses close most of their work by phone, and a call that comes from someone who found you in search will not appear in GA4 unless you track it. Call tracking numbers on the website are one answer. Another, which costs nothing, is to ask every new customer how they found you and record the answer in your customer list. The method works the same way for a professional practice, though the inputs differ; the arithmetic for a small consulting firm usually rests on fewer, larger clients and a much longer sales cycle.

Step 3: Decide how much credit SEO gets
Most customers touch more than one channel before they buy, and the attribution model decides which channel gets the credit. As of November 2023, GA4 offers only three models: data-driven, paid and organic last click, and Google paid channels last click. The first click, linear, time decay and position-based models are gone. Google also documents that all of these models exclude direct visits from credit unless the whole path to the key event is direct, which matters for SEO, because a customer who found you through search and later typed your address will usually be credited to the earlier search visit rather than lost to “direct”.
A practical approach is to look at organic results under data-driven attribution and under paid and organic last click, and treat the gap between them as your range. If the two models disagree sharply, your result depends on assumptions you cannot fully check, and a cautious decision should use the lower figure.
The second question is branded search. Someone who searches your business name usually knew you already, from a referral, a truck on the road or an earlier ad, and SEO did little to win that customer. In Search Console’s Performance report, you can filter the queries to separate searches that contain your business name from those that do not. Search Console leaves out some rare queries for privacy, so treat the branded share as an estimate. If a large share of your organic clicks are branded, calculate ROI both ways, with all organic profit and with the branded share removed, and you will see how much of the return depends on demand SEO did not create.

Step 4: Pick a time window that fits how SEO pays back
SEO costs arrive first and returns arrive later, so a three-month window almost always shows a loss, even for work that will pay well. Measure cumulatively over at least twelve months, and then recalculate every quarter on a rolling basis, so each report adds the newest returns to the full cost to date. The separate guide on how long SEO usually takes to pay back covers what affects that timeline, which varies too much by market and starting point for one fixed number to be useful.
The time window also has a technical side. GA4 keeps user-level and key event data for two months or fourteen months on standard properties, depending on your retention setting. The setting does not touch the standard reports, but it limits explorations and funnel reports, so set it to fourteen months well before you need a year-over-year comparison in an exploration. Also note the date your tracking last changed, because a new key event or a broken tag in the middle of a period makes the before and after numbers impossible to compare.

A worked example for a Calgary service business
The numbers below are invented for illustration. They are not a quote from any provider and not a client result. They show how the steps fit together for a home-services company measuring twelve months of SEO.
| Input | Illustrative figure |
|---|---|
| Outside SEO fees for the year | $15,000 |
| Staff time: 60 hours at a loaded $45 an hour | $2,700 |
| Tools and subscriptions | $1,200 |
| Photography and content | $1,500 |
| Total SEO cost | $20,400 |
| Organic leads: 96 form key events plus 40 tracked calls | 136 |
| Close rate | 30%, so about 41 new customers |
| Average gross profit per customer (on $2,400 revenue) | $900 |
| Gross profit from organic search | $36,900 |
On gross profit, the result is ($36,900 minus $20,400) divided by $20,400, which is about 81%. Had the company used revenue instead, 41 customers at $2,400 would give $98,400 and an ROI of about 382%, a number that would lead it to spend far more than the channel can support. Now suppose Search Console shows that about a third of the organic clicks were branded searches from people who already knew the company, and, for simplicity, that they produced a third of the leads. Removing that third leaves $24,600 in gross profit and an ROI of about 21%. The defensible answer for this year is somewhere between 21% and 81%, and the company should plan on the lower end while watching whether non-branded leads grow in the second year.
When the number misleads
The most common errors are the ones already covered: revenue instead of profit, one-month windows and branded searches counted as SEO wins. A few others are worth checking before you trust any figure. Broken or duplicated tracking inflates or erases leads overnight, so test a form and a call yourself after any site change. Counting every key event as a lead overstates the return when newsletter sign-ups or spam submissions are mixed in with real enquiries. Blog traffic from people researching a topic can add sessions without adding customers, so look at which landing pages the paying customers actually came through.
Sometimes a precise ROI figure is not worth chasing. A new site with a handful of leads a month will produce numbers that swing wildly from one quarter to the next, and a few lucky or unlucky months will dominate the result. In that case, track leading signs instead, such as non-branded clicks in Search Console, the number of organic leads and the quality of those leads, and run the full calculation once there is enough volume for it to mean something.
Comparing SEO ROI with Google Ads ROI
The same formula works for paid search, and running both side by side is the clearest way to decide where the next dollar should go. For Google Ads, the cost is the ad spend plus the management fee, and with any provider, To-The-TOP! included, it is worth asking for those two as separate numbers before you compare offers. The guide to calculating PPC ROI walks through the paid side in detail, and the Google Ads management page explains how the paid channel is run. The difference to keep in mind is timing: paid traffic stops when the budget stops, while pages that rank can keep producing leads after the work that built them is paid for, so a fair comparison uses the same twelve-month window for both and does not judge SEO on its first quarter.
Getting a second opinion on your numbers
SEO Company To-The-TOP! is a Calgary solo practice founded in 2007, Google Ads certified, and it reports search positions to clients every month. If you would like a second opinion on how your tracking is set up, or on an ROI figure someone has shown you, call (403) 308-5949.
Contact Calgary SEO Company To-The-TOP!
Questions about anything in this article, or about your own rankings? Talk to a Calgary SEO specialist directly.
Phone: (403) 308-5949
Address: 1509 14 Ave SW, Calgary, AB T3C 0W4
Hours:
Monday to Friday: 10:00 am – 7:00 pm
Saturday: 12:00 pm – 4:00 pm
Sunday: closed
