Enhanced conversions for leads: CRM matching for B2B
Match closed CRM revenue back to your Google Ads clicks with a hashed email instead of a click ID. The setup, the CRM half nobody wires up, why match rates crater, and when to run it beside GCLID imports.

Your Google Ads account optimizes toward form fills. The deals that actually close happen in Salesforce or HubSpot weeks later, where Smart Bidding never sees them, so it keeps buying leads that look good and never turn into revenue. Enhanced conversions for leads closes that gap: it sends a hashed email to Google at form submit, then matches it against the qualified lead or closed deal you upload from your CRM later, crediting the ad click with no GCLID required. Setup is four steps: enable it on an import conversion action, capture and hash the email in the tag, keep that email on the CRM record, upload when the lead becomes revenue.
The reason this page exists as more than a settings walkthrough: the feature is half a system. Google's docs describe the tag half; the conversion only exists when your CRM says a lead became money, so the real implementation is a CRM discipline. We run this matching in production. Buron's HubSpot and Attio feeds land in an identity map that does exactly this, so this is the full loop, both halves.
#EC for web vs EC for leads: two features, one name
For web strengthens a conversion that happens on your site; for leads creates one that happens in your CRM. Enhanced conversions for web (Enhanced conversions: what they fix, what they leak, how to turn them on) attach hashed user data to a purchase or sign-up the tag already tracks, recovering attribution cookies lose. Enhanced conversions for leads solve a different problem: the event Google Ads should optimize toward (qualified lead, closed deal) happens weeks after the click, in HubSpot or Salesforce or Attio, where no tag fires. For leads bridges that gap with an email captured at the form and redeemed at the upload. If your conversion completes in the browser, you want the web flavor; if it completes in a CRM, you're on the right page.
#How the matching actually works
One email, hashed the same way twice, is the entire match:
Notice what's absent: the GCLID. Google linked hash to click at submit time, on its side; your upload only needs the email. That's why this path survives the things that kill click-ID capture: redirect chains that strip parameters, form tools that rebuild URLs, phone-first funnels (Google's enhanced conversions overview covers the mechanism; the setup doc for the leads flavor is linked from it; re-verify the exact URL at publish, the candidate source wasn't reachable at draft time).
#Setup step 1: capture and hash at form submit
In Google Ads, create (or open) an import-type conversion action for your CRM outcome and enable enhanced conversions for leads on it. Then give the tag the data, via the Google tag or GTM: the same choice as the web flavor (automatic detection or a manual mapping to the email field) and the same verdict: map the field manually. Your match rate should not depend on a page-scanner recognizing your form after the next redesign. The hash is SHA-256, computed in the browser before anything is sent; plaintext never leaves the page.
One capture rule specific to leads: the email the tag sees must be the email the CRM keeps (next section): capture at the moment of submit, not from a thank-you page the user may never reach.
#Setup step 2: the CRM side, where implementations actually live or die
The upload's match key is the form email, so the CRM's job is to not lose it. Three disciplines:
- Preserve the submitted email. Store it verbatim on the lead. If sales later "corrects" it to a work address, keep the original in its own field. Dedup and enrichment tools that merge records and discard the form email are quietly destroying your match key.
- Define the conversion as a lifecycle stage. "Qualified" or "closed-won" is one named stage whose timestamp becomes the conversion time. Vague stage definitions become vague conversion data, and Smart Bidding optimizes toward whatever you upload.
- Export on a cadence. Stage timestamp, email, value, on a daily schedule, into the conversion upload (Data Manager or a connector, the same intake consolidation described in Offline conversion tracking: send CRM deals back to Google Ads). Late uploads rewrite recent reports exactly as they do for GCLID imports.
#The worked example: form → HubSpot/Attio → qualified → uploaded
This matching is the one Buron's CRM feeds run continuously, so we can show its shape honestly: leads enter with a form email; the identity map matches CRM contacts to ad-click identities; qualified-stage transitions generate the upload rows. The instructive part is the funnel: every stage loses some share, and knowing where tells you what to fix (illustrative rates; the shape is what every CRM feed produces):
| Funnel stage | Share of form submits |
|---|---|
| Submitted with a usable email | ~85% |
| Hash-matched to an ad-click identity | ~60% |
| Reached CRM-qualified | ~20% |
| Imported as conversions | nearly all of the qualified |
The hash-matched band is where the payoff hides: some of those matches are conversions a GCLID import alone would have missed, because the click ID never survived to the CRM but the email did.
#Why match rates crater
Three defects account for most bad numbers, and all three are silent:
Email drift. The lead fills the form with a personal Gmail; the CRM record carries the work email sales found later; the upload sends the work email; Google has no click linked to it. Match rate falls exactly as fast as your sales team is diligent. Fix: upload the form email, always.
Timing. The conversion must land inside the action's click-through window. Long B2B cycles plus a lazy upload cadence push real revenue outside the window, and it imports as nothing, with no error.
Consent scope. The hash rides the same consent state as the rest of your measurement (Consent Mode v2 without losing your signal); leads who declined aren't in the match, and in consent-heavy regions that's a structural, not fixable, share. Know the number rather than wondering why the funnel leaks.
#EC for leads vs the GCLID import: when you want which
GCLID import when click-ID capture is reliable; EC for leads when it isn't; both when the pipeline matters. The GCLID path (Offline conversion tracking: send CRM deals back to Google Ads) is deterministic (one ID, one click) and carries per-deal values cleanly, but it dies wherever the parameter gets stripped. The email path survives hostile form tooling and phone-first funnels but depends on signed-in matching. They're not rivals: the email match recovering deals the GCLID match missed is a normal, observable pattern, and running both gives Google the combined coverage. If your GCLID coverage report is healthy, lead with it; if it's structurally broken, don't limp along, switch to email matching. Identity matching like this is a whole discipline of its own, and Identity resolution: how user stitching actually works is the deeper treatment.
Verify the same way you'd verify any import (diagnostics, match rate trended over weeks, campaign-level sanity) on the weekly cadence from The conversion tracking QA checklist: test it like you'd test code.
Your EC-for-leads match rate is a CRM hygiene metric wearing a tag setting's clothes. Buron matches your CRM to your ad clicks continuously (HubSpot and Attio feeds, identity map, match-rate monitoring), so when email drift or a stalled export starts eating the match, it arrives as a finding, not as a quarter of unattributed pipeline.
Frequently asked questions
How can an advertiser set up enhanced conversions for leads?
Four steps: enable enhanced conversions for leads on an import-type conversion action in Google Ads; configure the Google tag or GTM to capture and SHA-256-hash the lead's email at form submit; record that same email on the lead in the CRM; and when the lead qualifies or closes, upload the conversion with the hashed email, and Google matches it back to the ad click.
What are enhanced conversions?
Google's family of features that send hashed first-party data with conversions so attribution survives cookie loss. Enhanced conversions for web strengthen on-site conversion tracking; enhanced conversions for leads match later, CRM-qualified outcomes back to ad clicks using a hashed email instead of a click ID.
What is the difference between enhanced conversions for leads and offline conversion tracking?
Both import CRM outcomes into Google Ads; they differ in match key. Offline conversion imports match on the GCLID you captured at click time; enhanced conversions for leads match on a hashed email captured at form submit. Email survives redirect chains and form tools that strip click IDs, so run the GCLID path when capture is reliable, the email path when it isn't, or both.