The roofing attribution problem
A homeowner gets your postcard, sees your yard sign, searches your company name, reads your reviews, talks to your canvasser, and calls the office two days later. Which channel created that lead?
The wrong answer is whichever source the homeowner happens to remember when you ask.
"How did you hear about us?" adds context. It is not an attribution system. Homeowners remember the last touch, the loudest touch, or nothing at all. Your rep picks the easiest CRM source. Call tracking sees the phone number but not the property or the trigger that put it on your list. A QR scan ties back to the mailpiece, then drops the trail the moment someone books the appointment by hand.
Roofing marketing attribution holds one connected chain:
Trigger → property → audience decision → campaign → channel and creative → response → appointment → estimate → contract → revenue and gross margin
That chain answers a sharper question than "which channel got the lead?" It tells you which property signal, audience rule, message, sequence, and channel combination paid for itself in signed roofing work.
Start with a stable property identity
Every home-service job lands at a physical address. Build your attribution on that fact.
Give each property a stable ID that connects:
- Parcel or standardized service address.
- Owner or contact records.
- Weather exposure.
- Permit and property signals.
- Campaign eligibility.
- Mailpiece or landing-page token.
- Calls and form submissions.
- CRM lead and opportunity.
- Inspection, estimate, and job.
- Revenue and gross margin.
Keep that ID off the visible surface. Use an internal key or a secure token, not a sensitive identifier a homeowner could read off a URL.
Skip the stable ID and the same house shows up as several records, so the journey splits and the trail breaks before it reaches the job.
Define the attribution data model
Preserve five kinds of identity.
1. Trigger identity
Why did the property qualify? For example:
- Hail event.
- Wind event.
- Completed job nearby.
- Roof-age campaign.
- Recent property purchase.
- Unsold estimate reactivation.
- Past-customer monitoring.
- Permit or neighborhood activity.
2. Property identity
Which service address or parcel did you select, and what score or segment did it earn?
3. Campaign identity
Which campaign included the property? Give every campaign a name, objective, owner, dates, budget, audience rules, and attribution window.
4. Touchpoint identity
Which channel, creative, offer, and sequence step reached the property?
5. Outcome identity
What happened after the homeowner engaged: response, qualification, appointment, inspection, estimate, contract, revenue, margin, cancellation, or loss?
Track offline-to-online responses
QR codes
A unique QR code opens a property-specific or campaign-specific URL. Track:
- Code or token.
- First scan.
- Repeat scan.
- Landing-page engagement.
- Form completion.
- Click-to-call.
- Appointment request.
Keep sensitive homeowner information out of the visible URL and the QR payload.
Personalized URLs and response codes
A short URL or printed code gives the homeowner a way in without a phone camera. When they type that code, it resolves to the same campaign and property record the QR code points to.
Tracked phone numbers
Assign numbers at the campaign, segment, or creative level to fit your budget and how you run calls. Capture:
- Dialed number.
- Caller number where lawful and available.
- Call time and duration.
- Answered or missed status.
- Call outcome.
- Campaign and property match.
- CRM record created.
Call recordings and transcripts carry their own consent, notice, storage, and access requirements. Review the applicable laws before you turn them on.
Customer-service source capture
Put the campaign context in front of your rep when you can. If a homeowner calls the main number, the rep asks a quick source question and searches the property address. That answer supplements the system attribution; it does not overwrite it.
Track digital campaigns consistently
Google Analytics reads campaign parameters such as utm_source, utm_medium, and utm_campaign to sort traffic from tagged links. Set a naming standard before you launch.
For example:
utm_source=direct_mail
utm_medium=postcard
utm_campaign=2026_05_denver_hail
utm_content=photo_inspection_v2For property-specific links, carry a secure first-party token outside the human-readable UTM fields. Keep names, addresses, phone numbers, and any other personal data out of the URLs you send to analytics platforms.
Define key events such as:
property_page_viewinspection_form_startinspection_requestclick_to_callappointment_booked
Online analytics feeds the attribution model. It is not your source of truth. Signed roofing jobs and gross margin live downstream in the CRM, job-management, or accounting systems.
Connect the CRM without losing context
When a response becomes a qualified lead, carry the attribution fields across with it.
Recommended CRM fields:
- Original trigger ID and type.
- Property ID.
- First campaign.
- First touchpoint.
- Latest campaign.
- Latest touchpoint.
- Response method.
- Original landing or call identifier.
- Appointment source.
- Marketing score or segment.
- Campaign cost allocation.
Use controlled values, not free-text labels. "Facebook," "FB," "social," and "Meta ad" should resolve to one source, not four, unless you defined them apart on purpose.
Choose attribution models that match the decision
No single model answers every question, so run the one that fits the call you are making.
First-touch attribution
Credits the first known campaign interaction. Use it to read discovery and audience creation.
Last-touch attribution
Credits the final known interaction before conversion. Use it to read response capture, knowing it undervalues the earlier touches that set the conversion up.
Linear multi-touch attribution
Splits credit evenly across recorded touches. Easy to explain, and it assumes every touch pulled the same weight.
Position-based attribution
Weights the first and final touches and shares the rest among the middle interactions.
Trigger-first property attribution
Keeps the original trigger and property qualification separate from channel credit. This one fits Hail Trigger's category, because you usually want to know two things at once: why the property entered the market, and which touchpoint drove the response.
A working roofing dashboard reports several views side by side:
- Original trigger.
- First known touch.
- Last known touch.
- Assisted touches.
- Originating project or event.
- Closed-job revenue and margin.
You are after decision clarity, not one model crowned as the truth.
Build a roofing attribution funnel
Run consistent lifecycle stages:
| Stage | Definition example |
|---|---|
| Selected property | Passed audience and suppression rules |
| Contacted property | At least one campaign touch went out |
| Engaged property | Scan, visit, call, reply, field conversation, or other tracked engagement |
| Qualified lead | Person and need meet the criteria you set |
| Booked inspection | Appointment created |
| Completed inspection | Inspection occurred |
| Estimate | Formal scope or proposal delivered |
| Signed job | Contract executed |
| Produced job | Work completed |
| Collected revenue | Payment recognized under company policy |
Don't call every selected address a "lead." That inflates the count and turns your conversion rates into noise.
Core attribution metrics
Audience efficiency
Suppression rate = suppressed properties ÷ candidate properties Activation rate = contacted properties ÷ approved properties Cost per contacted property = campaign cost ÷ contacted properties
Response and sales efficiency
Property response rate = responding properties ÷ contacted properties Cost per qualified lead = campaign cost ÷ qualified leads Cost per booked inspection = campaign cost ÷ booked inspections Inspection completion rate = completed inspections ÷ booked inspections Inspection-to-contract rate = signed contracts ÷ completed inspections
Financial efficiency
Customer acquisition cost = campaign cost ÷ signed customers Revenue per contacted property = attributed revenue ÷ contacted properties Gross margin per contacted property = attributed gross margin ÷ contacted properties Gross-margin return on campaign spend = attributed gross margin ÷ campaign cost
That last line is your roofing campaign ROI in one number. Decide up front whether campaign cost includes data, postage, printing, media, labor, software, call handling, and sales compensation. Use the same definition every time. Consistency beats the broadest possible cost line.
Handle attribution windows deliberately
A roofing decision can land days or months after the first touch, so set your attribution window by campaign type.
- Fresh storm campaigns want short-, medium-, and long-tail views.
- Completed-job neighborhood campaigns throw off delayed branded searches.
- Retail roof-age campaigns run on a longer window.
- Past-customer monitoring holds the relationship across multiple weather events.
Report the window next to the result. A 14-day campaign and a 180-day campaign measure different behavior, so don't line them up as if they don't.
Data-quality rules
Set governance for:
- Address normalization.
- Duplicate properties and contacts.
- Shared phone numbers or household contacts.
- Moved owners.
- Multiple campaigns touching one property.
- Manual CRM source changes.
- Imported jobs without campaign IDs.
- Canceled or refunded jobs.
- Revenue and margin updates.
- Access to personal data.
- Retention and deletion policies.
Audit a sample of closed jobs every month. Rebuild the journey from campaign through revenue and find where the identifiers dropped.
A practical roofing marketing dashboard
A leadership view answers:
- Which triggers produced the strongest property audiences?
- Which score bands generated the most completed inspections?
- Which campaigns produced signed jobs and margin?
- Which channels started, assisted, and closed journeys?
- Which neighborhoods or branches are underperforming?
- How long does each campaign type take to convert?
- Where are source fields or handoffs failing?
Don't let impressions, page views, scans, or raw leads dominate the dashboard. Those diagnose the funnel. They are not the business outcome.
How Hail Trigger supports property-level attribution
Hail Trigger keeps the original opportunity signal tied to the individual property, the campaign actions, the unique response path, and the qualified CRM handoff. You see which ad or mailpiece drew the response, and you see which property rules and market triggers produced profitable work.
Radar-estimated hail indicates opportunity, not confirmed roof damage. The trail Hail Trigger holds runs from that storm signal to the property, the channel, the appointment, the signed job, and the revenue, so you can prove what your spend bought.
Frequently asked questions
Is call tracking enough for roofing marketing attribution?
No. It captures a phone response. It misses the original property trigger, the earlier mail or field touches, and the final financial outcome unless you connect those systems.
Should roofers use first-touch or last-touch attribution?
Use both, for different decisions. First touch explains discovery. Last touch explains response. Keep the original property trigger and the assisted touches as their own fields.
Can direct mail be tracked in Google Analytics?
A QR code or printed URL carries campaign parameters, so the online visit lands in analytics. The property and the final job still need secure first-party identifiers and CRM integration to close the loop.
What is the most important roofing attribution metric?
Gross margin against campaign cost is your strongest final measure, your roofing campaign ROI. Diagnose it through property response, inspection completion, close rate, job value, and campaign timing.
Put this workflow to work
Connect every market trigger to the property, every property to the campaign, and every campaign to booked inspections and signed roofing revenue with Hail Trigger.
Sources checked
- Google Analytics URL builders and UTM parameters: https://support.google.com/analytics/answer/10917952
- Google Analytics attribution reports: https://support.google.com/analytics/answer/10596866
- Google Analytics key events: https://support.google.com/analytics/answer/9267568
- Google Analytics Measurement Protocol for offline or server-side events: https://developers.google.com/analytics/devguides/collection/protocol/ga4