Contracts, not inspections
Rank channels by contract value so a source producing few large jobs wins properly.
For Roofing Contractors
Match signed and installed contracts to the leads and ads that produced them, across a sales cycle that often runs months.
No card required Nothing to install Cancel anytime
$540,000 60% of $900,000 paid
The blind spot
Roofing leads are expensive, most inspections do not convert, and the ones that do convert are worth twenty thousand dollars or more. Judging channels on lead volume in that market is close to guessing.
What you get
Rank channels by contract value so a source producing few large jobs wins properly.
An inspection in spring signed after an autumn storm still matches the original ad.
Only exact matches count, so a lead reseller cannot claim a homeowner it never sent.
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 | 19 | $342,000 | 38% | |
| Meta Ads | 9 | $153,000 | 17% | |
| Email marketing | 3 | $45,000 | 5% | |
| Direct / Unknown | 21 | $360,000 | 40% |
Free-inspection offers produce leads cheaply and convert poorly. A channel that generates a hundred inspections and four contracts is worse than one generating twenty inspections and eight, and no cost-per-lead report will tell you that.
Matching signed contracts back to their original lead source ranks channels on the only number that matters — installed contract value — and usually reorders them substantially.
A homeowner researches roofing in May, does nothing, then signs in October after a storm. The click is five months old, the cookie is gone, and any platform-reported attribution has expired.
Because the match is on the homeowner rather than a session, the October contract is still credited to the May lead. It also means a season that has already ended can be analysed properly, which for a weather-driven trade is the only way to compare years.
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 judgement, 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
That lands in Direct / Unknown, which is correct and worth quantifying. Crediting canvassing to your Meta budget would make the paid figures meaningless.
Export whichever figure you want to rank on — contract value, approved claim, or your own revenue. The report ranks consistently on what you provide.
Upload their exports as the source file. Matching them against signed contracts is usually the fastest way to work out which reseller is worth renewing.
Pricing
The number here is the number on the invoice — no per-call, per-minute or per-form fees. Most residential and storm-restoration roofing companies land on Growth — thirteen months of history to compare a month to the same month last year, and a PDF you can put in front of whoever holds the budget.
A business scaling ad spend
$199/mo
billed monthly
Questions
Anything else? Talk to us — a person answers, usually the same day.
Signed or installed contracts: homeowner phone or email, the contract value, and the date.
As long as your data covers. There is no attribution window, because there is no cookie involved.
Yes — compare any two ranges, including the same quarter last year, which is the only fair comparison in this trade.
Yes, with a territory or crew column.
No. Lead exports from your ad platforms or resellers work as the second file.
Leave them out, or include them with a status column if you want the conversion view. Only what you upload as sales counts toward the limit.
Yes, from their own Agency account with a workspace for your company.
Contract rows analysed in a calendar month. Lead rows do not count.
Nearby
Match installed equipment and invoiced work to the calls and ads that produced them, so the channel that fills your install schedule is obvious.
See how it worksMatch invoiced jobs to the calls and ads behind them, and separate the drain clears from the repipes.
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 worksStart today
Upload two exports and see your real revenue by channel in minutes. Three days free, no card.