Skip to content

The CLOSE Audit: the 5-pass lead-quality walkthrough I run before I touch a service-business account (2026 edition)

LEAD GENERATION
The CLOSE Audit: the 5-pass lead-quality walkthrough I run before I touch a service-business account (2026 edition)
Conner Crowe

Quick Take

Smart Bidding finds you more of whatever conversion signal you mark as primary. Most service-business accounts mark “form submission” as primary. The algorithm goes and finds you the cheapest form submitters, which are also the worst leads. The partners conclude paid acquisition does not work. I have heard that conclusion across roughly twenty service-business audits in the last 18 months. The cause is upstream of the campaigns every single time. The CLOSE Audit is the named five-pass walkthrough I run before any campaign change. C for CRM wiring, L for Lead source capture, O for Offline conversion imports, S for Signal swap (the primary-conversion change), E for Enhanced Conversions for Leads. Each pass takes 20-45 minutes. Together they catch 80%+ of the leak on a typical service-business account.

The receipt

Across the last six service-business audits I have run, the same five-pass diagnostic caught the leak in every case. A real estate law firm, two HVAC contractors, a med spa, a dental practice, a boutique B2B agency. The accounts ranged from $8K/mo to $35K/mo in paid media. The vertical was different. The mistake was the same.

Five of the six had Smart Bidding optimizing against raw form-fill conversions. Four of the six were missing gclid capture on the contact form, which meant the closed-won feedback loop could not have worked even if it had been wired. Three of the six had no call tracking, despite getting more leads from phone calls than from forms. All six had a CRM full of closed-won deal data that had never been imported back into Google Ads as an offline conversion.

The dashboards looked fine. The reporting decks said “cost per lead $48, healthy.” The intake teams were quietly burning out filtering junk. The partners had been told paid was working. The fix in every case started with the same audit. Three of the six rebuilt over 60-90 days and saw qualified-lead share jump from 30-45% to 65-80% on the same spend. The other three are mid-rebuild.

The audit has a name and a shape so I do not skip steps when an account looks fine on the surface. Here is the shape.

The CLOSE Audit

Five passes. Each one maps to a class of leak that compounds invisibly until the leads stop closing. Each one takes me 20-45 minutes on a typical service-business account. Pair them with The Lead Quality Stack framework and the architecture comes together.

C. CRM wiring

What it checks: the CRM is the source of truth, closed-won events are exposed via webhook or API, and stage transitions are timestamped.

Everything else in the audit depends on this layer. If your CRM is not emitting closed-won events to a webhook (or queryable via the API), the offline conversion loop cannot fire and Smart Bidding will never see what good looks like. The CRM is layer 01 in the framework, the source of truth that the rest of the stack inherits from.

Specifically:

  • The CRM has an API or webhook surface (Salesforce, HubSpot, Pipedrive, GoHighLevel, Zoho all do)
  • Closed-won events expose the original lead’s source identifiers (gclid, fbclid, UTM parameters)
  • Stage transitions are timestamped (lead → MQL → SQL → closed-won), with each transition recorded
  • A workflow fires when a deal moves to closed-won, ready to push the win back to the ad platforms

If the CRM is HubSpot Sales Hub on a paid tier, this work is one workflow. If it is a homegrown Airtable + Zapier stack, it is a half-day. If the CRM does not exist (which I have seen at firms under $1M), the audit stops here and the recommendation is “wire a CRM before touching paid acquisition.”

L. Lead source capture

What it checks: every form submission and every tracked phone call carries the original ad-click identifier all the way through to the CRM record.

This is the layer almost every audit catches a break in. The Google click ID (gclid) gets generated when somebody clicks a Google ad. Meta generates an fbclid. UTM parameters carry source/medium/campaign for everything else. All three need to land in hidden form fields on every conversion surface and flow into the CRM with the lead.

If they do not, you can wire the closed-won webhook perfectly and the offline conversion imports will fail at the join step because there is no click ID to match against.

The capture pass:

  • gclid, fbclid, and UTM parameters captured by a small script on page load
  • Stored in cookies or sessionStorage with a 90-day expiry
  • Hidden fields on every form (contact form, intake form, newsletter signup, calculator submission) populated from the cookie at submit time
  • Call tracking platform (WhatConverts, CallRail) configured to carry the same identifiers through dynamic number insertion
  • CRM record stores the click ID on the contact, not only the deal. A return visitor who converts months later still attaches

The why-conversions law firm rebuild failed this pass at step zero. The firm had two years of pipeline data and zero ability to attribute it back to Google Ads. The first fix on day three was wiring gclid capture.

O. Offline conversion imports

What it checks: when a lead becomes a closed-won deal in the CRM, that win is imported back into Google Ads (and Meta Ads) as an offline conversion event with the original click ID and deal value attached.

This is the loop that makes Smart Bidding work for lead-gen. Without it, the algorithm has no idea which form-fills turned into actual paying customers. With it, the algorithm starts finding you more of the buyers who close, not more of the people who fill forms.

The import pass:

  • A CRM workflow or webhook fires when a deal moves to closed-won status
  • The webhook pushes to Google Ads’ offline conversion endpoint (gads_offline_conversion) with the gclid, deal value, and timestamp
  • The same workflow fires to Meta Ads via the Conversions API for offline events using fbclid
  • Conversion adjustments fire too, so refunds and cancellations subtract from the cohort
  • A reconciliation report runs weekly: closed-won deals in CRM vs. offline conversions received in Google Ads, with a drift target under 5%

This is layer 08 in the framework. The lead-gen version of the “Klaviyo identity loop” pass in the STACK Audit. First-party data feeding the algorithm on every deal, not a one-time export.

S. Signal swap

What it checks: the primary conversion in Google Ads (and Meta Ads) is “qualified lead” or “closed-won,” not “form submission.” Secondary conversions are demoted so the algorithm has clean signal.

This is the single highest-leverage change in any lead-gen account that has run for 60+ days on the wrong primary conversion. Most service-business accounts have “Contact Form Submit” set as primary, often with seven other conversion types also set as primary. The algorithm averages across all of them and chases the cheapest, which is always raw form-fills.

The swap pass:

  • Define “qualified lead” through a written intake rubric (matches service line, in-territory, named decision-maker, budget signal)
  • The intake team scores every lead within 24 hours of receipt
  • Qualified-lead events fire through the same webhook pattern (gclid → Google Ads offline conversion)
  • New primary conversion in Google Ads: “Qualified Lead.” All other conversions (form-fills, page-views, scrolls) demoted to secondary
  • Smart Bidding strategy: target CPA on qualified-lead cost (not Maximize Conversions, not Maximize Conversion Value yet)
  • Expect 4-6 weeks of rebalancing as the algorithm relearns the new cohort

If Smart Bidding has been running for more than 60 days on raw form-fill as primary, this pass produces the largest single jump in qualified-lead share. The why-conversions law firm rebuild was a textbook example: 38% to 72% qualified-lead share on the same spend after this swap landed.

E. Enhanced Conversions for Leads

What it checks: hashed email and phone numbers from every form submission and phone call are being uploaded to Google Ads (and Meta CAPI) so the algorithm can match offline conversions back to the original ad click.

This is the layer that closes the iOS / Safari / ad-blocker gap. Without it, you lose roughly 15-25% of conversion attribution to client-side restrictions in 2026. With it, the offline conversion match rate jumps from ~60% to ~85% on a typical service-business account.

The Enhanced Conversions pass:

  • Enhanced Conversions for Leads enabled on the qualified-lead conversion in Google Ads
  • Hashed email and phone fields populated on the lead record (server-side SHA-256, not client-side)
  • The same hashed identity flows through the server-side container to Meta CAPI for matched offline events
  • A test: submit your own contact form, follow the lead through to closed-won, verify the closed-won offline conversion shows up in Google Ads within 48 hours and matches back to the original click

If Enhanced Conversions are “enabled” in the UI but the user_data payload is empty (the most common case, covered in the no-recent-enhanced-conversions post), this pass catches it. The audit ends with a working test conversion that proves the loop is closed end-to-end.

What this audit is not

It is not a media-buying audit. It does not look at campaign structure, ad copy, bid strategy, or budget allocation. Those audits are downstream of this one and pointless without it. If the lead-quality signal is broken, every conclusion the media-buying audit reaches is built on the wrong number.

It is not the STACK Audit. The STACK Audit is the e-commerce / Shopify variant. Five passes on the 8-layer Tracking Stack where the conversion event is a purchase. The CLOSE Audit is the parallel for service businesses where the conversion event is a closed-won deal. Different layers, same shape, same 20-45 minute pass length.

It is not a one-pass-and-done audit. CRMs drift. Sales teams change qualification criteria. Call-tracking platforms rotate numbers. New ad channels get added without telling the operator. I re-run the CLOSE Audit at the start of every quarter and any time a meaningful change lands (new CRM, new ad channel, new intake team).

The receipts

Across the six service-business audits referenced above:

  • Five of six had primary conversion set to raw form-fills (pass S fail)
  • Four of six had no gclid capture on the contact form (pass L fail)
  • All six had a CRM full of closed-won data never imported back to Google Ads (pass O fail)
  • Three of six had no call tracking despite calls being the dominant lead source (pass C+L compound fail)
  • All six had Enhanced Conversions either off or wired with an empty payload (pass E fail)

The accounts that completed the rebuild over 60-90 days saw qualified-lead share rise from 30-45% to 65-80% on the same media spend. Closed-won deal count rose 25-50%. Cost per closed-won deal dropped accordingly.

The CLOSE Audit walks the same shape as the 25-page Lead Quality Stack PDF, which expands every pass with the screenshots, webhook code samples, and CRM workflow specs. No email gate. Page 23 has the only ask.

Keep going

If this hit, the next two pieces in the same universe:

Free PDF: The 25-page Lead Quality Stack. The CLOSE Audit walkthrough, expanded with webhook code samples and the intake rubric template. No email gate.

If your service-business account looks fine on the dashboard and the intake team is doing free QA on garbage leads, the CLOSE Audit is the diagnostic. The full program shape (audit, rebuild, ongoing) lives at /for-service-brands. Or talk to me.

Want a review like this on your account?

Want this kind of review
on your account?

Thirty minutes on the phone. Same person on the call as on the work. Walk out with a clear set of next steps.

Book a Call