How marketing attribution works for a local business
On this page
- The question attribution answers
- The six stages of a tracked lead
- How each channel is identified
- Why browser-only tracking undercounts
- Cookies expire early on Safari
- Blockers stop the requests
- The source never reaches the CRM
- First touch, last touch, and what I report
- Levels of attribution, from basic to closed loop
- Who should own the data
Attribution is the work of connecting a customer back to the marketing that brought them in. This page explains how that connection is made, where it usually breaks, and what a setup needs at each level. It is the model I build for clients, written so an owner can follow it and a marketer can implement it.
The question attribution answers
Here is a journey I see all the time. Someone searches for a plumber, clicks an ad, looks around, and leaves. Three days later they search the business by name, read a few reviews, and call. Two weeks after that the job is finished and paid.
Ask the ad account what happened and it will tell you somebody clicked. Ask the office and they will say the customer "found us on Google." Neither answer tells you whether the ad paid for itself. Attribution closes that gap: it follows the original click through the visit, the call, and the finished job, then reports the money back to the channel that earned it.
The six stages of a tracked lead
Every attribution setup, from a free Google Analytics install to a server-side system with its own database, does some version of these six jobs.
- ArriveSomeone lands on the site from an ad, a search, a post, or a link. The URL may carry clues such as
gclidorutm_source. - CaptureA tag on the site reads those clues, plus the referrer and landing page, before they disappear on the next click.
- PersistThe source is saved in first-party cookies, and ideally in a database, so it survives return visits.
- IdentifyWhen the visitor fills out a form or calls, the saved source rides along with their name, email, or phone number.
- CloseThe job is marked won in the CRM, with a dollar value attached.
- Report backThe won value is sent to Google Ads, Meta, and GA4 against the original click, so each platform learns what a good lead looks like.
Most setups I audit handle stages 1 and 2, skip 3 and 4, and never reach 6. That is why the ad account and the bank account tell different stories.
How each channel is identified
Every visit carries some evidence of where it came from. The job is to read the strongest evidence available and fall back gracefully when it is missing.
| Channel | The evidence | What trips it up |
|---|---|---|
| Google Ads | A click ID in the URL (gclid, or gbraid and wbraid on some iOS traffic), plus UTM tags if you add them | The click ID is only in the URL on the first page view. If nothing saves it, it is gone by the second page. |
| Meta ads | An fbclid in the URL and UTM tags on the ad's destination link | Ads without UTM tags show up as ordinary Facebook or Instagram referrals. |
| Organic search | A search engine referrer with no ad click ID | Search engines do not pass the keyword, so reporting stops at "organic search" unless you add Search Console data. |
| Google Business Profile | UTM tags you add to the website link on the profile | Without tags, profile clicks look like organic search, which hides one of the strongest local channels. |
| Email and SMS | UTM tags on every link | Untagged links opened in email apps often arrive with no referrer and get counted as direct. |
| Referral sites | The referring domain, such as a directory or a partner's site | Some apps and privacy settings strip the referrer. |
| Direct | No referrer, no tags, no click ID | "Direct" is often a returning visitor whose first visit came from somewhere else. Saving the first source fixes most of this. |
| Phone calls | A tap on a tracked phone link, or a tracking number that forwards to the business line | People who dial by hand from a truck, a yard sign, or a saved contact leave no web trail. |
| Walk-ins and word of mouth | Nothing digital | Record the answer to "how did you hear about us?" in the CRM so it still counts. |
Why browser-only tracking undercounts
The default install, a Google tag or Tag Manager container running in the visitor's browser, loses data in three predictable ways.
Cookies expire early on Safari
Safari limits cookies created by JavaScript to seven days. If someone clicks an ad on an iPhone and calls on day eight, the saved click ID is already gone and the call looks like direct traffic. Cookies set by a server, in the HTTP response, on the business's own domain are not held to that seven-day limit. That is the main reason I run tracking through a server-side tagging container on a subdomain of the client's site.
Blockers stop the requests
Ad blockers and privacy browsers block requests to well-known tracking domains. A first-party endpoint on the business's own domain is blocked far less often. It is not invisible, and it still has to respect consent, but it stops losing honest data to generic block lists.
The source never reaches the CRM
This is the biggest leak, and it has nothing to do with browsers. The form emails the name and message to an inbox, someone types the lead into the CRM by hand, and the source is never recorded. Hidden form fields that carry the saved click ID and UTM tags into the submission fix this for forms. Tracking numbers, or a required lead source field in the CRM, fix it for calls.
First touch, last touch, and what I report
An attribution model is the rule that decides which touch gets credit when there were several.
For small businesses I report first touch and last touch side by side, with revenue pulled from the CRM rather than from the ad platform. When the two columns disagree, the disagreement is the interesting part: it shows which channels start conversations and which ones finish them.
Levels of attribution, from basic to closed loop
You do not need everything on day one. Each level builds on the one before it, and each answers a better question.
| Level | What it takes | The question it answers |
|---|---|---|
| 1. Events | GA4 and Tag Manager recording form submissions, phone taps, and email clicks as key events | How many leads did the site produce, and from which channels? |
| 2. Source in the CRM | Hidden form fields, a lead source on every CRM record, and UTM tags on every link you control | Which channels produce leads that become customers? |
| 3. First-party data | A server-side tagging container on the business's own subdomain, server-set cookies, and events stored in a database the business owns | What happened across return visits and devices, without Safari or blockers erasing it? |
| 4. Closed loop | Won jobs and their values sent back to Google Ads, Meta, and GA4 against the original click | Which campaigns and keywords make money, and can the platforms optimize for that? |
Level 1 is an afternoon of work, and the GA4 and Tag Manager quickstart walks through it. Level 4 is where ad budgets start getting smarter, covered in Send offline conversions back to Google Ads.
Who should own the data
Build every piece inside accounts the business owns: its own Google Analytics property, its own Tag Manager container, its own ad accounts, and a database it can export. When an agency owns the accounts, the history leaves with the agency. I set everything up under the client's ownership and keep my own access as a user the client can remove.
What's next
- Quickstart: track calls, forms, and email clicks with GA4 and Tag Manager: install Tag Manager, send form, phone tap, and email click events to GA4, mark them as key events, and verify each one before you trust the numbers.
- Server-side tagging and first-party cookies, explained: what a server-side Tag Manager container does, why it belongs on your own subdomain, how it keeps click IDs longer, and when a small business needs one.
- Send offline conversions from your CRM back to Google Ads: save the ad click ID with every lead, mark won jobs in your CRM, and upload them to Google Ads so bidding learns from revenue instead of form fills.
Rather have me do this for you?
I set up tracking that ties every call and form to the marketing that earned it, inside accounts you own, and report it in plain language.