Ask a contractor doing $4M a year which ad sold their biggest job last month. Most of them answer with a channel. "Facebook." That is not an answer. That is a shrug with a logo on it.
The cost of the shrug shows up at budget time. You have four campaigns running, one of them is producing jobs at $600 of acquisition cost and another is producing tire kickers at $3,000, and because every lead in the CRM is tagged "online" you cut the wrong one. A single misread like that, held for a season, costs more than everything your marketing spend bought that year.
Attribution is not a reporting hobby. It is the difference between scaling what works and funding what feels busy.
What does bad attribution actually cost you?
Run the arithmetic on a contractor spending $6,000 a month across four campaigns with a $12,000 average job.
Example: all four campaigns get $1,500 a month. Campaign A produces 14 leads, 3 jobs, $36,000. Campaign B produces 26 leads, 1 job, $12,000. Campaign C produces 9 leads, 2 jobs, $24,000. Campaign D produces 21 leads, 0 jobs. Blended, that is 70 leads at $86 each and 6 jobs at $1,000 of ad spend per job, which looks fine on a dashboard.
Now look at it by campaign. A costs $500 per job. C costs $750. B costs $1,500. D costs infinity. If your reporting only shows cost per lead, B and D look like your best campaigns, because they produced 47 of the 70 leads. Shift budget toward them and your revenue falls while your lead count rises. That is the single most common self-inflicted wound in contractor marketing.
The only way out is a record that keeps the source attached from the first click to the signed contract value. Our client platform stamps every lead with its campaign, form and property data at the moment of delivery, so the source is already on the record before anybody picks up a phone.
What is the difference between a lead source and an attribution record?
A lead source is a word. An attribution record is a chain of identifiers that survives the entire sale.
A word is what you get when your office manager picks "Internet" from a dropdown three days after the call. An attribution record is campaign, ad set, ad, landing page, form, phone number, timestamp, and the contract value that eventually attaches to it.
The difference matters because contractors do not have a lead problem at the channel level. Meta works. Google works. Referrals work. The question is always which campaign inside the channel, which creative inside the campaign, and which offer on which landing page. Channel-level reporting cannot answer any of those. It is how agencies stay employed while producing nothing.
Which attribution model should a contractor actually use?
There are three practical models and one of them is correct for home improvement.
| Model | How it credits | What it is good for | Risk for contractors |
|---|---|---|---|
| ModelFirst touch (source of record) | How it creditsCredits the ad or call that created the lead record | What it is good forSetting budgets on paid campaigns | Risk for contractorsUndercounts the follow-up that closed a stalled lead |
| ModelLast touch | How it creditsCredits the final click before the form or call | What it is good forUnderstanding how people return to you | Risk for contractorsBranded search and direct traffic steal credit from the ad that created demand |
| ModelMulti touch | How it creditsSplits credit across every touch | What it is good forBig spenders with long cycles and real data teams | Risk for contractorsExpensive, fragile, and usually over-engineered for a contractor |
Use first touch as your system of record. The homeowner who saw your siding ad in March, searched your company name in April and filled out a form from your homepage was produced by the March ad, not by Google. If you credit the last click you will defund the thing that created the demand and then wonder why your branded search volume collapsed two months later.
Keep last touch visible as a secondary column. It tells you how people come back, which informs retargeting and your website. It should never set a budget.
Which five fields decide every attribution question?
Everything you need fits in five fields on the lead record. Build these once and the reporting writes itself.
- Source stamp. The campaign, ad set and ad name, captured automatically, never typed by a human. Human-typed sources are wrong roughly as often as they are right.
- Entry point. Which form or which tracking number. A homeowner who called is a different buyer than one who filled out a form at 11 p.m., and the two convert at different rates.
- First contact timestamp. The gap between form submission and first outbound attempt. This is the number that explains most close-rate differences between two campaigns that look identical otherwise.
- Appointment outcome. Booked, sat, cancelled, no-show. Cost per lead is noise. Cost per sat appointment is signal.
- Contract value. The signed number, not the quoted number. Attribution without revenue attached is just lead counting with extra steps.
If you want the full stage-by-stage version of this chain, our guide on tracking a lead from ad click to signed contract walks the whole pipeline. This post is about keeping the source stamp intact through it.
How do you tag ads so the source survives to the contract?
Three mechanical steps. None of them are hard. Most contractors have never done any of them.
Tag every link with UTM parameters
Every ad link carries utm_source, utm_medium and utm_campaign at minimum, plus utm_content for the specific creative. Use a naming convention and never deviate from it. Lowercase everything. No spaces. Something like `utm_campaign=roof-replacement-fall` and `utm_content=drone-before-after-15s`. If one person writes `Roof_Replacement` and another writes `roof replacement`, your report splits one campaign into three rows and the math stops working.
Write the tags into hidden form fields
This is the step that gets skipped. The UTM is in the URL, the homeowner fills out the form, and then the data disappears because the form never captured it. Every form on every landing page needs hidden fields that read the URL parameters and submit them with the lead. If your form cannot do that, replace the form.
Capture the referrer and the landing page URL
Add two more hidden fields: the full landing page URL and the referring domain. When a UTM goes missing because someone shared your link or stripped the parameters, the landing page URL usually still tells you which offer produced the lead.
How do you attribute a phone call that came from an ad?
Calls are where attribution usually breaks, because the homeowner never touched a form.
For contractors running a handful of campaigns, the simplest fix is a separate tracking number per campaign, displayed on that campaign's landing page only. Call comes in on the roof replacement number, the lead is a roof replacement campaign lead. No software judgment required.
If you run more campaigns than you want numbers for, use dynamic number insertion, which swaps the number shown on the page based on the visitor's UTM parameters and logs the session against the call. It costs a few dollars per number per month and it closes the biggest hole in most contractor reporting.
Two rules either way. First, your main business number stays on your website, your truck and your yard signs, so organic and referral calls stay clean. Second, every inbound call gets logged against a lead record the same day, with the number it arrived on. A call that only exists in a phone bill is not attributed.
If you want to see what a lead record looks like when the source, the property data and the billing all live on one screen, take a look at the platform or book a call and we will walk through it live.
What should the monthly attribution report actually show?
One page. Seven columns. Broken out by campaign, never blended.
| Column | Why it is on the page |
|---|---|
| ColumnAd spend | Why it is on the pageWhat you paid Meta or Google directly |
| ColumnLead fees | Why it is on the pageWhat the system cost on top of spend |
| ColumnLeads | Why it is on the pageVolume, which is context only |
| ColumnSat appointments | Why it is on the pageThe first number that predicts revenue |
| ColumnSigned jobs | Why it is on the pageThe outcome |
| ColumnCost per signed job | Why it is on the pageTotal cost divided by jobs |
| ColumnRevenue and gross profit | Why it is on the pageWhat the campaign returned |
If a campaign's cost per signed job sits under roughly 10 percent of your average job value, it is healthy and deserves more budget. If it sits above 20 percent, something upstream is broken: the offer, the speed to first contact, or the targeting. The report tells you which campaign to interrogate. It does not tell you what is wrong. That part is still your job.
For the broader set of metrics worth tracking alongside this, see our guide on tracking marketing ROI as a contractor.
What breaks contractor attribution most often?
A human typing the source
The dropdown that says "How did you hear about us?" is useful color and worthless data. Homeowners say "Google" when they mean a Facebook ad they saw three weeks ago. Capture the source automatically and treat the self-reported answer as a side note.
Leads that arrive by text or DM
Somebody messages your business page, a rep replies from their phone, and the job gets sold without ever touching the CRM. Those jobs show up as revenue with no source, which makes every campaign look worse than it is. Every conversation that becomes a quote becomes a record, no exceptions.
Platform numbers versus CRM numbers
Meta will report 31 leads and your CRM will show 27. That gap is normal, because ad platforms attribute inside a conversion window and dedupe by device while your CRM counts arrivals by date and phone number. Pick one as the financial truth, which should be the CRM, and use the ad platform for steering only.
Judging a campaign before it has data
One job out of eight leads is not a 12.5 percent close rate, it is a coin flip with a spreadsheet around it. Give a campaign 30 to 50 leads before you draw a conclusion, and keep reading cost per lead in the meantime so you know whether the front end is even working. Our cost per lead guide covers where that front-end number should land by channel.
Nobody owns the report
If attribution lives in three tools and no single person is responsible for reconciling them on the first Monday of the month, it decays within a quarter. Assign it to one person with a recurring calendar block.
What should you do this week?
Four steps, in order.
- Pull your last 20 signed jobs. For each one, write down the campaign, the form or number it came from, and the contract value. If you cannot do that for more than half of them, you have proven the problem.
- Add hidden UTM fields to every form on every landing page today.
- Put one tracking number on each active campaign's landing page and leave your main number everywhere else.
- Build the seven-column report and run it monthly, by campaign, forever.
A contractor who can name the ad that sold the job makes different decisions than one who cannot. The first one doubles down on the campaign producing $500 jobs. The second one spreads budget evenly across four campaigns and calls it diversification.
If you want campaigns that run in your own ad account with the source stamped on every lead before it reaches your team, book a call and we will show you the live numbers.
Frequently asked questions
What is contractor marketing attribution?
Contractor marketing attribution is the practice of tying every booked appointment and signed contract back to the specific ad, form or phone call that produced it, rather than to a broad channel name. Done properly it reports cost per signed job and revenue by campaign, which is the only pair of numbers that tells you where the next dollar of budget should go.
Should contractors use last click or first touch attribution?
Use the source captured at first form submission or first call as your system of record, because that is the touch you actually paid for and can control. Keep last click as a secondary view for understanding how homeowners return to you, but never set budgets off it, since branded search almost always steals credit from the ad that created the demand.
How do you track which ad produced a phone call?
Use a dedicated tracking number on the landing page with dynamic number insertion so each campaign or ad set shows its own number, then log that number against the lead record in your CRM. For contractors running a small number of campaigns, a separate static number per campaign is simpler and nearly as accurate.
Why do my CRM numbers never match my Meta ads numbers?
Ad platforms count conversions in the window they attribute them to and dedupe by browser or device, while your CRM counts records by the day they arrived and by phone number. A gap of 10 to 20 percent is normal, so treat the ad platform as a steering tool and the CRM as your financial truth.
What is the minimum attribution setup for a small contractor?
Five things: UTM tags on every ad link, hidden source fields on every form, one tracking number per campaign, a required source field on the lead record in your CRM, and a monthly report of cost per signed job by campaign. That setup takes a day to build and will out-report most agencies' dashboards.
