Revenue, not calls
Rank channels by the invoiced revenue they produced, so one substantial job outweighs a page of inquiries.
Marketing attribution for fencing and decking companies
Match signed jobs and their value to the campaigns that produced the homeowner, across a season of deliberation.
$183,000 61% of $300,000 paid
The blind spot
Fencing and decking are quoted in spring and built in summer. The lead report closes the month long before the job is signed.
What you get
Rank channels by the invoiced revenue they produced, so one substantial job outweighs a page of inquiries.
No cookie has to survive the wait. A job closing months later still traces back to the inquiry that started it.
Nothing is redistributed. If a job cannot be traced to a channel, the report says so instead of improving the attributed share.
A worked example
Not impressions, not leads, not cost per click. Closed revenue, by the channel that produced it, for a period you choose — with the portion we could not trace shown rather than quietly shared out across your paid channels.
| Channel | Sales | Revenue | Share | % |
|---|---|---|---|---|
| Google Ads | 26 | $96,000 | 32% | |
| Meta Ads | 12 | $45,000 | 15% | |
| Local service ads | 11 | $42,000 | 14% | |
| Direct / Unknown | 32 | $117,000 | 39% |
Homeowners collect three quotes, compare them, wait for a bonus or a tax refund, and sign months later. The attribution window closed in week two.
Matching on the homeowner rather than a session credits the original campaign whenever the job is signed, which for this trade is the majority of the revenue currently attributed to nobody.
A pressure-treated fence and a composite deck are the same inquiry and several times apart in value, and channels feed them unevenly.
A material or job-type column mapped as Product / service shows premium work as its own line, with how much of it traces to a channel, rather than averaged away.
Fencing and decking demand is researched in the cold months and installed in the warm ones. Households plan a garden project through winter, gather quotes in early spring, and the work is carried out when the weather allows — which can be several months after the inquiry that started it.
That means the advertising spend and the revenue reliably fall in different quarters, and frequently in different financial years. A report comparing this month's spend to this month's invoices is comparing two unrelated cohorts and will conclude that the winter budget achieved nothing.
Matching the invoiced job back to the household who inquired puts the revenue against the period the inquiry came from. For a seasonal trade this is not a refinement; it is the difference between being able to justify an off-season budget and cutting it every year.
A pressure-treated fence and a composite deck of the same footprint differ in price by a multiple, and they are produced by different searches with different intent. One inquiry is one inquiry either way.
Because the volume in this trade is relatively low and the spread of job values is wide, a handful of high-specification jobs will carry a month, and whichever channel produced them will be invisible on a cost-per-lead view.
Ranking on invoiced revenue handles it automatically, and a material or product column mapped as Product / service shows how much of the expensive work traces to a channel at all — which is where the margin, rather than the volume, actually is.
The most common outcome of a first reconciliation is not a discovery, it is an argument. A channel that has looked excellent for years on inquiry volume, often the cheapest one and often the one somebody in the business championed, turns out to have produced very few signed installations and almost none of the large ones. The numbers are not subtle about it, and the first instinct is to look for a fault in the method rather than in the channel. That instinct is reasonable and is better followed to its conclusion than suppressed.
So follow it. Open the matched rows for that channel in particular and ask whether its inquiries are being recorded differently from everyone else's: a form capturing only an email, in a business whose jobs are booked by phone, will depress one channel and no other. Check whether its work sits under a job type that was exported inconsistently. If neither explains the gap, the channel is producing inquiries that do not become fences, and cost per inquiry was never the thing that deserved optimizing in the first place.
Acting on it deserves more patience than the finding does. Cut a channel to nothing on one quarter's evidence and you may have cut the one that fills next spring's diary, because this trade's inquiries and its revenue sit in different seasons by design. Halving a budget and watching two more cycles is the defensible move, and it is also the one that survives being questioned a year later. The report exists to make the conversation possible. It is not an instruction, and it knows nothing about what else changed in the market that quarter.
Why it matters
"We generated 400 leads" invites an argument. "This channel closed $186,400 last quarter, here is the reconciliation" ends one. The teams that can show closed revenue by channel are the teams that get the next increase approved, because they are asking with evidence rather than with conviction.
Killing spend is politically harder than adding it, because someone always owns the channel being cut. A number that reconciles to the sales export takes the argument out of the room — you are not overruling a colleague's judgment, you are reading the same ledger they are.
Platform-reported conversions do not reconcile to revenue, and eventually someone in finance notices. Reporting built from your own closed-sales export starts from the number finance already trusts, which is why it holds up when it is checked.
Because this reconciles exports rather than tracking visitors, it works on months that have already closed. You are not instrumenting now to learn something in ninety days — you can answer for last quarter today, which is usually when the question is being asked.
Honest answers
There is no attribution window. A July signature still credits an April campaign.
Which is why signed jobs are the measure — losing quotes appear as unmatched leads and cost nothing.
Two exports and a mapping you confirm once. Nothing is installed and no numbers are bought.
Pricing
The price here is the price on the invoice, plus any sales tax that applies — no per-call, per-minute or per-form fees. Starter usually fits fence and deck installation contractors — one workspace, one seat, and everything that makes the number defensible from the first plan.
A single business getting started
$9/mo
billed monthly
Questions
Anything else? Talk to us — a person answers, usually the same day.
Signed jobs: a customer email or phone, the amount, and a date.
As long as it turns out to be. There is no window to fall outside of: however much time passes between the inquiry and the job, it matches if the customer is in both files.
Yes, with the relevant column.
Yes, provided both seasons are in the files you upload. Run the report over the same months of each year — spring against spring — so a wet April or an early start is compared with its own season rather than with the whole year.
No. Where you already have them, a tracked caller's number is a clean key and raises the match rate, but nothing requires tracking numbers — the quote and site-visit requests from your ad platforms is enough to start.
Encrypted in transit and at rest, isolated to your workspace, and deletable in one click. A DPA is available, and customer details never leave that workspace.
Yes. Most fence and deck installation contractors begin with last year, because it is the cheapest way to find out whether the exercise tells them anything.
Job rows analyzed in a calendar month. Quote rows do not count.
No. Nothing goes on a page, nothing connects to your job management software, and no permissions are granted — the inputs are two files you export and can read yourself.
Yes. Those jobs were recorded because you billed for them rather than because anybody was tracking, so a finished year matches exactly as well as the current one. A full year also covers the spring rush, when most fences and decks are sold.
It is reported as Direct and Unknown. Unmatched invoiced revenue is never shared out across the paid channels to improve the attributed figure.
Two years, so the off-season inquiries and the in-season installations are both represented and can be compared across years rather than months.
Yes, with a product column — they draw on different searches and different budgets.
Yes, if the export carries it. It is usually where the margin difference between channels shows up.
Yes — referred customers go into the lead file, tagged with the referrer, and are ranked on invoiced revenue beside paid channels.
Check three things before concluding either way: whether that channel's inquiries capture a contact detail your jobs file also carries, whether its work sits in a consistently exported job type, and what its matched rows look like. If all three are clean, the ranking is telling you something real.
Halving it and watching another cycle is safer in a seasonal trade, where inquiries and installations fall in different quarters. A single quarter can show a channel producing nothing simply because the jobs it produced are still waiting on the weather.
Show the rows. Every counted match traces to a named job and a named inquiry, and the weaker links are listed separately rather than folded in. A ranking that can be audited line by line survives disagreement in a way that a dashboard number does not.
Nearby
Match completed jobs and recurring maintenance contracts to the campaigns that produced the customer.
See how it worksMatch signed contracts and their value to the campaigns and shows that produced the buyer, across a decision that takes a season.
See how it worksMatch signed jobs and their value to the calls and campaigns that produced them, including the work that follows a roof.
See how it worksFrom the blog
Multi-crew home and field services businesses run on phone calls and job management software, not on web forms. Which means the standard marketing dashboard is measuring the smallest part of the business and missing where the money actually is.
Read the articleGoogle's Local Services Ads charge for the phone call, not the click, and they hand you the caller's number with the invoice. It is the easiest channel in the budget to attribute to closed revenue. Almost nobody does, because the lead inbox is not where the reports live.
Read the articleThe attribution window is the most consequential setting in marketing measurement and the least defended. It is usually inherited from a platform default, occasionally changed until the numbers look better, and almost never written down. Here is how to choose one honestly, why a longer window for one channel can be legitimate, and the single rule that separates a measurement from a rationalization.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.