Offline Conversion Tracking for Roofing Companies
How roofing companies and roofing-specialist PPC agencies use The Upload Offline Conversions App (TUOCA) to send call tracking + CRM/FSM revenue data back to Google Ads, Meta, Microsoft Ads, and TikTok with click-level attribution.
Roofing is a higher-stakes version of the home services offline conversion problem. Job values are 5-20x higher than HVAC or plumbing on the high end, sales cycles are longer, and the proportion of leads that actually close is lower — which means Smart Bidding without revenue data optimizes for the wrong outcome: inspection bookings instead of closed jobs.
This page is for roofing contractors, roofing-specialist agencies, and storm restoration operators running Google Ads, Meta, Microsoft Ads, and TikTok at meaningful budget levels.
The roofing conversion problem
A typical roofing funnel has more steps than typical home services:
Click ──► Landing page ──► Call (CallRail captures GCLID) OR Form fill (HubSpot captures GCLID)
│
▼
Inspection scheduled
│
▼
Inspection completed (sometimes free, sometimes paid)
│
▼
Estimate / proposal
│
▼
┌─────────────────┴──────────────────┐
▼ ▼
No close (lost to competitor or Job closed and contracted
deferred) │
▼
Job completed (FSM updates)
│
▼
Final invoice paid
Some inspection bookings never become a roof. Count your own: inspections booked, jobs sold. If Google Ads optimizes for “inspection booked” and you never upload the sold job, it bids the same for an inspection that became a $30,000 roof and an inspection that did not. That $30,000 is an example of a job, not a close rate.
Closing this gap is the entire reason offline conversion tracking matters for roofing.
Typical TUOCA setup for roofing
The architecture for roofing has more options than HVAC/plumbing because roofing-specific FSMs (JobNimbus, AccuLynx) are popular alongside the general-purpose ones (ServiceTitan, Jobber):
| Layer | Tool |
|---|---|
| Call tracking | CallRail or CTM |
| Form / CRM | HubSpot (common for roofing) or native FSM forms |
| FSM / job management | ServiceTitan, Jobber, JobNimbus, or AccuLynx |
| Conversion uploads | TUOCA |
| Destinations | Google Ads, Meta CAPI, Microsoft Ads, TikTok |
Conversion action structure typically used:
| Conversion action | When it fires | Smart Bidding signal |
|---|---|---|
| Roof Inspection Booked | Call/form → inspection on calendar | Lead-quality signal (lower weight) |
| Roof Job Closed (Contract Signed) | Estimate → contract signed in CRM/FSM | Mid-funnel signal (medium weight) |
| Roof Job Completed (Revenue) | Job marked complete in FSM with invoice | Revenue signal (highest weight) |
These are possible measurement stages, not a recommendation to make every stage a primary bidding goal. Choose goals and values deliberately to avoid counting the same job revenue repeatedly.
Roofing conversion values
Use actual job revenue when available. These illustrative ranges show why a single fixed value can hide differences between jobs:
| Service category | Illustrative value | Notes |
|---|---|---|
| Roof inspection | $0 - $250 | Often free; some operators charge for diagnostic |
| Minor roof repair | $300 - $1,200 | Patches, leak fixes |
| Storm-damage tarping (emergency) | $300 - $800 | Insurance-funded common |
| Mid-size roof repair | $1,500 - $4,000 | Partial replacement, multi-area work |
| Partial re-roof | $4,000 - $9,000 | One slope, garage roof |
| Full asphalt re-roof | $8,000 - $18,000 | Most common closed-job size |
| Premium / metal re-roof | $15,000 - $40,000 | Standing seam, copper, slate |
| Insurance-funded restoration | $10,000 - $35,000 | Full hail/wind damage rebuild |
These ranges are illustrative planning examples, not market benchmarks. Use your own invoice data and a consistent revenue definition, including how you handle tax, deposits and insurance payments.
When the job closes months after the click
Enhanced conversions for leads is not a way around an expired import window. Google’s import guidelines specify a 90-day limit after the associated last click for standard offline imports and 63 days for enhanced conversions for leads. Your conversion action’s configured window also matters. Upload promptly; waiting until the deadline leaves no room to fix a rejected record.
Record the actual completion time for a completed-job conversion. Changing that timestamp to fit a window would misrepresent when the job happened.
If revenue routinely arrives too late, choose a useful earlier milestone—such as a signed contract—and upload it while eligible. Keep its value definition clear: an expected value is different from collected revenue. Keep the eventual invoice in your CRM reporting even when it cannot be imported against that click.
Choose which milestone should guide bidding. Counting inspection, contract and completion values together can count the same customer journey several times; more conversion actions do not automatically mean better signals.
TUOCA Fusion Relays help with the operational problem: matching a later job to its earlier tracked lead using shared phone or email data. They cannot create missing attribution or extend Google’s deadlines. Start by comparing a few real lead dates and job dates, then configure the eligible outcome you want to send.
Import-window guidance checked against Google documentation on November 9, 2026.
Storm season patterns
Storm restoration roofing has unique seasonality:
- Demand spikes during hail/wind events (regional, often days of frenzy followed by months of work).
- Insurance dynamics mean revenue per job clusters in specific bands ($10K-$35K is the typical insurance-funded range).
- Lead quality varies — storm-chaser competition and homeowner saturation can produce high-volume but low-close-rate leads during storm peaks.
TUOCA’s per-record audit trail and Smart Bidding revenue feedback help operators identify which campaigns produce closing storm leads vs. which produce no-show leads — a distinction that matters when CPL spikes during storm peaks.
Recommended starting configuration
- Connect CallRail (or CTM).
- Connect ServiceTitan / Jobber (native), or set up Webhooks from JobNimbus/AccuLynx.
- Connect HubSpot (via webhooks today, native roadmap) if forms are a major lead source.
- Build Fusion Relays:
- Inspection Booked: CallRail/Form → calendar event.
- Job Closed: CallRail/Form → contract signed.
- Job Completed: CallRail/Form → final invoice (highest revenue weight).
- Destinations: Google Ads (primary), Meta CAPI, Microsoft Ads, TikTok.
- Schedule: daily.
For a roofing agency, the Agency tier keeps each contractor’s accounts separate, with bulk onboarding.
Bottom line
Roofing’s combination of high job values, long sales cycles, and variable close rates makes offline conversion tracking more important than for shorter-cycle home services — not less. Without revenue per conversion, Smart Bidding optimizes for inspections; with revenue, it optimizes for closed jobs.
The economic difference between the two strategies for a typical roofing account is often the difference between unprofitable and profitable Google Ads spend. Pro or Agency tiers with Fusion Relays are the typical fit.