NEXSUM_LABS
  1. Home
  2. Work
  3. A roofing company's leads became real leads once consent-aware tracking was verified
Book a call

[ Case study ]

Home servicesGoogle AdsCall tracking with qualifying promptsConsent ModeEnhanced conversions

A roofing company's leads became real leads once consent-aware tracking was verified

The account reported 90 leads a month; the office counted 22. Form spam, double-counted calls, and unverified conversion actions made the dashboard fiction — and bidding algorithms were optimizing toward the fiction at rising cost.

CLIENT a regional roofing contractor — FOCUS Rebuild conversion actions from the office's truth

Google AdsPaid MediaGoogle AdsHome servicesRepresentative example
Client
a regional roofing contractor
Industry
Home services
Engagement
5 weeks — growth pod — paid search specialist
Service
Paid Media / Google Ads
Headline outcome
Reported leads per month — down on paper, up in reality: office-confirmed qualified estimates rose from 22 to 31: 90 → 38, read from CRM booking records vs platform conversion report

Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.

Where they started

A regional roofing contractor books work through an office of four — phones answered by people who know the difference between a leaking roof and a curious browser. Estimates are scheduled from those calls, crews run from two depots, and storm season can double the phones inside a week. Google Ads had run for years under a previous agency that reported leads monthly; the office knew the numbers were wrong the way anyone who answers the phones knows, but had no mechanism for proving it.

What it was costing

The account reported 90 leads a month; the office counted 22. Form spam, double-counted calls, and unverified conversion actions made the dashboard fiction — and bidding algorithms were optimizing toward the fiction at rising cost.

What they could see

  • The dashboard's monthly lead count ran at roughly four times what the office's callback list could actually confirm.
  • The same out-of-market numbers rang repeatedly; the office kept a grudge list of spam callers the account kept counting as conversions.
  • Call reports double-counted — one estimate booked from a single caller appeared as multiple conversions across devices.
  • Reported costs per lead rose month over month while the office's actual estimate calendar stayed flat.
  • After storms, the dashboard spiked with volume the office could never have booked in the same week.

The constraints we worked inside

  • Consent requirements shaped what tracking could do — compliance first, then measurement.
  • The office answered calls manually; call quality data existed only in their memory.
  • Storm-season spikes made stable measurement hard — windows had to account for demand surges.

What had been tried before

The office manager kept a handwritten tally of spam calls to dispute the platform's lead numbers.
The tally proved the gap but changed nothing inside the account — bidding kept optimizing toward a conversion count the office knew was junk.
A captcha and a required phone field were added to the form to cut spam.
Captcha trimmed bot submissions but not the call spam or the double-counted conversions; the conversion actions themselves still counted junk as leads.
The target cost per action was lowered twice to bring the reported costs down.
Lowering a target on fictional numbers pushed volume toward whatever converted cheapest on paper — more junk, fewer bookable calls.

What we proposed

We proposed starting at the office, not the dashboard. First we wrote down what the office actually counts — a call that books an estimate, a form that's a real homeowner — then rebuilt each conversion action to match that definition with consent settings applied correctly. Spam filtering went in ahead of the conversion column so junk never reached the numbers. Only then did smart bidding restart, with target cost per action set from the office's real close economics rather than the platform's fiction.

Just as important is what we ruled out, and why:

  • A third-party lead-verification serviceThe spam was identifiable from patterns the office already knew — repeated numbers, short calls — and a paid verification layer adds cost and latency a lean office can't absorb.
  • Switching to maximize-conversions biddingAutomated volume bidding on an inflated conversion count scales the fiction; until actions matched what the office counts, any bidding strategy was decoration.
  • Moving budget entirely to Local Services AdsLSA leads also needed quality verification and the search account still captured research intent; a full switch trades an unverified signal for no signal.

How the work ran

01Rebuild conversion actions from the office's truth

Each conversion action was redefined to match what the office actually counts — qualified calls booked to estimate, verified form fills — and consent settings applied correctly.

02Filter the spam before it counts

Form submissions gained verification and call tracking gained qualifying prompts, so junk stops reaching the conversion column.

03Re-bid on clean numbers

Smart bidding restarted on the verified data with target CPA set from the office's actual close economics.

Delivered by the growth pod — paid search specialist over 5 weeks, with working increments reviewed with the client every week.

The stack, and the reasoning

Google Ads
Stayed the channel — the fix was definitional, not structural, and the account's history was too short for a platform switch to be worth the reset.
Call tracking with qualifying prompts
A prompt at connection — 'press one for a roofing estimate' — filtered junk before it entered the conversion column, matching the office's counting rules.
Consent Mode
Consent requirements shaped what tracking could do from the start; modeling behavior correctly beat silently losing the signals the rebuild depended on.
Enhanced conversions
Form fills carried hashed details so verified submissions counted even where cookies failed — one more defense against the spam-inflated baseline.
CRM verification
The office's booking records became the audit trail; every conversion action reconciles against what actually became an estimate.

What went wrong

Obstacle

The consent banner on the site blocked conversion cookies for a sizable share of visitors, which the old setup had quietly ignored — the rebuilt tracking showed fewer conversions than expected from day one.

Handled: We configured Consent Mode properly so modeled conversions covered the consented gaps, and compared a week of tracked-versus-booked estimates before accepting the new baseline as real.

Obstacle

The office pushed back on the qualifying prompt — 'press one for a roofing estimate' — worried that panicking customers would hang up rather than press anything.

Handled: We softened the wording, watched a week of call logs with the office listening in, and kept it once the junk-call share dropped without losing genuine callers.

Obstacle

A storm cell crossed the service area during the re-bid transition, tripling call volume and making any before-and-after read worthless for that stretch.

Handled: We excluded the storm week from the baseline, set bid caps that held during the surge, and the office — not the algorithm — stayed the record of what that week booked.

How we worked together

Cadence
Weekly calls scheduled around the office's quiet mid-morning window, with call samples played together — the office heard its own junk rate drop week by week.
Client side
The office manager was the engagement's co-author: her counting rules defined the conversions, and she vetted every prompt wording before it went live.
Decisions
If the office wouldn't count it as a lead, it stopped being one — definitional disputes resolved by listening to a week of calls with her.
They provided
Time on the phone system for call recording setup, their storm-season booking history, and honest answers about which enquiries they'd have taken anyway.

What changed

The headline: reported leads per month — down on paper, up in reality: office-confirmed qualified estimates rose from 22 to 3190 → 38, read from CRM booking records vs platform conversion report. A second check: cost per office-confirmed estimate at −41%.

The office trusts the dashboard because it finally describes their week. They stopped keeping the grudge list — spam dies in the prompt now, not in their memory. Bid changes get explained in their counting language, and the office manager forwards the weekly summary to the owner without translating it first. When storms hit, everyone knows the surge week is excluded from the baseline rather than pretending it proves anything. The relationship between the ads and the office switched from adversarial to routine.

The result was read from CRM booking records vs platform conversion report against the pre-engagement baseline over the stated window, with a guardrail check on cost per office-confirmed estimate. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.

What they own now

  • The rewritten conversion actions matching the office's counting definitions, in writing.
  • The qualifying-prompt configuration and the call-filtering rules behind it.
  • Consent Mode and enhanced-conversions setup verified against booked estimates.
  • A storm-week baseline note so surge periods stay excluded from future comparisons.
  • The office's counting-rules document — the spec any future agency inherits.

What we would do differently

We would have interviewed the office about their counting rules on day one — their definition of a 'lead' was the spec document.

Paid MediaGoogle AdsHome servicesGoogle Ads

Next case study

A pet-supplies retailer's Shopping feed went from rejected SKUs to its cheapest revenue