Home About Services Industries Approach Pricing Portfolio Learn Contact Free Marketing Audit Login

Roofing · Lead tracking

How to track roofing leads from the first call to the job won.

Follow roofing inquiries through qualification, inspections, proposals, jobs won, and collected payments. Includes a practical record, cost example, and checking plan.

Use one record for each roofing opportunity. Keep its source, owner, next action, and progress together. Update it when an inspection happens, a proposal is accepted, and a payment arrives. That gives you a useful answer to the question: which marketing brings work we want?

The short answer

Count inquiries, qualified leads, booked inspections, completed inspections, proposals, jobs won, and collected cash separately. Keep a stable job ID and dated evidence for each step. Start with accurate records, then verify any connection that sends genuine outcomes back to an advertising platform.

Give each stage a clear meaning.

A phone call and a form submission are activities. One homeowner might use both. I would link them to the same opportunity when they concern the same job, then use these stages:

Define each roofing sales stage
StageWhat earns it
InquiryA real request about roofing work. Flag spam and repeat contacts separately.
Qualified leadThe request fits your services, service area, and agreed customer criteria.
Inspection bookedThe customer and team have an agreed appointment.
Inspection heldYour team completed the visit.
Proposal sentThe customer received a priced scope of work.
Job wonThe customer accepted the proposal under your sales process.
Payment collectedAn actual payment arrived and was recorded.

Keep the dates as well as the current stage. A cancelled visit, lost proposal, refund, or partial payment needs its own accurate record. A signed job and the cash received from it answer different questions.

Keep the facts beside the opportunity.

A spreadsheet can get this started. A CRM makes ownership and follow-up easier as the team grows. Use the same job ID in your sales and job records so you can connect them later.

The minimum opportunity record
FieldWhat to record
Opportunity IDA stable reference for this potential job.
SourceObserved channel, campaign, and landing page; keep original and later touchpoints.
Contact and requestContact details, town, service needed, and qualification notes.
ProgressStage dates, inspection result, proposal, and loss reason where relevant.
MoneyAccepted contract value, actual payments, and relevant job costs separately.
ResponsibilityNamed owner, next action, and due date.

Preserve genuine campaign tags and ad click identifiers where your setup captures them. Record what the customer says about finding you too. If the source is unknown, leave it unknown. These clues can differ without either giving the complete customer journey.

Make the record useful to the team.

GoHighLevel supports pipelines, stages, and opportunities linked to contacts. Opportunities can be created manually or through configured workflows. I would name the stages around the actual roofing sales process and assign someone to maintain them.[1]

Review a missed call and confirm who calls back. When a visit is booked, check the appointment and opportunity agree. When the estimator sends a quote, record it. Update the job after the customer decides.

HighLevel also documents call reporting, including call status and source views. The cited guide lists Agency Pro availability, so check the account's reporting access and phone setup. An answered call or long conversation still needs a staff decision about whether it is a suitable roofing opportunity.[2]

Compare the cost at each step.

Hypothetical example: a roofer spends $4,000 on media. The resulting group of 40 inquiries eventually produces 10 booked inspections and four accepted jobs.

  • Cost per inquiry: $4,000 ÷ 40 = $100.
  • Cost per booked inspection: $4,000 ÷ 10 = $400.
  • Media cost per job won: $4,000 ÷ 4 = $1,000.

These are different measures of the same example. They are media-only costs; add agency fees and other acquisition costs when assessing total acquisition cost. They are not industry benchmarks or TCM results.

Follow the same group of inquiries long enough to see its results. Jobs accepted this week may have started months ago. Review job costs and collected payments before deciding what the work contributes to the business.

Use these figures with the roofing Google Ads budget guide and the Google Ads and Local Services Ads comparison.

Connect the systems after the records are dependable.

GA4's lead-acquisition report can show new, qualified, and converted leads when the corresponding events are supplied. Google recommends generate_lead, qualify_lead, and close_convert_lead for those stages. These require setup; Analytics does not discover a signed roofing contract on its own.[3][4]

Google Ads also supports importing offline outcomes. Enhanced conversions for leads uses supported first-party matching data alongside available ad identifiers. Your provider must verify the conversion action, real matching data, timestamps, import window, and diagnostics for the chosen route.[5]

Check current integration support. Google's June 2026 change directs new API adopters toward Data Manager; eligible existing integrations have a legacy migration path. An older tutorial does not establish that your CRM connection works today.[6]

Define which outcome counts and which one guides bidding. Keep a stable event or order ID for each outcome and prevent repeat uploads from creating another sale. Google's order-ID rules and conversion-count settings are separate controls; review both.[7][8]

Use customer information you are entitled to collect and share, explain measurement in your privacy notice, and obtain consent where required. Keep names, email addresses, and phone numbers out of ordinary GA4 URLs and event parameters.[9][10]

Check the whole path, then review it weekly.

Before relying on the report, walk through the process with an isolated test record and advertising uploads disabled:

  1. Confirm a call or form reaches the right person and record.
  2. Check that a repeat contact about the same job stays linked.
  3. Move the test record through booking, attendance, proposal, and acceptance. Check dates and notifications.
  4. Record a partial payment separately from contract value.
  5. Try a cancelled appointment, lost job, and repeated update. Confirm the totals stay correct.

Keep test records excluded from production reports and advertising exports. Verify matching and import diagnostics with the first genuine, eligible customer outcome. Never send a made-up sale to an ad platform as a test.

Each week, review unanswered inquiries, inspections that did not happen, open proposals, and jobs won by source. Choose one repair to the process and assign it to a person.

For a setup example, see our roofing tracking implementation case study. Start by following the next genuine inquiry all the way through your own records.

Sources and research notes.

The sources below support the platform facts in this guide. Roofing examples and suggested decisions are my practical applications. Any illustrative numbers are labeled in the article.

  1. HighLevel: setting up pipelines and opportunities — reviewed 2026-10-31
  2. HighLevel: call reporting and availability — reviewed 2026-10-31
  3. Google Analytics: lead acquisition report — reviewed 2026-10-31
  4. Google Analytics: recommended lead-generation events — reviewed 2026-10-31
  5. Google Ads: enhanced conversions for leads — reviewed 2026-10-31
  6. Google Ads: changes to offline conversion API access — reviewed 2026-10-31
  7. Google Ads: transaction and order IDs for duplicate prevention — reviewed 2026-10-31
  8. Google Ads: conversion counting options — reviewed 2026-10-31
  9. Google: customer data policies — reviewed 2026-10-31
  10. Google Analytics: avoiding personally identifiable information — reviewed 2026-10-31

Gordon Brown
The Contractors Marketing

← More contractor marketing guides