Revenue, not calls
Rank channels by the jobs they actually closed, so one large job outweighs twenty inquiries.
Marketing attribution for landscaping and lawn care companies
Match completed jobs and recurring maintenance contracts to the campaigns that produced the customer.
$220,000 55% of $400,000 paid
The blind spot
One-off design-build jobs and weekly maintenance contracts are the same lead in the reporting and completely different businesses in the accounts.
What you get
Rank channels by the jobs they actually closed, so one large job outweighs twenty inquiries.
A quote given in spring and accepted in summer still credits the campaign behind it.
Exact matches only, with weaker links held back for a person to accept or reject — which is what makes the invoiced revenue figure survive being questioned.
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 | 148 | $116,000 | 29% | |
| Local service ads | 94 | $72,000 | 18% | |
| Meta Ads | 41 | $32,000 | 8% | |
| Direct / Unknown | 229 | $180,000 | 45% |
A customer on a $160 monthly plan for four years is worth almost $8,000. Attributed on the first invoice, the channel that won them looks barely break-even.
Matching on the customer means every later invoice credits the original channel, and maintenance acquisition stops being the thing nobody can justify spending on.
Spring and autumn are not comparable, and neither is this April against last October, yet those are the comparisons most reporting defaults to.
Because there is no attribution window, the same season can be run against the same season a year earlier, which isolates what the marketing did rather than what the weather did.
A landscaping company usually runs two things at once. Maintenance is recurring, predictable and modest per visit, and it compounds: a contract held for four seasons is worth many times its first month. Installation and hardscaping is project work — large, irregular, and won against competitive quotes.
They are marketed with different keywords at very different costs and they convert on completely different timescales. Reported together they produce a cost per lead that is dominated by whichever happened to generate more inquiries that month, and a revenue figure that tells you nothing about either.
A service-type column mapped as Product / service, read beside a revenue-based ranking, splits them. The finding may be that maintenance is undervalued by every metric currently in use, because its worth is spread across years the marketing report never looks at.
Two channels can sign maintenance contracts at the same cost while one produces customers who renew for four seasons and the other produces customers who cancel after one. Cost per contract rates them identically and is wrong by a factor of four.
Because every later invoice credits the acquiring channel, the report separates them without anybody having to run a retention analysis. Exporting cancellation dates as well lets it show average tenure by channel directly, which is the number that should be setting the acquisition budget.
The revenue file is billed work: one row per invoice or per customer, carrying a contact detail, the amount and a date. A service-type column separating maintenance from installation, mapped as Product / service, is the addition that matters most, because the two have opposite economics and should never share an average.
The second file is whatever demand data you have — a Google Ads export, a call tracking export, or a list of inquiries from a marketplace or directory. Any single one of them is enough to produce a first report; several can be combined in the one lead file, each row tagged with its source, and each additional source shrinks the unattributed bucket.
Nothing goes on the website and nothing connects to your job management software. That also means you do not need to have been tracking anything until now: the records exist because the business billed for the work, which is a far more reliable reason for them to exist than marketing intent.
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
Compare the same season year on year — there is no attribution window and nothing had to be installed at the time.
Which is why recurring revenue must credit the original channel. That is where the value of a maintenance customer actually shows.
If it exports jobs or invoices to CSV, that is enough.
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 landscape contractors and lawn care 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.
Completed jobs or invoices: a customer email or phone, the amount, and a date.
Yes — later invoices credit the channel that produced the customer.
Yes, with a job-type 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.
Yes: a territory column mapped as Location, or a crew column mapped as Product / service, so each one's invoiced revenue is seen on its own rather than inside a portfolio figure.
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. Property access notes and service schedules can stay out of the export.
No installation, no tracking numbers and no app for anybody to remember to use. Two exports is the whole requirement.
Job or invoice rows analyzed in a calendar month. Lead rows do not count.
Yes, with a service-type column. Their economics are not comparable without it.
Yes, and it credits the channel that produced the customer originally.
Yes, if cancellation dates are exported.
Two to three years, because the trade is seasonal and maintenance value accrues slowly.
Yes: a branch column mapped as Location, or a crew column mapped as Product / service (one extra breakdown per import).
Yes — add referred customers to the lead file, tagged with the referrer, and referral ranks on revenue.
Export what was collected and the channel keeps only that. Plans that lapse early are not spread evenly across sources — a discount-led channel often signs plans that do not survive the summer — and reading the report on collected rather than contracted revenue is what makes that visible instead of flattering whoever signed them.
Look at the rows. Open the channel, read the jobs credited to it, and confirm the revenue export covered the whole period. If the jobs are real and the amounts are right, the ranking stands, and it has stood for however many months you uploaded. Then change one thing and measure it again next season.
The work is two exports, so the cost is an afternoon. What changes at your size is the reading: with a few hundred jobs a year, treat the output as an order of sources and look at a whole season rather than a month. The decision it supports is usually which single thing to stop paying for.
Weather, holidays and a single large installation can each move a month at this volume. Compare it with the same month last year before concluding anything, and look at the source across the whole season. A channel soft for a quarter during your busy period is a genuine signal; one quiet month is not.
It will not tell you whether a job was profitable after materials and labor, which crew should have run it, or how a route was priced. It maps revenue to the source that brought the customer in. Margin lives in your own accounts, and reading the two together is worth doing — the report holds only one half.
Nearby
Match signed jobs and their value to the campaigns that produced the homeowner, across a season of deliberation.
See how it worksMatch recurring service revenue to the calls and ads that produced the customer — because a one-off treatment is not the business.
See how it worksMatch completed jobs and their revenue to the calls and campaigns that produced them, from a $250 trim to a $9,000 removal.
See how it worksWhere your sales already are
Export paid invoices and match them to the campaigns that produced the customer — including the recurring work that follows.
What to exportExport invoices from QuickBooks Online, upload your call and lead records beside them, and see revenue by channel — from the ledger rather than from a guess.
What to exportExport 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 your Pinterest leads, match them against closed sales, and measure the channel across the length of the project rather than the length of a report.
What to exportExport invoices from ServiceM8, upload the leads behind them, and find out which marketing paid for itself.
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 exportExport your Thumbtack leads, match them against paid jobs, and find out which categories and which job sizes are worth being in.
What to exportExport customers and paid invoices from Thryv, match them on the customer, and see what each source produced in money you received.
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 articleFor a business that sells by phone, a missed call is a lead that was paid for and then dropped. It also quietly rewrites channel ROI: the channel whose callers ring after hours looks weaker than it is. Here is how to measure missed calls and callback speed from a call log, and how to report them without inventing revenue.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.