Ads for Breakfast
← All posts

Enhanced conversions: a setup guide for Google Ads and GTM

Setting up enhanced conversions in Google Ads and GTM: step by step, with SHA-256 hashing, the GDPR grey zone, and the website ping without which none of it works.

7 min read

Originally written in German — read it on visnakovs.de.

Setting up enhanced conversions in Google Ads and Google Tag Manager

Enhanced conversions are one of the few Google Ads jobs that almost always pay for themselves: you hand Google hashed form data as a matching aid, and you get back conversions that would otherwise vanish into the tracking hole. Two things Google doesn’t tell you honestly, though — what legal grey zone you’re stepping into, and that without the first ping on your own website nothing works at all, however clean your server data is. We’ll settle both, then you’ll set the whole thing up step by step in Google Ads and GTM.

1. What actually happens when you switch this on

Some background first. Classic conversion tracking hangs off cookies and click IDs. Safari shortens cookie lifetimes, browsers block third-party cookies, users move between devices — and Google loses the link between the ad click and the conversion. You know the result: your CRM counts more enquiries than Google Ads shows conversions, and Smart Bidding optimises on an incomplete picture.

Enhanced conversions close part of that gap. On top of the normal conversion measurement, your conversion tag sends hashed first-party data to Google — typically the email address or phone number the user typed into your form themselves. Google matches those hashes against its own signed-in accounts and can attribute conversions to an ad click that cookies alone would have lost.

How the matching works technically

The process is less spectacular than the marketing language suggests:

  • A user clicks your ad, lands on your page and fills in a form — with an email or phone number.
  • On submit, your conversion tag fires and picks up that data.
  • Before it’s sent, the data is normalised (lowercased, spaces stripped, phone numbers converted to international E.164 format) and hashed with SHA-256.
  • Only the hash leaves the browser — never the plain text.
  • Google hashes its own user data the same way and compares. With SHA-256, the same input always produces the same hash, which is precisely why the match works.

On a hit, Google knows: this conversion belongs to this Google account, and this account clicked your ad earlier. The conversion gets attributed even though the cookie path was broken.

The grey zone: hashed doesn’t mean anonymous

Google sells the method as privacy-friendly — “only hashes are transmitted”. Technically true. Legally, hashing is not anonymisation: the entire point of the exercise is that Google can map the hashes back to specific people. That’s exactly what separates pseudonymisation from anonymisation, and pseudonymised data remains personal data under GDPR.

In practice that means:

  • You are transferring your users’ personal data to Google, even though only hashes go over the wire.
  • Don’t fire the data collection without consent. The clean solution runs through your consent platform plus Consent Mode v2, so that user-data collection hangs off the consent status.
  • Update your privacy policy: transmitting hashed data to Google belongs in it.

I’m not a lawyer and this isn’t legal advice — settle the details with your data protection officer. But do it with your eyes open. Anyone waving enhanced conversions through as an “anonymous method” and ignoring consent isn’t in a grey zone, they’re outside it. How to think about conversion tracking in a GDPR-aware way generally is something I’ve written up at more length in the GDPR conversion tracking article.

2. Without that first ping on the website, nothing runs

This is where most setups fall over, and it’s the most misunderstood part of the whole feature. Enhanced conversions are an addition to web-based conversion tracking, not a replacement for it. Google Ads needs the first ping on the website, 100% of the time — the tag that records the ad click and the session on your page itself. Without that on-site first ping, the match doesn’t happen. However complete and clean your data is on the server or in the CRM: if nothing fired on the website, Google has no click to attach your hashed data to.

Server-side tagging changes nothing here either. In a clean server-side setup the browser sends the first request to your server container — the event still originates on the website. What doesn’t work at Google: generating events purely server to server, with the page never having sent a ping at all.

Meta vs Google: the lesson from an offline conversion project

This is exactly where I’ve walked into the wall myself, on an offline conversion import project for a clinic in Dubai. The plan: push qualified leads from the CRM back to the ad platforms so the algorithms optimise on real customers instead of bare form submissions.

At Meta it worked. Meta accepts server-side events with hashed data through the Conversions API — email and phone in, Meta matches the hashes against its own user base, done. A browser event helps, but it isn’t a precondition.

At Google the same approach hit a wall. Google demands the first website ping. Without click capture on the page there was nothing for Google to hang the later-imported conversions on, and the best server data in the world doesn’t help at that point. The full story, including the fix, is in the article on offline conversion import for lead gen.

The short version, as a rule of thumb:

  • Meta: accepts pure server events with hashed user data, browser involvement optional.
  • Google Ads: demands the on-site first ping. Enhanced conversions, server-side tagging, offline conversion import — all of it builds on a click or page event captured on the website.

So before you touch enhanced conversions, your normal conversion tracking has to be in place on the page and firing. If you’re unsure there, run the conversion tracking health check first.

3. Step by step: turning enhanced conversions on in Google Ads and GTM

Now the build. You need three things up front:

  • Working Google Ads conversion tracking via Google Tag Manager — if that’s missing, set it up first (connecting GTM and Google Ads, or click a finished container together in my GTM configurator, which is on my German site — the JSON it produces is language-neutral).
  • A form (or a checkout) where the user enters an email address or phone number.
  • A consent setup that ties data collection to permission (see section 1).

Step 1: enable enhanced conversions in Google Ads

The switch in the Google Ads account first:

  1. Go to Goals → Conversions → Settings.
  2. Expand the “Enhanced conversions” section.
  3. Tick “Turn on enhanced conversions”.
  4. Accept the customer data terms — this is the moment you formally agree to the data transfer.
  5. Choose Google Tag Manager as the implementation method and save.

Step 2: create the User-Provided Data variable in GTM

In the GTM container you now define where the user data comes from:

  1. In GTM, go to Variables → New and pick the “User-Provided Data” variable type.
  2. You have two options for the type: automatic collection or manual configuration.

Automatic collection has Google hunt for email fields on the page by heuristic. Convenient, but fragile: it picks up the wrong field from time to time, or fails silently when you rebuild your form. My recommendation is manual configuration — you specify exactly where the email and phone number sit, via a data layer variable or a CSS selector. The data layer route is the most robust: on form submit you push the values in, and point the variable at them:

  • Email as a data layer variable, e.g. user_email.
  • Phone as a data layer variable, e.g. user_phone — ideally already in E.164 format (+49...).

You can pass the values in plain text; GTM hashes them with SHA-256 before they leave the browser. Alternatively you pass pre-hashed values, in which case normalisation is your job (lowercase, no spaces) or nothing will match.

Step 3: connect the variable to the conversion tag

Now your existing conversion tag gets the extra data:

  1. Open the Google Ads conversion tracking tag in GTM.
  2. Enable “Include user-provided data from your website”.
  3. Select the variable you just created.
  4. Save and publish the container.

Note what this is: exactly the on-site first ping from section 2. Your conversion tag keeps firing on the page, now with hashed user data in its luggage. You’re not replacing anything, you’re adding.

Step 4: test, then wait for the diagnostics

Don’t trust a setup you haven’t tested. Here’s how to check it:

  • Trigger a test conversion in GTM preview mode and confirm the conversion tag fires and the variable genuinely holds data.
  • Look at the request to Google in the browser’s network tab: only long hash strings should appear there — never plain text. If you can read your own email address in the request, something is wrong.
  • For a quick overall check of your page, there’s my tracking check (in German).
  • In Google Ads, watch the “Diagnostics” tab on the conversion action itself. It can take a few days before it reports enhanced conversions as recording — that’s normal, not a fault.

Only once diagnostics is green do you know the match is actually running.

The bottom line

Enhanced conversions are quick to set up and give you back conversions your tracking would otherwise lose — but only if you respect the two uncomfortable truths. The take-aways:

  • Enhanced conversions match SHA-256-hashed form data (email, phone) against Google’s user accounts. Setting it up through Google Ads plus GTM takes under an hour.
  • Hashed doesn’t mean anonymous: you’re transferring personal data. Fire only with consent, connect Consent Mode properly, update the privacy policy.
  • Google needs the first ping on the website, 100% of the time. Server data alone isn’t enough — that’s what separates Google from Meta, as an offline conversion project in Dubai taught me.
  • Manual configuration through the data layer beats automatic collection, and it survives your next form redesign.
  • The setup isn’t finished until diagnostics in Google Ads says the data is being recorded.

Not sure your conversion tracking is even standing up straight before you bolt enhanced conversions onto it? Write to me and I’ll look at it directly.