← All Guides

Google Ads Conversion Tracking for Roofing Companies: Track Quote Requests, Calls and Signed Jobs via GTM

Roofing leads are expensive and jobs are worth thousands. Learn how to track inspection requests, calls and estimate forms in Google Ads with Google Tag Manager, then feed signed contracts back so Smart Bidding optimises for revenue.

Atiqul Islam
Written by Atiqul Islam

Tracking & analytics specialist. 278+ GTM, GA4 and server-side tracking projects for clients in the US, UK and Australia.

Rather not do this yourself? I set this up for clients every week. Free 15-minute audit, no obligation.

Book a Free Audit

Roofing has two things that make tracking unforgiving: clicks that cost as much as a nice dinner, and jobs that range from a $400 repair to a $40,000 replacement. An account that counts all leads equally will happily spend your budget generating gutter cleaning enquiries at $90 each while the full replacement keywords sit on a limited budget.

This guide walks through how I set up Google Ads conversion tracking for roofing contractors using Google Tag Manager, and how to close the loop with signed contracts so the account optimises for revenue, not form fills.

What a Roofing Company Should Track

Homeowner action Conversion action Priority Value
Free inspection or estimate form Estimate Request Primary at first, secondary later Average lead value
Call from the ad Ad Call Primary Average lead value
Call from the website Website Call Primary Average lead value
Financing or quote calculator completion Calculator Lead Secondary Low
Appointment booked by the office Inspection Booked Primary, offline Higher
Contract signed Signed Job Primary, offline Actual contract value

Start by tracking the online actions. Within a month, add the two offline stages. The goal is to reach a point where Signed Job carries the real contract value and drives bidding.

Prerequisites

  1. Google Tag Manager installed on the site and on any landing pages built in a separate page builder.
  2. tel: links on every phone number, including the sticky mobile call button.
  3. Google Ads conversion IDs and labels.
  4. A CRM with a custom field available for the Google click ID.
  5. A clear list of what counts as a signed job in your CRM, for example a deal stage named "Contract Signed".

Step 1: Conversion Actions

Create the online conversions manually in Google Ads under Goals, then Conversions. Use Submit lead form for the estimate form and the calculator, and Phone call lead for the calls.

Create two more as Import from clicks conversions for Inspection Booked and Signed Job. Set Signed Job to use the value from the upload rather than a fixed value. Set its click-through window to 90 days.

For call reporting on the ads themselves, add call assets with a minimum duration of 60 seconds.

Step 2: Conversion Linker and Click ID Capture

Create a Conversion Linker tag firing on All Pages.

Then add a Custom HTML tag, also on All Pages, that reads the gclid parameter and stores it in a first-party cookie for 90 days. Add a hidden field named gclid to every form and populate it from that cookie. Map that field to a custom property in your CRM.

This single step is what makes the offline import possible later. Do it on day one even if you are not ready to import yet.

Step 3: Track Calls

Enable the Click URL built-in variable, create a Click, Just Links trigger where Click URL starts with tel:, and fire the Website Call conversion on it.

Roofing is a category where a call tracking platform pays for itself quickly. Dynamic number insertion lets you attribute each call to a keyword and record it for quality review, and most platforms send calls to Google Ads directly. If you use one, use its integration and skip the tel: method to avoid double counting.

Step 4: Track the Estimate Form

Fire the Estimate Request conversion only on confirmed submission. Thank-you page redirect gives you a Page View trigger. In-place submission needs the plugin's success event; see the Gravity Forms, WPForms, Fluent Forms and Elementor guides on this site for the code.

Add a service type dropdown to the form: Repair, Replacement, Inspection, Gutters, Commercial. Push the value to the dataLayer and store it in the CRM. You will use it to see which campaigns bring replacement enquiries versus repairs, and you can give the Estimate Request conversion a different value per type using a lookup table variable in GTM.

Step 5: Track Calculators and Financing Tools

Instant quote calculators and financing pre-qualification widgets usually run in an iframe. They are a weaker signal than a direct estimate request, so track them as a secondary conversion. Check the browser console during a test for a postMessage event on completion and push it to the dataLayer. If the vendor offers a redirect on completion, use a Page View trigger instead.

Step 6: Offline Conversions From Your CRM

This is the step most roofing companies never do, and it is the one that changes the economics.

  1. Make sure every lead in the CRM carries the Google click ID from the hidden form field or from your call tracking platform.
  2. When the office books an inspection, record the date. When a contract is signed, record the date and the contract value.
  3. Weekly, export leads that reached each stage with their click ID, the stage timestamp and the value.
  4. Upload to Google Ads under Goals, then Conversions, then Uploads, or connect a scheduled Google Sheet. HubSpot and GoHighLevel can send these automatically through their native Google Ads integrations.

After a month of imports, switch bidding to Maximise Conversion Value with Signed Job as the only primary conversion. Then watch the account shift spend toward the searches that produce replacements.

Step 7: Enhanced Conversions for Leads

Turn on Enhanced Conversions for Leads in Google Ads. It lets you upload offline conversions matched by hashed email or phone number, so even leads where the click ID was lost, such as phone calls taken by hand, can still be attributed. Create a User-Provided Data variable in GTM for the estimate form and enable it in the conversion tag.

Step 8: Test and Reconcile

  1. GTM Preview: submit the estimate form, click the phone number, complete the calculator. Confirm one tag per action and that the hidden gclid field is populated when you arrive with a test ?gclid=test123 parameter.
  2. Confirm in your CRM that the test lead carries test123 in the click ID field.
  3. Use a tag debugger such as the Insighter Debugger extension to check the Google Ads request.
  4. After the first offline upload, check the upload history for match rate. Below 70 percent usually means the click ID is not being stored on enough leads.

Common Mistakes in Roofing Accounts

What Good Looks Like

Your Google Ads account shows cost per signed job and return on ad spend by campaign, keyword and suburb. You can see that storm damage searches in one area produced $140,000 in signed contracts last quarter while the generic "roofer near me" campaign produced repairs. From there, budget decisions become obvious. Without it, you are negotiating with the account on gut feel.

Frequently Asked Questions

Roofing clicks cost me $40 or more. Is conversion tracking really the fix?

It does not lower the click price. It tells you which clicks turn into signed jobs, so you can move budget away from the keywords and locations that produce inspections but never contracts. In roofing accounts that typically cuts cost per signed job by a third or more within two months.

What is the difference between a lead conversion and a value-based conversion?

A lead conversion counts an inspection request as one unit. A value-based conversion carries the dollar value of the job once it is signed, uploaded from your CRM. With values, you can use Target ROAS bidding and the account learns that a $28,000 re-roof is worth more than a $600 repair.

We get a surge during storm season. Does tracking change then?

The setup stays the same, but review your conversion windows. Storm leads close fast, often within a week. Outside storm season, a re-roof can take 60 days from first click to contract, so a 90 day click-through window is appropriate for the offline job conversion.

Can I track calls from Google Business Profile?

Calls from your Business Profile are organic and are not Google Ads conversions. Track them separately in your Business Profile insights or your call tracking platform. Only calls from ads and from the website after an ad click belong in Google Ads.

Which CRM works best for the offline import?

Any CRM that lets you store a custom field on the lead and export it works. JobNimbus, AccuLynx, Roofr, HubSpot and GoHighLevel are all common in roofing and all support custom fields for the Google click ID.

Want This Done Right the First Time?

Book a free 15-minute audit call. I'll review your setup, show you what is broken, and tell you exactly what it takes to fix it.

Chat Now