Lead attribution means knowing which ad, post or listing brought in each lead, and which of those leads turned into booked jobs. For a local business, it answers one question: where should my next marketing dollar go?
This guide walks through a setup any appointment-based business can run, from ad click to booked job.
Why attribution is harder for local businesses
Online stores can track a click straight to a checkout. Local businesses can't, because the sale usually happens on the phone or in person.
- Many leads call instead of filling a form.
- The same customer might see your Instagram, search on Google, then text you.
- The job is booked days later and paid for after the work is done.
- Ad platforms report their own results and often count the same lead twice.
So each ad platform sees part of the story. You need a record that ties the whole thing together.
The simple rule: one channel, one number, one link
The most reliable way to attribute local leads is to give every channel its own way in.
- Its own phone number, so calls and texts show where they came from.
- Its own booking or landing link, so web leads show where they came from.
Typical channels are Google Ads, Google Local Services Ads, Facebook, Instagram, TikTok and organic (your website, Google Business Profile and word of mouth).
Step 1: List your channels and what you spend
Write down every place leads come from, paid and free. Next to each, note your monthly spend.
Include the channels you don't pay for. Organic leads are the baseline that tells you whether paid channels are adding anything.
Step 2: Give each channel its own phone number
Put each channel's number only in that channel: in the ad, the profile or the bio. Don't reuse it anywhere else.
A note on Google's own call tracking
Google Ads can show a Google forwarding number on your ads. It tracks call details like time, duration, campaign and ad group, then forwards the call to your business line.
That's useful inside Google Ads, but it only covers Google Ads calls, and it doesn't know whether the call booked. You still need your own record of outcomes.
Keep your main number consistent
Keep your main business number on your Google Business Profile and directory listings so your details match everywhere. Use channel numbers on ads and campaign links.
Offline channels count too
Truck wraps, yard signs, mailers and radio spots can each get their own number. It's the only way to know whether last spring's mailer brought in anything.
If you can't give a channel its own number, give it a short web address or a booking link instead.
Step 3: Tag every link
For leads that click through to your website or booking page, add UTM tags to the link. Analytics tools read these tags to show the source.
- utm_source: where the click came from, like google or facebook
- utm_medium: the type of traffic, like cpc or email
- utm_campaign: the campaign or offer, like spring_tuneup
Pick a naming style and stick to it. Google notes that tag values are case sensitive, so "Facebook" and "facebook" become two separate sources.
Simpler still: give each channel its own booking link. A link like /book/your-business/google tells you the source without any tags at all.
Step 4: Record the outcome on every lead
This is where most attribution breaks. The lead is tracked, but nobody records what happened next.
Give every lead a stage and keep it current. A simple set works:
- Unqualified: new, not yet checked
- Qualified: fits your service, area and timeline
- Booked: on the calendar
- Won or lost: the job happened, or it didn't
When a lead books, add the dollar value of the job. Without a value, you can count jobs by channel but not revenue.
Step 5: Build a monthly channel report
Once a month, put these columns side by side for every channel:
- Spend
- Leads
- Booked jobs
- Revenue from booked jobs
- Cost per lead: spend divided by leads
- Cost per booked job: spend divided by booked jobs
- Return: revenue divided by spend
Add a paid vs organic split at the bottom. If organic bookings drop when you cut ads, the ads were doing more than the dashboard showed.
A worked example
These numbers are made up to show the math. Say you spend $1,500 a month on each of two channels.
- Channel A: 60 leads, 6 booked jobs, $3,000 revenue. Cost per lead $25. Cost per booked job $250. Return 2x.
- Channel B: 25 leads, 10 booked jobs, $6,000 revenue. Cost per lead $60. Cost per booked job $150. Return 4x.
On cost per lead, Channel A looks better. On booked jobs and revenue, Channel B is the clear winner.
First touch, last touch and what's good enough
Attribution models decide which channel gets credit when a customer touches several. First touch credits the first channel they saw. Last touch credits the one they used to contact you.
For most local businesses, crediting the channel the customer used to call, text or book is good enough to make decisions. Add "how did you hear about us?" to your calls to catch what tracking misses.
What to do with leads you can't trace
Some leads will always slip through: a referral who found your number in a friend's phone, or a repeat customer calling your main line.
Don't force them into a paid channel. Mark them organic or unknown, and ask how they heard about you. If unknown grows past a small share of your leads, look for a channel without its own number.
How long before you trust the numbers
Give a new setup a full month before drawing conclusions. Jobs booked from a lead can take days or weeks, so recent leads always look worse than they will.
For small channels with only a few leads a month, look at three months together. One or two bookings either way can swing the picture.
Your setup checklist
- Every channel listed with its monthly spend
- A unique phone number for each channel, used nowhere else
- A unique booking link or tagged URL for each channel
- Main business number unchanged on your Google Business Profile and listings
- Every lead given a source, stage and owner
- A dollar value added to every booked job
- A monthly report with cost per booked job by channel
Common attribution mistakes
- Judging channels on clicks or leads instead of booked jobs
- One phone number on every ad, profile and truck
- Untagged links, so web leads show as direct traffic
- Leads never moved to booked, so revenue goes unrecorded
- Trusting each ad platform's own count without checking it against your bookings
- Changing everything at once, so you can't tell what worked
Make decisions from the report
Attribution only pays off if you act on it. Each month, pick one change.
- Move budget from the channel with the highest cost per booked job to the lowest.
- Look at the channel with many leads and few bookings. Is the problem lead quality, or slow follow-up?
- Check that organic still holds when you change paid spend.
Give each change a full month before judging it. Small channels need longer.
Share the report with whoever runs your ads
If an agency or freelancer manages your ads, send them your booked jobs and revenue by channel every month. Their dashboards can't see what happens after the call.
Ask them to report on cost per booked job alongside their usual numbers. It keeps everyone working toward the same result: a fuller calendar, not just more clicks.
If you're the agency, the same setup works across clients. One number and one link per channel, outcomes recorded on every lead, and a monthly report your clients can actually read.
How Cindy handles attribution
With Cindy's ad attribution, every lead channel gets its own dedicated phone number and booking link: Instagram, Facebook, Google Ads, Google LSA, TikTok and Organic. Every lead and booked job is traced to its source.
The ad performance report shows paid vs organic booked jobs, estimated revenue, leads and cost per lead by channel. Meta Ads reporting connects to your ad account.
Every lead sits in the pipeline with its stage, source and a dollar value per job, and online booking gives each channel its own link. Book a demo to see the report with your own channels.






