google ads5 min readBy Phloz team

Google Ads Enhanced Conversions: setup, and what quietly breaks it

Enhanced Conversions recover conversions lost to cookie limits — but only if the user data actually reaches Google, hashed and matched. The setup, the three ways to pass data, and the mistakes that make it a no-op.

TL;DR

Enhanced Conversions recover conversions that cookie restrictions, iOS, and consent gaps would otherwise lose, by sending Google hashed first-party customer data (email, phone, name) with the conversion so it can match the conversion to an ad click even when the cookie path fails. It's close to free signal — but only if the data is actually present on the conversion page, correctly mapped, and hashed. The usual failures: no user data available at the moment the tag fires, wrong field selectors, Enhanced Conversions toggled on but never configured, and consent/policy gaps. Below: the two flavours (web vs leads), the three ways to pass data, and the checks that tell you it's really working.


If your Google Ads conversions dropped after the cookie/iOS changes and you've heard "turn on Enhanced Conversions," the advice is right — but "turn it on" is doing a lot of hiding. Enhanced Conversions is two settings deep and fails quietly: the toggle goes green, the diagnostics say "needs attention," and nothing actually improves because the user data never reached the tag. Here's the setup that works and the traps that make it a no-op.

What Enhanced Conversions actually does

A normal conversion relies on the gclid cookie to tie the conversion back to the ad click. When that path is blocked, the conversion is lost. Enhanced Conversions adds a second matching signal: when the conversion fires, your site also sends hashed (SHA-256) first-party data the user already gave you — email, and optionally phone/name/address. Google hashes the same fields on signed-in Google accounts and matches, recovering conversions the cookie alone couldn't attribute. The data is hashed in the browser before it leaves, so you're not sending raw PII.

There are two flavours, and people mix them up:

  • Enhanced Conversions for web — improves your existing online conversions (form submit, purchase) by attaching user data at conversion time.
  • Enhanced Conversions for leads — a different model: you capture a hashed identifier at form submit, then later upload offline conversions keyed by that identifier when the lead closes. (This is the offline conversion import path with hashed email instead of gclid.)

This post is mostly about web; don't configure one expecting the other's behaviour.

The three ways to pass the data

Enhanced Conversions for web needs the user-provided data to reach the Google tag. Three mechanisms, easiest-to-most-robust:

  1. Automatic detection — the Google tag scrapes the page for email/phone fields. Zero code, but fragile: it only works if the data is visibly present in the DOM at conversion time, and it misses single-page-app flows and masked fields.
  2. Manual via GTM (recommended) — you provide the values explicitly through GTM's user-provided data variable (CSS selectors or a dataLayer value), wired to the Google Ads conversion tag. Far more reliable than scraping because you control where the value comes from.
  3. Code / gtag config — pass the user data directly in the conversion event call. Most robust on custom stacks where you have the value in JS at conversion time.

The single biggest determinant of whether Enhanced Conversions works is whether the user data is actually available at the moment the conversion fires — which is exactly what the failures below come down to.

What quietly breaks it

1. No user data on the conversion page

The classic: the conversion fires on a /thank-you page that has no email field — the user submitted it on the previous page. Automatic detection finds nothing; the enhancement is empty. Fix: pass the value forward (via dataLayer, a hidden field, or capturing it at submit and pushing it into the conversion event) so it exists where the tag fires.

2. Toggled on but never configured

Flipping Enhanced Conversions on in the conversion settings does nothing on its own — you still have to implement the data passing (auto / GTM / code) and accept the customer-data terms. A green toggle with no implementation is the most common "I turned it on and nothing happened." Fix: complete both halves; the action's Diagnostics will say whether it's receiving enhanced data.

3. Wrong selectors / wrong field

With manual GTM selectors, a redesign or a mismatched CSS path silently sends nothing or the wrong value. Fix: prefer a stable dataLayer value over brittle DOM selectors, and re-verify after any page change.

Enhanced Conversions must respect consent, and Google requires you to collect the data in a privacy-compliant way with the right disclosures. Under a consent-deny, the enhanced data is withheld like any other signal. Fix: ensure your consent + privacy policy cover it; test with consent granted.

5. Hashing/format mistakes (on code paths)

If you hash yourself, the email must be normalised (trimmed, lower-cased) before SHA-256, and phone in E.164 — get the normalisation wrong and nothing matches. Fix: let the Google tag/GTM do the hashing where possible; only hash manually if you must, to spec.

How to confirm it's actually working

  • Conversion action → Diagnostics in Google Ads reports Enhanced Conversions status — look for "recording enhanced conversions," not "needs attention."
  • Tag Assistant shows whether user-provided data was sent with the conversion (and that it's hashed, not raw).
  • Give it time: recovered conversions and the diagnostics state take days, not minutes — don't judge it on one test like you would a Realtime check.

Where this fits

Enhanced Conversions is one instance of the broader move every serious tracking setup is making: stop relying on the browser cookie alone, add a first-party, server-friendly matching signal. It's the Google-Ads cousin of hashed match keys on the Meta side and the general case for going server-side on high-value conversions. And like all of it, it fails silently — a green toggle that recovers nothing — so it belongs in the same verify-don't-trust discipline, checked as part of the pre-launch QA pass.

That's what Phloz keeps legible: each client's conversion setup — tags, Enhanced Conversions, offline imports, pixels — modeled and health-checked as part of the tracking-infrastructure map, so "is Enhanced Conversions actually recovering conversions for this client?" is visible, not assumed. The CRM for PPC agencies and pricing pages cover the workflow; the setup above is the part that costs nothing but attention — and the attention is the whole job.