Cookie preferences

Choose what we may use. Strictly necessary cookies keep you signed in and can't be turned off; everything else is your call and changes nothing about how the site works. You can change your mind any time from the footer.

Marketing attribution for Roofing Contractors

Which ads produced signed roofs?

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
Roofing Contractors workspace Q3 2026 Sample data
Signed contracts traced to a channel

$540,000 60% of $900,000 paid

  • Google Ads $342,000 · 38%
  • Meta Ads $153,000 · 17%
  • Email marketing $45,000 · 5%
  • Direct / Unknown $360,000 · 40%
Direct / Unknown is shown, never shared out across the channels above.
Google Ads · LeadQ3 2026 14 · (•••) •••-0134
Closed sale · Q3 2026 27$17,300
Matched · high confidence

The blind spot

What's actually happening

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

Built for Roofing Contractors.

Contracts, not inspections

Rank channels by contract value so a source producing few large jobs wins properly.

Long, weather-driven cycles

An inspection in spring signed after an autumn storm still matches the original ad.

Checkable lead-source claims

Only exact matches count, so a lead reseller cannot claim a homeowner it never sent.

A worked example

The number you can take into a budget meeting.

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.

Total revenue$900,000paid signed contracts
Attributed to a channel$540,00060% of revenue
Average deal$17,300per paid sale
Match rate60%of sales matched
ChannelSalesRevenueShare%
Google Ads19$342,00038%
Meta Ads9$153,00017%
Email marketing3$45,0005%
Direct / Unknown21$360,00040%
01

Inspection volume is not contract volume

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.

02

Storm work breaks click attribution completely

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 analyzed properly, which for a weather-driven trade is the only way to compare years.

03

Storm work and retail work do not belong in the same average

A storm-restoration roof and a retail replacement are different products with different cycles, different margins and completely different acquisition. Storm work arrives in a concentrated burst driven by weather and canvassing; retail work is a considered purchase researched over months.

Running them through one report produces an average job value and an average cycle that describe neither, and it makes the advertising look wildly effective in a storm year and broken in a quiet one.

A job-type column mapped as Product / service separates them so retail demand generation can be judged on its own terms — which matters most in exactly the years when there is no storm to carry the number.

04

Insurance work makes the amount somebody else decides

On an insurance job the homeowner is the customer and the carrier sets the amount. Approved scope, supplements and depreciation all move the final figure after the sale, sometimes months after.

That makes contracted value a poor measure and collected revenue the honest one. Exporting what was actually collected also keeps the report reconcilable to the company's own accounts, which is what makes it survive a conversation with the owner.

A payer column mapped as Product / service separates insurance work from retail so the two are never blended, and shows how much of the self-funded retail revenue traces to a channel at all.

05

Canvassing and advertising compete for the same budget and are never compared

Most roofing companies run both a media budget and a field operation — canvassers, storm chasers, door knockers — and the two are managed by different people, measured in different units and never priced against each other. The field team reports doors knocked and appointments set; the marketing budget reports leads and cost per lead.

Neither reports collected revenue per dollar spent, which is the only comparison that could settle how the next hundred thousand should be split between them.

Adding a canvassed list to the lead file, each row tagged as canvassing, puts the field operation on exactly the same axis as paid search. The answer may be uncomfortable in one direction or the other, and it is more useful than the argument it replaces.

Why it matters

What changes when you can prove it.

You stop defending the budget and start growing it

"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.

You can cut the wrong channel without a fight

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.

Your reporting survives the finance review

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.

You answer in an afternoon, not a quarter

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

The pushback we hear from Roofing Contractors.

They say

A lot of our work is door-knocking and referral.

We say

That lands in Direct / Unknown, which is correct and worth quantifying. Crediting canvassing to your Meta budget would make the paid figures meaningless.

They say

Insurance jobs complicate the amounts.

We say

Export whichever figure you want to rank on — contract value, approved claim, or your own revenue. The report ranks consistently on what you provide.

They say

We buy leads from several resellers.

We say

Combine their exports into the lead file, each row tagged with the reseller as its source. Matching them against signed contracts is the fastest way to work out which reseller is worth renewing.

Pricing

Flat monthly pricing. No per-call fees.

The price here is the price on the invoice, plus any sales tax that applies — no per-call, per-minute or per-form fees. Growth usually fits residential and storm-restoration roofing companies — 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.

Questions

Questions we get about Roofing Contractors.

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.

Start today

Stop guessing which ads pay off.

Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.