Skip to content
GetProfit
Demo

← All resources

Enhanced Conversions — a step-by-step setup for Google Ads and GA4

Form data is already collected on your site but never reaches Google Ads and GA4? Step by step — where to click, what you'll see, how to verify. Setup through Google Tag Manager.

Why you need this at all

Picture the situation: someone saw your ad on Google, clicked, browsed the site, closed the tab. They came back two days later — this time directly, through a bookmark. And submitted the form.

From Google’s point of view these are two different people. The first click came from the ad and then “disappeared”. The second session is a direct visit with no source. The conversion happened, but Google does not know it is the same person who came from the ad. In the report, that conversion will not be attributed to your campaign — it will sit there as “direct / none”.

Why this happens: Safari and iPhone wipe cookies after 7 days, ad blockers cut tracking, Consent Mode can hide part of the data. As a result, up to 15% of real conversions are lost in Google Ads reports.

What Enhanced Conversions does

When a customer submits the form, the site takes their email (or phone number), hashes it (turns it into a random string of letters and digits from which the email itself cannot be recovered) and sends it to Google. Google compares the hash against the data of logged-in Chrome / Gmail / YouTube users — and if there is a match, it restores the “ad click → conversion” chain.

In practice this gives you:

  • +5–15% recovered conversions in the Google Ads report
  • Smarter Smart Bidding — the algorithm has more data and spends the budget better
  • More accurate ROAS — you see the real return, not an understated one

What you need before you start

This guide is for the case where form data is already being collected on the site but is not passed to advertising yet. Check that you have:

  • ✅ A Google Ads account with a configured conversion (Lead, Purchase, etc.)
  • ✅ Google Tag Manager installed on the site
  • ✅ Google Analytics 4
  • ✅ Customer data available on the thank-you page (or right after the form is submitted): email and/or phone, ideally first and last name too

If something from this list is missing — set it up first. This article is specifically about “pushing already collected data into advertising”.

How long it takes

The setup itself — 20–30 minutes. But the data will not show up in Google Ads right away: the “Recording” status and the first Match Rate appear after 24–72 hours, once at least 20–30 conversions have gone through the site.

Step 1. Turn on Enhanced Conversions in Google Ads

1. Go to the conversions section

Go to Google Ads, click the “wrench” icon (Tools and settings) in the top right → under Measurement choose Conversions.

What you’ll see: a table of all your conversions — Lead, Purchase, Add to Cart, etc.

2. Open the conversion you need

Click the name of your main conversion (usually Lead or Purchase — the one campaigns optimise for). The conversion page opens with a statistics table and settings below it.

3. Find the Enhanced Conversions block

Scroll the page down. There will be an “Enhanced conversions” block with a “Turn on enhanced conversions” toggle. If it is not there, the conversion is of the wrong type (EC only works with conversions of the “Website” type).

If you don’t see the block: try opening the Diagnostics tab at the top — Google sometimes hides Enhanced Conversions there.

4. Turn it on and accept the terms

Click Turn on enhanced conversions. Google will show the customer data policy text — read it and tick “I agree to the Customer Data Terms”.

What you are confirming: you have a legal basis to pass the data (consent in the form or legitimate interest), and your privacy policy states that data may be passed to Google in hashed form.

5. Choose the “Google Tag Manager” method

A choice of method will appear. There are three options:

  • Google tag — if gtag.js is installed on your site directly
  • Google Tag Manager — this is the option that suits us
  • Google Ads API — for server-side (not covered in this article)

Choose Google Tag Manager → click Save. There is nothing else to do in Google Ads — the rest happens in GTM.

Step 2. Check that the data really is on the site

Before diving into GTM, make sure the data is actually pushed into the dataLayer after the form is submitted. If it is not there, there is nothing to configure yet — a developer has to put it there first.

1. Open the site and the form

Open your site in Chrome. Go to the page with the lead form.

2. Open DevTools → Console

Press F12 (or Cmd+Option+I on Mac). Switch to the Console tab.

3. Fill in the form and submit it

Fill in a test lead (with your own real email and phone — you can delete it later) and click Submit.

4. Look at the dataLayer

In the Console type: window.dataLayer → Enter. You will see an array of objects. Find the event that follows the submit — it should look something like this:

{
  event: "lead_submit",
  user_data: {
    email: "[email protected]",
    phone_number: "+380501234567",
    first_name: "Ivan",
    last_name: "Petrenko"
  }
}

Your field names may differ — that is normal. What matters is that email and phone are stored somewhere. Remember the exact keys — you will need them in GTM.

⚠️ If there is no data in the dataLayer

That means the developer did not implement the push. Give them this piece of code and ask them to insert it into the form’s submit handler (or into the thank-you page):

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: "lead_submit",
  user_data: {
    email: "{{email_from_form}}",
    phone_number: "{{phone_from_form}}",  // формат: +380...
    first_name: "{{first_name_from_form}}",
    last_name: "{{last_name_from_form}}"
  }
});

Important: the data is passed as is, without hashing — the hashing is done by the Google Tag itself in the browser before sending.

Step 3. Configure GTM — bind the data to the Google Ads tag

Now, in Google Tag Manager, you need to do three things: create variables for email/phone, create a User-Provided Data variable, and bind it to the existing Google Ads conversion tag.

1. Create Data Layer Variables

Log in to Google Tag Manager. Choose your container. In the left menu → Variables → scroll down → User-Defined VariablesNew.

Create a variable for email:

  • Name: DLV - user email
  • Variable Type: Data Layer Variable
  • Data Layer Variable Name: user_data.email (or whatever the path is in your dataLayer)
  • Save

Repeat the same for phone (DLV - user phoneuser_data.phone_number), first name, last name.

These variables are like “pipes” through which GTM will pull email/phone out of the dataLayer at the moment the tag fires.

2. Find the existing Google Ads Conversion Tag

In the left menu → Tags. Find the Google Ads Conversion Tracking tag — the one that counts leads/sales in Google Ads. Open it for editing.

3. Enable “Include user-provided data”

Expand the “Include user-provided data from your website” block (inside the tag, scroll down). Tick the checkbox.

In the User-Provided Data Variable field click +New Variable.

4. Configure the User-Provided Data Variable

A form for creating a new variable of the User-Provided Data type opens:

  • Type: Manual configuration
  • Email: {{DLV - user email}}
  • Phone Number: {{DLV - user phone}}
  • First Name: {{DLV - user first name}}
  • Last Name: {{DLV - user last name}}

Address (street/city/region/postal_code/country) — optional, if you collect it. The more fields, the higher the Match Rate.

Name the variable UPD - Lead User Data → Save.

5. Save the tag and go into Preview

Save → click Preview in the top right. Tag Assistant opens — go through the site, fill in the form. After the submit, Preview will show the list of tags that fired → open your Conversion Tag → the Properties section → the email, phone and other values should be there (not empty).

Important: in Preview the data is shown in plain text — that is normal. Hashing happens afterwards, on the way to Google.

6. Publish the container

Once everything works in Preview, go back to GTM → Submit in the top right → add a version description → Publish. From that moment Enhanced Conversions start working in production.

Step 4. Set up Enhanced Conversions in GA4

GA4 can also use user-provided data — for more accurate audiences and attribution. The setup happens in two places.

1. Turn it on in GA4 Admin

Go to GA4 → the Admin gear (bottom left corner).

Find the User-provided data collection section → click Acknowledge and switch the toggle on. Google will show a warning — read it, agree.

2. Bind the data in GTM (GA4 Configuration Tag)

Go back to GTM → Tags → open your GA4 Configuration Tag (the main GA4 tag that sits on every page).

Expand More SettingsUser Provided Data → tick Include user-provided data.

Set the type to Manual. Bind the same variables you used for Google Ads:

  • Email → {{DLV - user email}}
  • Phone Number → {{DLV - user phone}}
  • First Name, Last Name — if you have them

Save → Preview check → Submit/Publish.

After this GA4 will automatically pick up the user data for all events in that session — you don’t need to configure it separately for each event.

Step 5. Verify that everything works

The setup is done — now you need to make sure the data really goes to Google.

Check 1: GTM Preview (immediately)

You already did this in Step 3. If you saw non-empty User Data in the Google Ads Conversion tag in Preview, GTM is sending it. That is the quick check.

Check 2: Google Tag Assistant (immediately)

Install the Tag Assistant Companion extension in Chrome. Turn on recording, walk through the funnel, fill in the form. In the log of requests to google.com/pagead/1p-conversion/ there should be the em= (email hash) and pn= (phone hash) parameters. That means the data really goes out.

Check 3: Google Ads Diagnostics (after 24–72 hours)

The main check. One to three days after publishing:

  1. Google Ads → Tools → Conversions → open your conversion
  2. The Diagnostics tab
  3. The Enhanced conversions section — there are two metrics there:
MetricWhat it meansTarget
Data receivedThe share of conversions that arrived with EC data> 70%
Match rateThe share of conversions Google managed to match to a logged-in user> 50%

If Data received is low, part of your conversions goes without user data. Go back to GTM and check whether UPD is connected on every conversion point.

If Data received is high but Match rate is low, the data arrives but Google cannot match it. Most likely the problem is the format (see below).

Common problems and how to fix them

ProblemCauseHow to fix
Match rate = 0%The data is hashed on the client side (the developer went the extra mile)Pass plain text. Google will hash it itself.
Match rate is low (< 30%)Wrong phone number formatE.164 format: +380501234567 (with the plus, no spaces/brackets/dashes)
Email does not matchSpaces, upper caseBefore sending — email.toLowerCase().trim()
Data received < 50%EC is not connected on every conversion pointIf you have several conversions (Lead + Call + Form2), User-Provided Data has to be bound to every Google Ads Conversion tag
“Not recording” status after 72hThe tag does not fire at all, or the dataLayer is emptyGo back to GTM Preview — walk through the form again, check that the tag fires
EC works, but quietlyConsent Mode is in denied stateBy design. If the user refused consent, EC does not send the data. Check that consent = granted for the majority of users.

What’s next

Wait two weeks after launch. During that time:

  • Match rate should stabilise at 50–80% (depending on data quality)
  • “Recovered” conversions will appear in Google Ads reports — visible as a rise in Conversions with the same traffic
  • Smart Bidding (tROAS / Maximize Conversion Value) recalibrates to the fuller data → after 2–3 weeks you can carefully raise the target ROAS

After that it makes sense to set up the same thing for Facebook — there it is called Advanced Matching in the Facebook CAPI. The logic is the same: a hashed email/phone goes to Facebook, Facebook matches it against accounts → +10–20% Match Rate in Facebook Ads.

✅ A short checklist so nothing gets forgotten

  • In Google Ads, the conversion → Enhanced conversions = ON, method GTM
  • On the site, the dataLayer has email and phone after the submit
  • In GTM — DLVs for email and phone are created
  • In GTM — the User-Provided Data Variable is created and bound to the Google Ads Conversion Tag
  • In GA4 Admin — User-provided data collection = ON
  • In GTM — User Provided Data is bound to the GA4 Configuration Tag
  • The GTM container is published
  • After 24–72 hours — Diagnostics checked (Data received > 70%, Match rate > 50%)