Google Ads conversion tracking for roofing companies
A roofing lead is worth nothing until an inspection happens and a contract gets signed, and that sequence takes weeks with a high drop-off at every stage. What Google Ads adds on top of that is a mechanical requirement: gclid, gbraid and wbraid have to reach the record that holds the money, because Google Ads can only credit a conversion it can tie back to a click it recognizes. This page covers both halves — what a conversion is in roofing companies, and what Google Ads specifically needs to accept it.
Free30 minutesNo obligation
Specific to Google Ads × Roofing
Google Ads for roofers: signed contracts against gclid and calls
For roofers on Google Ads, the conversion to bid on is a signed roofing contract, imported offline from the job system against the gclid, gbraid or wbraid captured at inquiry, with contract value attached. Inspection attended is the fallback target. Calls from ads need call-conversion import or tracked website numbers.
Google is where emergency leak calls and replacement quotes start, and the two behave nothing alike. A leak caller converts within hours on a small repair, while a replacement buyer compares three quotes over several weeks. Run them as separate campaigns so bidding can value each correctly, and upload contract value with each signed job so a $28,000 tear-off doesn't count the same as a flashing repair.
Most roofing inquiries arrive as calls, many from the call asset in the ad itself, with no website visit at all. Those calls only reach the job record if call-conversion tracking is on and the job system stores the caller's number and call time, which is what a call import matches on. Confirm the current import columns in Google's template. Enhanced Conversions for leads helps match form leads that lost their gclid on iPhones.
Local Services Ads are a separate product. Their leads are charged and reported inside the LSA dashboard rather than through your conversion actions, so keep LSA jobs out of the Search reporting or they will be counted twice. After a hailstorm, query volume and cost per click both spike. Annotate storm weeks and consider excluding them from value-based bidding history. The common break is a forwarding number in the ad that no one ever linked to the job system.
Google Ads · Roofing · what breaks
Why Google Ads under-reports for roofing companies
- 01
Cheap leads that never become jobs
Because bidding was shown submissions.
- 02
Storm-season spikes distorting everything
Volume without a quality signal.
- 03
Calls arriving with no source
The dominant channel, unattributed.
- 04
Gclid, gbraid and wbraid never reaches the record
Three parameters, not one. gclid is the long-standing identifier; gbraid and wbraid arrive on iOS traffic where privacy constraints prevent the usual one. Capture code that names only gclid loses a growing share, silently, and the loss is invisible until you audit how many records carry an identifier.
Google Ads · Roofing · the fix
What working looks like — Google Ads · Roofing
Booked inspections measured
Not raw enquiries.
Signed jobs fed back to bidding
With contract value.
Calls attributed to campaigns
Down to keyword where data allows.
Google Ads · Roofing · architecture
How Google Ads and roofing companies actually connect
- 1
The conversion in roofing companies
Enquiry, inspection booked, inspection attended, contract signed. Contract value varies enormously, which makes value-based bidding worth far more here than in most verticals.
- 2
Google Ads needs a click to match
A click identifier inside the 90-day window, a conversion action name that matches one configured in the account, a conversion timestamp for when the outcome happened, and a value. Read the match rate after uploading — a file can upload perfectly and match nothing.
- 3
The identifier: gclid, gbraid and wbraid
Three parameters, not one. gclid is the long-standing identifier; gbraid and wbraid arrive on iOS traffic where privacy constraints prevent the usual one. Capture code that names only gclid loses a growing share, silently, and the loss is invisible until you audit how many records carry an identifier.
- 4
Where it gets sent from
your job management system's record of signed contracts.
- 5
Deduplication and window
There's no shared event ID mechanism like Meta's. What matters instead is the counting setting on each conversion action — 'one' for lead-type conversions so a repeat submitter doesn't count three times, 'every' for ecommerce where a second purchase is a second sale. This is the single most common misconfiguration we find in Google Ads accounts. Google's offline import window is 90 days from the click. Anything older can't be matched, and rows outside it fail as unmatched without much explanation. Measure your median click-to-outcome time against that before designing anything.
Google Ads · Roofing · events
The conversion map for roofing companies
Four stages with a very wide value distribution at the end — a repair and a full replacement are the same lead and very different jobs.
| Event | What it means here |
|---|---|
| Enquiry (call or form) | Call tracking plus browser-side form events. |
| Inspection booked | Server-side from the job management system. |
| Inspection attended | Server-side. The reliable mid-funnel target. |
| Contract signed | Server-side with real contract value, uploaded as an offline conversion. |
| Job type | Repair versus replacement. The value difference is large enough to bid on. |
Google Ads · Roofing · diagnose
Diagnostic order — Google Ads · Roofing
- 01
Count records carrying gclid, gbraid and wbraid
- 02
Hard-coded numbers everywhere
Roofing sites carry the phone number in headers, footers and images. Insertion can't reach most of them.
- 03
Flat conversion values
A $600 repair and a $28,000 replacement counted the same teaches bidding nothing.
- 04
Storm spikes treated as performance
Volume from a weather event isn't campaign quality, and mixing them corrupts the learning.
- 05
Read the match rate on the upload, not the success message
A conversion action that stops receiving hits is flagged as inactive 30 days later — by which point a month of budget has already run against a missing signal. Check the last-received date on every action monthly; it takes two minutes and it's the cheapest monitoring available.
Google Ads · Roofing · prove
How it gets proven — Google Ads · Roofing
Source of truth
your job management system's record of signed contracts
- Number insertion confirmed on every template.
- A live test call attributed to the correct campaign.
- Click ID present on a live job record.
- Signed jobs reconciled against the job system for a closed month.
- The match rate on the upload, not the success message read directly, not inferred from an upload succeeding.
Google Ads · Roofing · free audit
What we check in the free audit
- Count records carrying gclid, gbraid and wbraid
- Hard-coded numbers everywhere
- Flat conversion values
- Storm spikes treated as performance
- Read the match rate on the upload, not the success message
Checked against
your job management system's record of signed contracts
Free30 minutesNo obligation
Google Ads · Roofing · when not to buy
When you don't need this — Google Ads · Roofing
- If Google Ads already reports conversions that reconcile against your job management system's record of signed contracts within a few percent, this is working and there is nothing to buy.
- Measure identifier coverage yourself first — pull your last hundred records and count how many carry gclid, gbraid and wbraid.
- If you're running Performance Max exclusively and haven't separated your conversion actions, the import will work and the reporting won't tell you much. Worth sorting the account structure first.
Google Ads · Roofing · what we deliver
What gets built — Google Ads · Roofing
Call tracking with number insertion
Across every template, including vehicle-wrap-style footers.
Click ID written to the job record
At the enquiry, not at the sale.
Job management system as the source of truth
Inspections booked and jobs signed.
Contract value uploaded as the conversion value
So bidding optimizes toward big jobs.
Dispatch via Google's offline conversion import
Uploaded against the click identifier, either through the Google Ads API or as a file. The upload is the easy part; what limits it is how many of your records carry an identifier at all. Verify the current column format against Google's own template — it has changed before.
Written guarantee
95%+ tracking accuracy
Measured against your job management system's record of signed contracts. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Google Ads · Roofing questions, answered
Yes, through call conversion import, matched on caller ID and call start time from calls that came through Google's forwarding numbers. Check the current template before building.
Keep them separate. LSA leads are reported in their own dashboard, and mixing them into Search conversions counts the same job twice.
Yes, where you can get it. The value spread between a repair and a replacement is wide enough that flat-value bidding leaves real money on the table.
It's the normal case in roofing. Number insertion attributes the call and the job system supplies the outcome.
Flag it. Volume from a weather event is not campaign performance, and letting it into the baseline makes every subsequent month look like a decline.
Three parameters, not one. gclid is the long-standing identifier; gbraid and wbraid arrive on iOS traffic where privacy constraints prevent the usual one. Capture code that names only gclid loses a growing share, silently, and the loss is invisible until you audit how many records carry an identifier.
Uploaded against the click identifier, either through the Google Ads API or as a file. The upload is the easy part; what limits it is how many of your records carry an identifier at all. Verify the current column format against Google's own template — it has changed before.
By reading the match rate on the upload, not the success message and reconciling against your job management system's record of signed contracts. An upload that succeeds is not an upload that matched.
More on Google Ads · Roofing
- RoofingConversion tracking for roofing companies, from inspection to signed job
- Google Ads · Home securityGoogle Ads conversion tracking for home security companies
- Google Ads · Pest controlGoogle Ads conversion tracking for pest control companies
RELATED GUIDES
More for roofing companies: other angles on the same outcome
- RoofingConversion tracking for roofing companies, from inspection to signed job
- Google Ads · Tree serviceGoogle Ads conversion tracking for tree service companies
- Google Ads · Gutter installationGoogle Ads conversion tracking for gutter installation companies
- Google Ads · Quote → closed jobHow to track quote request to closed job for Google Ads
- Google Ads × Job SystemHow to reconcile Google Ads against your job management system
- RoofingGoogle Ads for roofers: the build order
- RoofersLocal Services Ads for roofers: storm spikes, bad inspections and cost per signed job
- ServiceM8 → Google AdsConnecting ServiceM8 to Google Ads
Free · 30 min
Get Google Ads reporting what roofing companies actually earn
Free30 minutesNo obligation
