The real answer to "are my ads working?" is a single number: how much did you spend to produce each booked job? Every other metric sits in front of that number and can make a losing campaign look healthy. When you know your cost per booked job and you know your average job value, you know whether to scale the budget or cut it. Everything else is context.
This post is part of the paid growth and conversion cluster at Lyfework, where we cover the full chain from ad click to closed revenue. Here we focus specifically on attribution: how to wire up the tracking so every dollar of spend traces to a real outcome in your pipeline.
Why do impressions and clicks mislead service businesses?
Impressions and clicks measure platform activity, not business results. A click means someone found your ad interesting enough to tap it. It says nothing about whether they had a budget, a real problem you solve, or any intention to hire you. For a service business, where your revenue comes from booked appointments and completed jobs rather than digital transactions, the gap between a click and actual revenue is wide enough to hide a lot of waste.
When we inherit a running ad account, the first question we ask the client is "what's your cost per booked job?" In four years, fewer than one in ten can answer it. They can pull click-through rates, cost per click, and weekly impression counts from the platform dashboard in seconds. But ask how many of those clicks became leads, how many of those leads became booked appointments, and how much each booked job cost them in ad spend, and the room goes quiet. That gap is expensive. It means decisions about budget allocation, which campaign to scale, and which to kill are being made on the wrong data.
Consider a roofer spending $4,000 a month across Google and Meta who could report click-through rates and impressions from both platforms but had no idea which channel produced the three big jobs that month versus the eight unqualified price-shoppers. Without knowing that, every budget conversation is a guess. You might cut the channel that produced the good jobs and double down on the one filling your calendar with tire-kickers.
The average inbound lead response time across businesses, according to a Harvard Business Review analysis. By that point, most ready buyers have already moved on.
What is UTM tracking and how do you set it up?
UTM parameters are short tags appended to a URL that tell your analytics tool exactly where a visitor came from before they filled out a form or called your business. They are the first link in the attribution chain, and without them nothing downstream works correctly.
Each UTM tag is a key-value pair: utm_source identifies the platform (google, meta, bing), utm_medium identifies the channel type (cpc, social, email), and utm_campaign names the specific campaign. You add these to every ad URL before you publish the ad. When a visitor lands on your site with those tags active and then submits a form or books an appointment, the tags travel into your form submission data and, if your CRM is wired correctly, into the lead record itself.
The setup is straightforward. In Google Ads you use ValueTrack parameters so the campaign name and ad group populate automatically. In Meta Ads Manager you add UTM parameters in the URL Parameters field at the ad level. The key discipline is consistency: every ad needs tagged URLs, with no exceptions, and the naming convention has to be the same across platforms so you can compare them inside your CRM without reformatting anything.
One thing we see repeatedly on audits: business owners run ads for months with untagged URLs because the platform showed conversions in its own dashboard. Platform-reported conversions and your actual booked jobs are not the same number. Platforms optimize for their own conversion events, which are often form views or landing page visits rather than real sales. Your CRM data, built on UTM-tagged leads moving through a real pipeline, is the only source of truth.
How do you tag leads in your CRM by ad source?
Every lead that enters your pipeline needs a source tag, set at the moment of capture, that never changes. That tag is what lets you run a filter six weeks later and see exactly how many jobs closed from Google Ads versus Meta versus organic search.
The mechanics: when someone submits a form on a UTM-tagged landing page, the UTM parameters need to be passed as hidden fields in the form so they appear alongside the lead's name and phone number in your CRM. Most form builders support this out of the box. The form reads the UTMs from the URL, stores them in hidden fields, and sends them to your CRM on submission. On the CRM side, you map those hidden fields to a "Lead Source" contact field, which you then set as permanent on the contact record.
Phone calls are trickier. If a prospect clicks your ad and calls instead of filling out a form, the UTM data never makes it into a submission. Call tracking solves this: services like CallRail assign unique phone numbers to each campaign. When a call comes in on the Google Ads number, it tags the lead as a Google Ads lead inside your CRM automatically. Every campaign gets its own tracking number, and the system handles the tagging without relying on your team to remember to ask during intake.
Once source tagging is in place, you filter your CRM pipeline by source and watch each channel's leads move through the stages. This is where attribution becomes actionable. See the conversion rate optimization guide for how to use that stage-by-stage data to find the leaks.
What is cost per booked job and how do you calculate it?
Cost per booked job is your total ad spend for a given period divided by the number of jobs that were actually scheduled from those ads. It is the single most useful number in your paid advertising operation.
The math: if you spent $4,000 in a month and your tagged pipeline shows eleven booked jobs came from paid ads, your cost per booked job is about $364. If your average job value is $2,800, that's a healthy acquisition cost. If your average job value is $400, you're losing money on every job and the ads need to change before you spend another dollar.
Most businesses stop at cost per lead. Cost per lead is useful context, but it's incomplete. A channel can produce cheap leads and terrible close rates: lots of contacts who don't answer callbacks, who called to check your price against a competitor, or who wanted a service you don't offer. A channel can produce expensive leads that convert at a high rate. The only number that accounts for both is cost per booked job, which collapses the full funnel into a single comparable figure per channel.
When this calculation is available by channel, the budget conversation changes completely. You're no longer asking which platform has better metrics. You're asking which one produces booked jobs at the most profitable acquisition cost, and then allocating budget accordingly. For a deeper look at how these numbers interact with your landing page and offer, the guide on running Meta ads for local service businesses covers the offer and landing page side of that equation.
What does a useful ad reporting dashboard look like for a service business?
A useful dashboard shows the funnel from ad spend to booked revenue, with one row per channel and every column representing a real stage in your sales process. It is built from your CRM data, not from the ad platforms.
The columns, in order: total spend, leads generated, cost per lead, leads contacted, contact rate, appointments set, appointment rate, jobs booked, close rate, cost per booked job, estimated revenue from booked jobs, and return on ad spend. Twelve columns. Every business has a slightly different pipeline vocabulary, but the shape is the same: spend in, revenue out, with the conversion rates between each stage visible so you can see exactly where the funnel is losing people.
The platforms' own dashboards show you columns one through three at best, and they measure leads differently from how your CRM measures them. Platform leads often include anyone who clicked through to a landing page, viewed your form, or initiated a call. Your CRM leads are people who actually gave you their information and entered your pipeline. Those two counts will almost never match, and the platform's count will almost always be higher. Build your dashboard in your CRM or a connected spreadsheet using your own data.
Update it weekly at minimum. A roofer, HVAC company, or any business with a variable sales cycle needs to account for the lag between first contact and booked job: some leads book same-day, some take two or three weeks of follow-up. Build a 30-day and 90-day view so you're not drawing conclusions from an incomplete dataset. The Google Ads vs Meta Ads comparison goes deeper on how the typical sales cycle differs between the two platforms, which affects how you read these numbers.
What conversion events should service businesses send back to the ad platforms?
The conversion event you optimize for is the behavior the platform will try to produce more of. Get this wrong and the platform efficiently finds people who trigger your conversion event but never buy anything.
Most service businesses start by optimizing for form submissions. That's reasonable as a starting point, but form submissions include a lot of noise: wrong service area, wrong budget, not the decision-maker. As your account matures, the better approach is to push downstream conversion events back to the platform: appointment booked, or ideally, job confirmed. Both can be sent as server-side conversion events via your CRM's integration with the ad platform.
Google's enhanced conversions and Meta's Conversions API both support this. When a lead progresses to a certain pipeline stage in your CRM (say, "Appointment Set" or "Job Won"), a webhook fires and sends that event back to the platform. The platform then uses that signal to find more people who look like your actual customers rather than your form-fillers. Across the accounts we've set this up in, the quality of inbound leads visibly improves within two to three weeks of the platform accumulating enough of these downstream signals, because it stops chasing volume and starts chasing quality.
How do you run this without a full-time marketing analyst?
The system needs to be largely automatic or it won't stay current. Manual reporting gets skipped when the week gets busy, and stale attribution data is almost as useless as no data.
The minimum viable setup: UTMs on every ad URL (set once, check quarterly), hidden UTM fields on every lead form (set once), call tracking numbers assigned per campaign (set once and checked monthly), a source field on every CRM contact populated automatically from form submissions, and a saved view in your CRM that filters pipeline by source and shows stage counts. That view takes about ten minutes to set up after the source tagging is in place, and it stays current automatically because it reads live pipeline data.
From there, a weekly ten-minute review of that saved view is all the ongoing time commitment the system needs. You're looking for three things: which source is producing the most booked jobs, where leads are stalling (which stage has a low conversion rate), and whether cost per booked job is trending up or down. Those three data points drive almost every meaningful budget and bidding decision a service business needs to make.
If your CRM doesn't support the source-tagging and pipeline views described here, that's worth addressing at the infrastructure level before you scale ad spend. Spending more on ads you can't properly attribute is one of the faster ways to lose money in a service business. The guide on turning website visitors into customers covers the full conversion infrastructure, of which attribution is one piece.