Contract value, not MQLs
Every channel is measured on the contract revenue behind it, so volume stops flattering whichever source is cheapest per inquiry.
Marketing attribution for waste and recycling companies
Match opened accounts and the recurring service revenue they bill to the campaigns and calls that produced the customer.
$342,000 57% of $600,000 paid
The blind spot
One-off skip hires and multi-year commercial contracts arrive through the same phone number and are hundreds of times apart in value.
What you get
Every channel is measured on the contract revenue behind it, so volume stops flattering whichever source is cheapest per inquiry.
Long gaps are the normal case here, not an edge case. The client appears in both files, so the match holds however far apart the two dates are.
Nothing is inferred. A contract either matches a source exactly or it is reported as unattributed, and the unattributed share is printed rather than absorbed.
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 | 489 | $180,000 | 30% | |
| Local service ads | 212 | $78,000 | 13% | |
| Outbound & referral | 229 | $84,000 | 14% | |
| Direct / Unknown | 701 | $258,000 | 43% |
A single skip is a $340 transaction. A restaurant on twice-weekly collection is $18,000 a year for as long as it trades. Blending them into one cost-per-lead describes neither.
A service-type column mapped as Product / service shows residential one-offs and commercial contracts as separate lines, each with the revenue it actually produced and how much of it traces to a channel.
Judged on a first invoice, almost every channel that produces commercial accounts appears unaffordable, which is why this spend is so often cut.
Because the match is on the account, every month of service credits the channel that won it. That is usually the difference between a defensible budget and an abandoned one.
Two accounts of identical value are not equally valuable to a waste business. One sits on an existing round where the truck passes anyway; the other is eleven miles off route and adds forty minutes to a shift. The revenue line is the same and the contribution is not, and no marketing report has ever known the difference. A channel producing scattered accounts across a wide area looks identical on the page to one producing clustered accounts on a single industrial estate, and operations has no way to say so in budget language.
A round or area column in the revenue export, mapped as Location, closes part of that gap. The report then shows each round's revenue and how much of it traces to a channel, which turns an abstract argument about cost per acquisition into something somebody can look at. It does not rank channels within each round, but a round whose revenue sits mostly in Direct / Unknown is one the paid media is not reaching, and a round with a high attributed share is one it is. Geographic targeting is one of the cheapest levers in paid media and one of the least used in this industry, partly because nobody has had evidence about where the attributed accounts are.
A depot column supports depot-level comparison instead, which matters because depots differ enormously in competition, tipping costs and how full the rounds already are. A channel that is excellent for a depot with spare capacity may be actively unhelpful for one running at full utilization, where the only useful new account is a dense one. A group-level average sits between those two situations and describes neither, while being the number the group budget is set against. Mapped as Location, the column shows each depot's revenue and how much of it traces to a channel; it does not rank channels within each depot, but it shows where marketing is carrying a depot and where it is not.
A waste contract quotes a price per lift or per container, and the invoice includes a good deal more: weight above an allowance, contamination charges, rental of the container, fuel and landfill levies, missed-collection fees. Some of those are recharges and some are margin, and together they can move an account's actual value well away from the number it was sold at. Reporting on contracted price therefore ranks channels on what was quoted rather than on what was billed, and the two diverge most on commercial accounts.
Exporting billed revenue keeps the ranking anchored to money that arrived. It also guards against a specific failure: accounts that generate heavy contamination charges and repeated missed collections produce operational cost dressed up as revenue, and they look excellent on any report built from contract values. Marking each invoice line as a service charge or a recharge and mapping that column as Product / service shows the two as separate lines, with how much of each traces to a channel, which is worth doing once to see how far apart they are. If the recharge line is small, use the simpler export from then on.
Container rental deserves a mention of its own, because it behaves like a subscription. A customer with three skips on long-term hire produces steady monthly revenue independent of how often anything is collected, and that revenue credits whatever produced the account just as collections do. Businesses exporting only collection revenue lose it, and with it a systematic share of the value of every acquisition channel they run. The rows exist in the billing system because they were invoiced, so including them is a decision about the extract rather than a change to anything operational.
The two halves of this business convert on timescales with nothing in common. Domestic and small trade skip hire is an immediate purchase: somebody needs a container this week, they search, they call three suppliers, and the one who answers with a price and an availability wins. The decision is made within hours and the revenue is billed within days. Commercial contracts are procurement exercises — a site visit, a waste audit, a proposal, a comparison against the incumbent, a notice period — and six months from first inquiry to first collection is unremarkable.
Measuring both against one target is what pushes budget toward the fast half every single year. Cost per inquiry rewards the channel producing skip bookings, because they convert this week and can be counted this week, while the channel producing commercial inquiries shows a cost and no return for two quarters and gets cut somewhere in between. A service-type column mapped as Product / service and a long enough range prevent that, because the commercial revenue eventually credits the inquiry that produced it however long ago it arrived. There is no window to fall outside of.
Answering the phone deserves mention here, because it is the dominant variable on the fast half and it is invisible in every advertising report. A channel's apparent performance in skip hire is substantially a measure of how often calls from it were answered promptly and quoted competently. Where a call log goes into the lead file, the difference between calls received and accounts opened becomes readable per channel, which separates a demand problem from a handling one. Those two have entirely different remedies and are routinely confused, usually in favor of blaming the media.
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 fine. Map a service-type column as Product / service and the report shows them as a separate line from contract work.
Which is why later billing credits the original channel. That is where the value of the account is.
Any call export can go into the 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 waste haulers, skip hire and recycling operators — 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.
Opened accounts or billed revenue: a customer email or phone, the amount, and a date.
Yes — later billing credits the channel that produced the account.
Yes: map a service-type column as Product / service and each shows as its own line.
Yes: a depot or region column mapped as Location shows each one's revenue and how much of it traces to a channel. Channels are ranked overall, not within each depot.
No. It is useful rather than required, and plenty of waste and recycling companies run this with only an ad platform export.
Encrypted at rest and in transit, workspace-isolated, and deleted properly rather than flagged when you ask. A DPA is available if your own agreements require one.
Yes. Those contracts 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.
Account or billing rows analyzed in a calendar month. Call rows do not count.
Partly: a round or area column mapped as Location shows each round's revenue and how much of it traces to a channel. It does not place each channel's accounts on a map or rank channels within a round.
Billed revenue. Weight allowances, contamination charges, container rental and levies move an account's real value well away from the price it was sold at, and the gap is widest on commercial work.
Yes. It behaves like a subscription, so export it as further rows against the same customer contact. Exporting only collection revenue loses a systematic share of every channel's value.
Map a service-type column as Product / service and run a long range. Commercial contracts take months to convert and there is no window to fall outside of, so the revenue credits the inquiry that produced it whenever it arrives.
Where a call log goes into the lead file, yes. Each channel's call count shows beside the accounts it opened, and those two problems have completely different remedies.
Not much. Depots differ in competition, tipping costs and how full the rounds already are, and the variation between depots can be larger than the variation between channels. A depot column mapped as Location shows each one separately.
Nearby
Match booked freight revenue to the inquiries and campaigns that produced the shipper, across a relationship that builds over months.
See how it worksMatch signed contracts and the monthly revenue they bill to the campaigns and outbound that produced the account.
See how it worksMatch rental revenue and the accounts behind it to the campaigns and calls that produced the customer, across every subsequent hire.
See how it worksWhere your sales already are
From the blog
It is easy to compute, easy to improve, and it will happily bankrupt you. A defense of the least popular position in performance marketing: that the metric most teams are held to is actively harmful, and that the alternative is available to anyone willing to do one join.
Read the articleThe export is the part of an attribution project that everyone treats as trivial and that determines whether the whole thing works. Here is the field list, the date-range trap, the deduplication rule, and the six columns to leave out on purpose.
Read the articleFirst touch, last touch, linear, time decay, U-shaped, data-driven. Six ways to divide a number that nobody has verified. Here is what each model is actually claiming, when the choice genuinely matters, and why arguing about it before you can match a sale is arguing about the wrong thing.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.