Revenue, not calls
See which channels produced invoiced revenue rather than which produced the most inquiries — on most books those are not the same channels.
Marketing attribution for tree service companies
Match completed jobs and their revenue to the calls and campaigns that produced them, from a $250 trim to a $9,000 removal.
$152,500 61% of $250,000 paid
The blind spot
Storm work and routine trimming arrive through the same channels at the same cost per call and are nothing alike in revenue.
What you get
See which channels produced invoiced revenue rather than which produced the most inquiries — on most books those are not the same channels.
However long the customer takes to decide, the job is credited to the campaign that produced them rather than to whatever ran last.
Every match is auditable and reversible, and jobs that trace to nothing are shown as Direct and Unknown rather than shared out across the paid channels.
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 | 71 | $82,500 | 33% | |
| Local service ads | 47 | $55,000 | 22% | |
| Meta Ads | 13 | $15,000 | 6% | |
| Direct / Unknown | 84 | $97,500 | 39% |
A single storm can produce more revenue than a quiet quarter, and it lands in whichever channel happened to be running. Blended averages across a year describe none of it.
Running the report on specific date ranges separates storm response from baseline demand, so the channels that produce steady work are not judged by a week of weather.
Job values in this trade span a factor of thirty. Cost-per-call reporting treats a hedge trim and a crane removal as the same outcome.
Ranking on completed job revenue identifies the channels producing the large jobs, which is the entire economics of the business.
A tree company's year has two shapes. Planned work — pruning, shaping, scheduled removals — is quoted, compared and booked over weeks at a predictable margin. Storm work arrives in a concentrated burst after weather, converts within hours, and is priced under urgency with whatever crews can be assembled.
They come from different searches, convert on different timescales and carry different margins, and they are almost always reported as one job count. A storm week will make whichever channel was running look extraordinary, and a quiet quarter will make the same channel look broken.
A job-type column mapped as Product / service, read beside a revenue-based ranking, separates them, so planned-work revenue, which is the part the business can actually control and grow, is seen on its own terms rather than through whether the weather cooperated.
Trees on a property need attention repeatedly. A household that has one removal done well calls again for pruning, for a neighboring tree, and for storm clean-up, and a commercial property manager who is satisfied will route an entire portfolio of sites to the same contractor.
Every conventional report scores the advertisement against the first job and treats each subsequent visit as an unattributed new customer. That systematically undervalues channels that produce relationships and overvalues those that produce one-off emergencies.
Because the match is on the customer, later invoices credit the channel that produced them originally. On a commercial book especially, a single acquired property manager can represent years of recurring work that no cost-per-lead figure would ever have justified.
A homeowner removing one dead oak and a municipality or property manager tendering an annual maintenance schedule are not the same customer, do not search the same way, and do not decide on the same timescale. One is an emotional, urgent, single purchase; the other is a procurement exercise with a budget cycle.
Blended together, residential volume dominates the job count while commercial contracts dominate the revenue, and a single cost per lead describes neither of them usefully.
A customer-type column mapped as Product / service shows residential and commercial revenue as separate lines, with how much of each traces to a channel — which may be the first time the commercial development effort has been set against the residential advertising at all.
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
Which is why date ranges matter. Run a storm week separately from a normal month and compare the two honestly.
Which is exactly why the ranking is on invoiced revenue rather than on how many jobs were counted.
Any call export works as a lead file, and if you have none, an inquiry list does.
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 tree removal and arborist companies — 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.
A list of jobs with a customer contact detail, what it was worth, and when. That is the whole requirement.
Yes — run the report on that date range.
Yes, with a job-type column mapped as Product / service, which shows removal, pruning and stump revenue separately with how much of each traces to a channel. Channels are not ranked within each job type.
Yes — everything billed later credits the campaign behind the first job.
No. It is useful rather than required, and plenty of tree service companies run this with only an ad platform export.
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. Site photos and property notes can stay out of the export.
Yes, and there is no window to fall outside of. However long ago a job closed, it matches if the customer is in both files.
Job rows analyzed in a calendar month. Call rows do not count. Only the invoiced revenue side counts toward the allowance.
No. Nothing goes on your website, nothing connects to your job management software, and no permissions are granted. The inputs are two CSV files you export yourself and can open in a spreadsheet before sending either of them.
Yes, and most companies start that way. The method reads records kept for billing rather than a tag that had to be running at the time, so last year is exactly as analysable as this month.
It is reported as Direct and Unknown and stays there. Unmatched revenue is never spread across the paid channels to make the attributed share look larger, because doing that would make every other number on the page untrustworthy.
Yes, with a job-type column mapped as Product / service, and you should — storm revenue then shows as its own line, so a storm week is visible for what it is. The channel ranking still includes it, so read a storm month's ranking with that line beside it.
Yes, credited to the channel that produced the customer originally rather than counting as a new acquisition each visit.
Yes, with a customer-type column. They are effectively two markets with different cycles and different values.
Two years if you can, so a storm year and a quiet year are both represented and seasonality stops being an objection.
Keep them on the one job row if they were billed together. The customer found you once, and every row counts as a sale, so splitting one invoice into several makes the channel that produced them look busier than it was. The channel ranking's revenue per sale already shows which channels bring the larger crane-and-stump jobs.
Nearby
Match completed jobs and recurring maintenance contracts to the campaigns that produced the customer.
See how it worksMatch signed jobs and their value to the campaigns that produced the homeowner, across a season of deliberation.
See how it worksMatch your invoiced jobs to the calls and ads that produced them, and find out which channel is actually paying for the trucks.
See how it worksWhere your sales already are
Export invoices from GorillaDesk, upload the leads that produced them, and rank marketing on the account rather than on the first job.
What to exportExport invoices from Arborgold, upload the leads behind them, and rank marketing on completed work rather than on requests for a quote.
What to exportExport invoiced work from Aspire, upload the leads behind it, and rank marketing on the account across its renewals.
What to exportExport billed services from Briostack, upload the leads behind them, and rank channels on what their accounts were actually worth.
What to exportExport billed applications from RealGreen, upload the leads behind them, and rank channels on the season rather than on the sign-up.
What to exportFrom 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 articlePixels were built for sales that finish in a browser. Most sales don't. Here's the method that works on exports you already have — and why the tools you're paying for structurally cannot do it.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.