“GorillaDesk already reports revenue by customer.”
It does, and it has no idea which advert produced the customer, because it never saw one.
For GorillaDesk
Export invoices from GorillaDesk, upload the leads that produced them, and rank marketing on the account rather than on the first job.
No API key Nothing to install in GorillaDeskNothing to install No card requiredNo card
CloseRev reads a GorillaDesk export of invoices — the customer's phone or email, the amount and the date — and matches it against the calls, forms and ads that produced the first job. Pest control and lawn care sell recurring plans, so the value of a channel is the account it produced rather than the initial service call. Invoices with no traceable lead are reported as Direct / Unknown.
Last checked against GorillaDesk's own documentation on September 24, 2026.
The gap
Cost per lead looks fine and cancellation rates look fine, and nobody has ever put the two together per channel.
What was sold, to whom, and for how much.
The click, the keyword, the call, and what each one cost.
The file
Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.
On the customer record rather than the invoice. Phone carries most of the match in this trade.
What was billed, including the initial service and every recurring visit after it.
When the work was billed. Recurring plans produce many dates from one decision.
Quarterly general pest, termite, mosquito, lawn — and whether the property is residential or commercial. Both split a channel's accounts into the profitable and the marginal.
Step by step
Written for somebody with GorillaDesk open in the next tab. Report names vary by edition, so each step says what to look for.
One row per invoice with a customer contact detail, the total and a date. Include recurring visits rather than first jobs alone.
A quarterly plan produces four invoices a year. Anything shorter measures the initial service and nothing else.
Call tracking first — this trade still runs on the phone — plus search ads, the website form and any neighbourhood or marketplace listing.
An account is the unit. A customer with two properties is two accounts and usually two different economics.
The join runs on the phone and the email, normalised, with the first service and recurring revenue reported apart.
What comes back
Revenue by channel, the count of sales behind each figure, and an honest bucket for the ones nobody could trace. Sample figures, from the worked example on the Pest Control page — not from a GorillaDesk account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 214 | $171,000 | |
| Meta Ads | 68 | $49,500 | |
| Email marketing | 54 | $40,500 | |
| Direct / Unknown | 231 | $189,000 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
A pest control account that stays four years is worth roughly sixteen quarterly services. One that cancels after the initial treatment is worth one.
Both look identical in a cost-per-lead report, and they arrive from different channels in systematically different proportions: discount-led channels bring customers who wanted a one-off treatment and were sold a plan.
Matching a year or more of invoices back to the source turns that into a number you can act on. It is normal for the ranking to invert completely once recurring revenue is included.
The practical consequence is usually a budget shift rather than a channel being cut: the same channel at a different offer produces a quite different customer.
General pest is a low-ticket recurring plan. Termite work is a large one-off with a warranty attached. Mosquito is seasonal and highly weather-dependent.
Blended, they produce an average revenue per customer that describes none of them, and a channel heavy in one will be ranked as though it produced the others.
Where the export carries a service plan, the report splits on it, and the split is usually where the decision is. A channel that is expensive for general pest can be the cheapest source of termite work you have.
Seasonality needs the same care: comparing a mosquito channel's summer against a general pest channel's whole year is a comparison of calendars, not of marketing.
Homeowners with a pest problem call. They call from a map result, from a yard sign, from a search advert and from a neighbour's recommendation, and most of those calls never touch a form.
Without call tracking the lead file is mostly empty and the Direct / Unknown bucket swallows the answer. That is not a flaw in the match; it is a missing input.
Call tracking numbers on the website, on vehicles and on any paid listing produce a lead file with a source on every row, which is what makes the rest of this work.
Where calls are not tracked, the report says so plainly rather than distributing those jobs across the channels that happen to have data.
A channel's value is what its accounts billed, which means a cancellation is not a separate operational concern — it is the end of that channel's revenue.
Because the report reads invoices over a long window, a cohort that stopped producing invoices shows up as exactly that, without anybody having to run a churn report and join it by hand.
It also exposes the case that looks like success and is not: a channel with excellent first-year revenue and nothing in year two, which a twelve-month view would have rated highly.
Nothing here predicts churn. It reports what the accounts from each source actually billed, which is the only version of this number that is defensible.
Fair questions
It does, and it has no idea which advert produced the customer, because it never saw one.
Then the report will show that honestly, and you will know what the paid channels are actually adding.
Then most of this trade's leads have no source, and the first fix is numbers on the website and the trucks, not a different report.
No. It reads a file you exported, so your schedule, routes and customer records are not reachable from here.
Invoices with a customer contact detail, the total and a date.
A year at minimum, because a quarterly plan takes a year to show what it is worth.
They are reported separately, so you can decide rather than having it folded in silently.
Yes, where the export carries a service plan — and that split is usually where the real decision sits.
Compare like calendars. A summer-only service measured against a year-round one is a comparison of seasons.
Summed by customer, and split by property where the export carries one.
It is not revenue and does not appear. The report counts money, not work.
Anything with no traceable lead. In this trade that is usually untracked phone calls, and its size tells you what to fix.
Yes, and it is worth splitting them out: they are larger, slower to win and retain differently.
A contact detail, an amount and a date, plus a plan or property type if you include them. No addresses required, no notes, no card data. Encrypted in transit and at rest and deleted with the import.
Revenue per acquired account by source, initial and recurring apart, split by plan where available, and everything unmatched kept visible.
By trade
What the report looks like once the export is in, written for each one.
Other systems
Running more than one system, or comparing? The method is the same and the columns are not.
GorillaDesk and the other product names and logos on this page belong to their owners and are shown to identify the software a file comes from. CloseRev is not affiliated with or endorsed by them, and connects to none of them: it reads a file you export.
Start today
Nothing to install in GorillaDesk, no API key, and no need to have been tracking anything until now. Last year works as well as this month.