The formula, and why one number for all of marketing is a trap
The base formula is simple: take the revenue from jobs that started with a given marketing channel, subtract what that channel cost over the same window, and divide by the cost. (Revenue minus spend) divided by spend. A 4.0 means four dollars back for every one spent. Contractors already run this math on a truck lease or a piece of equipment. Marketing is not different, it is just harder to trace because the input, a phone call or a form fill, does not carry a price tag the way a material invoice does.
The mistake most owners make is blending every channel into one marketing line and running the formula once. A pay-per-click account, a website, an SEO retainer, and a review campaign do not behave the same way, and mixing them hides the truth. If your ads are pulling a 5.0 and your SEO is six months from its first booked job, a blended number in month three looks weak and might scare you off the channel that is about to compound. Run ROI per channel, not per marketing budget line.
Second mistake: counting leads instead of revenue. A lead is not a dollar. Two channels can produce the same number of leads and very different revenue if one sends better-fit jobs. A Local Services Ads lead that books a $400 drain clear and a referral-quality SEO lead that books a $14,000 re-pipe are not the same unit, even though your CRM logs them both as "one lead." The formula only works when the top half is actual booked-job revenue, not lead count and not a click-through rate.
Third: forgetting the denominator has more in it than the media spend. Ad spend is one line. There is also whoever manages the account, the agency retainer, the cost of the site those ads or that ranking sends people to, and the time your office spends answering the phone. None of that has to be exact to the dollar, but leaving all of it out of the cost side inflates every channel's ROI the same amount, which makes them look better than they are and makes it harder to tell which one is genuinely winning.
A fourth trap is timing the window wrong. If you total up a quarter's ad spend against jobs that closed two months after the quarter ended, because a kitchen remodel takes longer to sign than a service call, you will undercount the return and think the channel underperformed. Match the revenue window to your actual sales cycle, not to a calendar quarter that is convenient for the spreadsheet.
What to track for each channel (and what each number actually proves)
Different channels need different inputs to calculate honestly. Here is what to pull for the channels most contractors run, and what the number does and does not prove.
| Channel | What to track | What the number proves |
|---|---|---|
| Google Ads / LSA | Spend, calls, booked jobs, revenue, all inside the ad platform's own window | Fast, reliable, but stops the moment you stop paying |
| Website | Load speed, form fills, calls by page, bounce rate on money pages | Whether the asset converts the traffic other channels send it |
| SEO / organic | Rankings as a leading signal only, then organic sessions, leads, and booked jobs | A slower, compounding return that keeps paying after spend stops |
| Reviews / reputation | Review count and rating trend, close rate before and after a review push | A lift in close rate, hard to isolate but real |
Notice the pattern: rankings, review counts, and click-through rates are all leading indicators. They move first, they are easy to screenshot, and none of them is money. The chain that actually proves ROI runs traffic to leads to booked jobs to revenue. Skipping straight from "our rankings went up" or "we got more reviews" to "marketing is working" is how contractors end up unable to answer a simple question: which channel is actually paying for itself?
The two inputs almost no contractor has wired up on day one, and the two that matter most, are call tracking and a source field on the intake form or in the office's routine. Without a tracked number per channel and a "how did you hear about us" question reconciled against your ad platforms and analytics, every ROI number above is a guess dressed up as math. Set both up before you spend the first marketing dollar, not after the first invoice from an agency.
Why the same dollar produces different ROI on different channels
Paid channels (Google Ads, Local Services Ads) are a rental. You pay per click or per lead, the calls start the same week, and the ROI is readable within days. Stop paying and the calls stop that afternoon. This makes paid ROI easy to calculate and easy to trust early, but the number never improves much on its own. Cost per lead holds flat or creeps up as competitors bid the same keywords, and the moment the budget pauses, that ROI line goes to zero regardless of how good it looked last month.
Your website is not a channel by itself, it is the asset every other channel sends traffic to. A slow, cluttered site drags down the ROI of your ads and your SEO both, because the same click that would have converted on a fast page bounces on a slow one. Under 2 seconds to load is the line we build every site to hit, because a site that loses visitors before they see the phone number kills the ROI math for every channel feeding it traffic, no matter how good those channels are. This is why a website rebuild often shows up as an ROI improvement on channels you did not touch: the traffic did not change, the conversion of that traffic did.
SEO is ownership, not rental. The spend is front-loaded, the traffic lags, and on competitive terms the first booked jobs typically land 4-9 months in. That means an SEO channel's ROI looks bad on paper in month two and can look excellent by month twelve, because the pages that started ranking keep ranking without new spend to hold them there. Judging SEO ROI on the same 30-day clock you use for a Google Ads account is comparing a truck payment to a truck lease. Different math, different horizon, same underlying question: does the money come back.
Reviews and reputation sit outside a clean ROI formula because they rarely generate a lead directly, they change how many of your existing leads say yes. A jump in close rate after a deliberate review push is real ROI, it is just measured as a rate change, not a channel-attributed dollar. Track close rate before and after, not lead volume, to see that one. A contractor with a stack of five-star reviews also converts better on every other channel's traffic, since a homeowner comparing three bids online is reading reviews before they ever fill out your form, which means reputation ROI quietly rides on top of every other line in this section.
A worked example: reading three channels side by side
Say a mid-size remodeling contractor runs three channels over a quarter: Google Ads, an SEO program six months old, and a website that both feed. Here is how the same formula reads differently across them, using a hypothetical spend and close rate to show the mechanics, not a claimed result.
- Google Ads: spend is fully tracked in-platform. Calls, form fills, and (if call tracking is wired to the CRM) booked jobs are visible inside 30 days. ROI here is real-time and trustworthy because the whole chain, spend to booked job, sits inside one reporting window.
- SEO at month six: organic sessions and leads are climbing, and the first jobs are just starting to close, consistent with the 4-9 month window competitive terms usually take. Run the ROI formula honestly here and it may show a small return or even a small loss, because most of the spend (building the site structure, the cluster of service pages) happened in months one through three and the revenue is only starting to arrive. That is not a failed channel. That is the front-loaded cost doing what front-loaded cost does.
- The website itself: not its own P&L line, but its bounce rate and form-fill rate on the pages that both channels send traffic to determine how much of each channel's spend actually converts. If the site is slow or the phone number is buried, both the Ads ROI and the SEO ROI above take a hit that has nothing to do with either channel's strategy.
Read side by side, the point is not "which channel wins." It is that a channel six months into a slower payoff curve and a channel that pays back in days are not the same kind of investment, and forcing them onto one blended ROI number in month six will always make the compounding channel look like the loser, right before it turns into the cheapest lead source you have.
The tracking stack that makes any of this provable
None of the math above works without a minimum set of plumbing in place. This is the stack we set up on every site we build, and it is the same stack any contractor can wire up regardless of who runs the marketing.
- Call tracking with a number (or dynamic number insertion) tied to each channel, so a call from a Google Ads click and a call from an organic search land in different buckets automatically. Untracked calls are the single biggest hole in every contractor ROI estimate, because most contractor jobs still book by phone.
- Analytics on the site showing which pages pull traffic and from where, so a lead can be traced back to the channel and even the specific page that produced it.
- A source field in intake, whether that is a dropdown on the quote form or a question your office asks every caller, reconciled monthly against the analytics and ad platform numbers. This catches assisted conversions: someone finds you on Google, then calls the number off your truck a week later, and gets logged as "referral" when it should count toward the channel that actually found them.
- A revenue field, not just a lead field, in whatever you use to track jobs, so booked-job dollars can be summed by source instead of estimated from lead count alone.
Where job-level revenue tracking is not built yet, the honest shortcut is your own close rate and average ticket, applied per channel: leads times close rate times average job value gives you an estimated revenue number you can run the ROI formula against. It is an estimate, not a substitute for real tracking, but it beats deciding a channel's fate from a rankings screenshot or a click-through rate.
What counts as a good ROI, and when the math says walk
No honest shop hands you a guaranteed multiple across every channel, because the honest answer depends on your trade, your market, and your close rate. What we can tell you is the shape of a healthy read and the signs the math is telling you to stop.
Healthy signs, channel by channel: paid ads holding a stable or improving cost per booked job quarter over quarter. SEO showing rising organic sessions and leads on the expected 4-9 month curve, with cost per organic lead trending down as pages mature rather than staying flat. A website converting a consistent share of the traffic every channel sends it, not bleeding visitors before they reach the phone number or the form.
- Cost per lead is falling or flat, not climbing, for the channels that should be maturing (SEO, reviews).
- You can trace a real dollar figure to each channel, not just a lead count or a rankings screenshot.
- The channels on a slower clock (SEO, reputation) are showing leading indicators moving on schedule, even before the revenue is large.
Signs to push hard or walk: a channel with a full year of spend and no traceable revenue, where every report is a vanity metric (impressions, rankings, review count) and never a booked-job number. A blended ROI number that nobody can break apart by channel when you ask. Or a proposal promising a specific ROI multiple before anyone has seen your trade, your market, or your numbers, which is either a guess or a sales tactic. Marketing ROI is not the same for a plumber in a metro of two million and a fence builder in a town of forty thousand, and any number handed to you before that context exists is not a real number.