To set up enhanced conversions via Google Tag Manager, you must first enable the feature inside Google Ads (Goals >> Conversions >> Settings), accept the customer data terms, and confirm it's enabled on each individual conversion action — only then configure your GTM tag. Skip the Google Ads steps first and GTM will fire silently with zero enhanced conversion data attached.
Enhanced conversions work by hashing first-party customer data — email, phone, name, address — and sending it alongside your standard conversion tag so Google can match it against signed-in Google accounts. [1] This recovers conversions lost to cookie blocking, iOS privacy restrictions, and cross-device journeys that standard tag-based tracking can't see.
The downstream impact goes beyond reporting. Smart Bidding strategies such as Maximize Conversions (with or without a Target CPA) and Maximize Conversion Value (with or without a Target ROAS) train their models on the conversion signals you feed them. [2] Accounts running those strategies without enhanced conversions are bidding on incomplete data, which means under-bidding on high-intent users who convert through paths Google can't attribute via cookies alone. In accounts I manage across a wide range of budgets, enabling enhanced conversions typically surfaces 10–30% more attributed conversions — and that delta materially changes auction competitiveness and CPA over time.
The hashing uses a one-way SHA-256 algorithm so raw PII never leaves your environment in readable form. [1] Confirm compliance with your legal team depending on jurisdiction, but this approach is compatible with most current privacy frameworks. This topic came up in the r/googleads community, where the most common problem wasn't privacy compliance — it was practitioners not completing the required Google Ads configuration before implementing in GTM.
The required Google Ads setup has four steps, all of which must be complete before your GTM implementation can transmit enhanced conversion data.
Once Google Ads is fully configured, you have two implementation paths inside GTM — choose based on your site architecture and data availability.
With the unified Google tag (gtag.js) deployed through GTM, you can enable automatic collection, which scans your confirmation page for email fields and sends the hashed data automatically. [3] This is quick to configure but unreliable: it breaks on custom checkout flows, single-page applications, or confirmation pages that don't render customer data in standard HTML form fields.
When to use: Simple lead gen pages with a visible email field on the confirmation page, and lower traffic where you can manually verify each conversion.
For any account spending meaningfully or with a technical team available, push customer data into the GTM data layer from your backend at the moment of conversion. This is more reliable than automatic collection and gives you control over data normalization before it reaches Google. [4]
The data layer push on your confirmation page should look like this:
dataLayer.push({
'event': 'purchase',
'enhanced_conversion_data': {
'email': '[email protected]',
'phone_number': '+11234567890',
'first_name': 'John',
'last_name': 'Smith',
'home_address': {
'street': '123 Main St',
'city': 'Anytown',
'region': 'CA',
'postal_code': '90210',
'country': 'US'
}
}
});
In GTM, then:
dlv - email, dlv - phone).If conversions happen offline — sales calls, demos, contract signings — there's a separate path called Enhanced Conversions for Leads. You capture the hashed email at the initial form fill, store it with your lead record, and upload the match when the lead closes. [5] This is a distinct configuration from web enhanced conversions, but knowing it exists prevents practitioners from assuming enhanced conversions only apply to immediate e-commerce events.
"It's set up" and "it's working correctly" are two different states — most silent failures surface only at the verification stage.
Walk through a test conversion in GTM's built-in preview mode. Click into your Google Ads conversion tag details and look for the "Enhanced Conversions" section. If your data layer variables show as undefined, either the data layer push isn't firing before the tag, or the variable names don't match.
The Tag Assistant Chrome extension shows whether enhanced conversion data is being passed with your conversion hit. Look for the em parameter in the hit details — its presence confirms hashed email data is being collected and transmitted.
In Google Ads, add the "Enhanced conversions" column under Goals >> Conversions >> Summary. Allow 5–7 days before drawing conclusions. The percentage shown indicates how many conversions have enhanced conversion data attached.
| Enhanced Conversion Rate | Assessment | Likely Issue |
|---|---|---|
| 0% | Not working | Google Ads settings not enabled, or no data passing |
| 1–20% | Partial / broken | Data layer timing issue, or form data not captured for all users |
| 20–50% | Functional but improvable | Some user journeys not captured; add phone & address fields |
| 50–80% | Good | Normal range for most implementations |
| 80%+ | Excellent | High data completeness; maximize match rate with all PII fields |
Note that enhanced conversion rate (how many conversions have EC data attached) is distinct from incremental conversion recovery. You can have 80% of conversions tagged with EC data, but the lift in measured conversions depends on how many of those matched to a Google account that wouldn't have been attributed by cookie alone. For a deeper look at how to make conversion tracking more accurate beyond enhanced conversions, the principles of data layer hygiene and normalization apply broadly.
The most frequent technical failure. If your Google Ads conversion tag fires before the dataLayer.push() executes, the tag captures an empty data layer and sends nothing. Fix: use a custom event trigger tied to your data layer event (e.g., the purchase event) rather than triggering on page load or DOM ready.
Google's matching requires normalized email: lowercase, no leading or trailing spaces. Uppercase characters or whitespace from form inputs reduce match rates. Normalize server-side before the data layer push — not in GTM after the fact.
Phone numbers must be in E.164 format: +[country code][number] with no dashes, spaces, or parentheses. Passing (555) 123-4567 will not match. Use a backend normalization function before pushing to the data layer.
If you're running Consent Mode (required in the EU, increasingly recommended globally), users who decline analytics consent will have modeled conversions applied rather than actual enhanced conversion data — this is expected behavior. [6] However, if your Consent Mode implementation incorrectly blocks the Google Ads tag from firing entirely for non-consenting users, you lose even the modeled attribution. Review your consent tag firing rules carefully. For broader measurement strategy across Google Ads, consent mode integration is now a core consideration, not an optional one.
Enhanced conversions and offline conversion import solve different attribution problems — understanding the distinction prevents practitioners from applying the wrong tool.
| Scenario | Enhanced Conversions | Offline Conversion Import |
|---|---|---|
| E-commerce purchase on-site | ✓ Primary choice | Optional supplement |
| Lead form fill (online) | ✓ EC for Leads | When lead closes in CRM |
| Phone call conversions | Limited applicability | ✓ Better fit |
| In-store purchase | ✓ With email capture at POS | ✓ Also valid |
| Long B2B sales cycle | ✓ For lead capture | ✓ For closed deal import |
If your overall conversion tracking setup has gaps upstream of enhanced conversions — misconfigured conversion actions, duplicate tags, or wrong attribution windows — fix those first. [7] Enhanced conversions amplify the signal you're already sending; they don't fix broken base tracking.
Yes — the hashed customer data is sent alongside the conversion tag regardless of cookie consent state. However, under Consent Mode v2, if a user declines analytics consent, Google applies modeled attribution rather than using the matched PII directly. The key risk is a Consent Mode misconfiguration that blocks the Google Ads tag from firing at all, which removes even the modeled conversion.
Allow 5–7 days after a verified implementation before drawing conclusions from the Enhanced Conversions column. Match processing happens asynchronously after Google receives the hashed data. Checking within 24–48 hours often shows artificially low rates that correct themselves over the following days as matching completes.
Single-page applications and checkout flows without a distinct confirmation page require extra work. You'll need to fire the data layer push programmatically when the conversion event completes — typically from a success callback in your payment or form handler — rather than on page load. This makes the manual data layer method essential; automatic collection won't work reliably in this scenario.
Yes. Email alone is sufficient and is typically the highest-signal identifier for Google account matching. Phone number and address fields improve match rates incrementally but aren't required. Start with email, verify match rates, and add additional fields if your match rate is below 50% and your confirmation page has access to that data.
No — enhanced conversions supplement the standard conversion tag; they don't replace it. Your base conversion tag must still fire and record the conversion event. Enhanced conversion data is sent as additional parameters alongside that hit to improve attribution accuracy. If the base tag isn't firing correctly, enhanced conversions have nothing to attach to.
Yes, they're distinct configurations. Enhanced conversions for web send hashed customer data at the moment of an on-site conversion event. Enhanced conversions for leads capture the hashed email at form fill, store it with the lead record, and upload a match when the lead later converts offline — similar to offline conversion import but using the enhanced matching infrastructure.
More answers in this topic: Tracking & Measurement