Skip to content
Tracking

Enhanced conversions for web and leads: set up and verify

Google Ads merged enhanced conversions for web and leads into one setting in 2026. How to set it up in GTM, upload leads and verify the em parameter.

By Dimitris8 min read
Connect the lead to its later outcome. Flat editorial diagram of the article’s measurement workflow.
Tracking Whisper
The short answer

Enhanced conversions send hashed first-party data, such as an email address or phone number, with your conversions so Google Ads can match them to signed-in users when cookies are missing. Since June 2026 web and leads are one on/off setting under Goals > Settings > Customer data use, and since April 2026 Google Ads accepts user-provided data from the tag, Data Manager and API connections at the same time. Set it up by passing user data on the conversion (or on the lead form), uploading qualified leads through the Data Manager API, and verifying the em parameter and the diagnostics report.

Enhanced conversions are one of the few Google Ads measurement features that get more useful as cookies get less reliable. Instead of depending on a click identifier surviving in the browser, the conversion carries hashed data the user gave you, such as an email address, which Google can match to a signed-in account. In 2026 Google simplified the settings and moved lead uploads to a new API, so many accounts set up in 2023 or 2024 now look different from the guides written then. This article covers the current setup for web and leads and, more importantly, how to prove it works.

What changed in 2026?

Google's help page "Updates to your enhanced conversions settings" describes two steps:

  • April 2026: Google Ads began accepting user-provided data from website tags, Data Manager and API connections at the same time. You no longer pick one implementation method.
  • June 2026: enhanced conversions for web and enhanced conversions for leads became a single feature with one on/off switch. The method selection disappeared from the account.

Google says no action is needed for accounts that had already accepted the customer data terms: they were migrated to the unified setting.

Separately, uploads of offline conversions and enhanced conversions for leads moved to the Data Manager API. The Google Ads Developer Blog post "Changes to Offline Click Conversion Import Support in the Google Ads API" said that from 15 June 2026, UploadClickConversions requests fail with CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE when the developer token had sent no offline conversion uploads between 17 December 2025 and 15 June 2026. Everyone else should use the Data Manager API. Our Data Manager API migration guide covers that side in detail.

Web or leads: which do you need?

Enhanced conversions for webEnhanced conversions for leads
Where the conversion happensOn the website (purchase, sign-up)Offline, after a website lead (qualified lead, closed deal)
What the tag sendsHashed user data with the conversionHashed user data when the form is submitted
What you uploadNothingThe offline conversion with the same hashed data
Conversion action sourceWebsiteImport from clicks
Needs GCLID stored in CRMNoNo, but you can send it

Most lead generation businesses need both: web for the form submission itself, if you bid on it, and leads for the outcomes that happen in the CRM later.

Two conversion paths: Web conversions and later qualified leads have different collection moments.
Tracking Whisper
Web conversions and later qualified leads have different collection moments.

Step 1: turn on the setting and accept the terms

  1. In Google Ads, open Goals > Settings.
  2. Expand Customer data use.
  3. Tick Turn on enhanced conversions. Optionally tick Turn on conversion-based customer lists if you want Google to build customer lists from conversion data.
  4. Select Agree and save, review the customer data terms and confirm.

Then check the Google tag itself. Under the Google tag's Configure tag settings, Allow user-provided data capabilities must be on, otherwise the tag will not send the data whatever your GTM container does. The same section holds Automatically detect user-provided data, which scans pages for email addresses and phone numbers. It is a fallback, not a plan: an explicit mapping is more reliable.

Step 2: pass user data on web conversions

In Google Tag Manager

Google's GTM guide offers three ways to supply the data. You only need one.

  • Automatic: the tag detects data on the conversion page.
  • Manual configuration: you point to CSS selectors or, better, to dataLayer variables.
  • Code: a Custom JavaScript variable or data object returns the data.

For a purchase confirmation page, the cleanest route is to push the data into the dataLayer and map it with a User-Provided Data variable.

// On the order confirmation page, before the purchase event fires
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'T-20931',
    value: 249.00,
    currency: 'EUR'
  },
  user_data: {
    email: 'anna.schmidt@example.de',
    phone_number: '+4930123456789'
  }
});
  1. Create Data Layer Variables for user_data.email and user_data.phone_number.
  2. Create a variable of type User-Provided Data, choose Manual configuration, and map email and phone to those variables.
  3. Open the Google Ads Conversion Tracking tag for the purchase, tick Include user-provided data from your website, and select the User-Provided Data variable.
  4. Preview, buy a test product, publish.

Phone numbers should be in E.164 format: a plus sign, the country code, then digits only.

With gtag.js

Without GTM, set the user data before the conversion event. The Google tag normalises and hashes plain values. If you prefer to hash yourself, use the sha256_ keys, such as sha256_email_address and sha256_phone_number.

gtag('set', 'user_data', {
  'email': 'anna.schmidt@example.de',
  'phone_number': '+4930123456789'
});
gtag('event', 'conversion', {
  'send_to': 'AW-123456789/AbCdEfGhIjk',
  'value': 249.00,
  'currency': 'EUR',
  'transaction_id': 'T-20931'
});

Replace the send_to value with your own conversion ID and label.

Step 3: capture data on lead forms

For leads, the tag must send hashed data at the moment the form is submitted, so that the later upload has something to match against.

In GTM, Google's guide for leads uses the Google Ads User-Provided Data Event tag:

  1. Create a tag of type Google Ads User-Provided Data Event.
  2. Enter the conversion ID of the conversion action you enabled for enhanced conversions. Google says it must use the same conversion tracking ID and label.
  3. Supply a User-Provided Data variable, as in step 2.
  4. Trigger it on the form submission, after the fields are filled in. A custom event that your form pushes on successful submission is more reliable than GTM's generic Form Submission trigger on forms that submit by JavaScript.
// Pushed by the form handler after the server accepts the submission
window.dataLayer.push({
  event: 'lead_submitted',
  user_data: {
    email: document.querySelector('#email').value,
    phone_number: '+447700900123'  // normalise to E.164 in your form code
  }
});

The User-Provided Data Event tag is also the right choice when the data is entered on one page but the conversion fires on a later one.

Lead outcome mapping: From the form to a qualified CRM lead. Illustrative interface with synthetic example data.
Tracking Whisper
Choose the web or lead workflow from the real conversion moment, then validate the full chain. Illustrative interface; synthetic data, not a live report.

Step 4: upload qualified leads

When a lead becomes a qualified opportunity or a customer, you import that conversion against a conversion action with the source Import from clicks, including the hashed email or phone number captured on the form. Google says enhanced conversions for leads do not require storing the GCLID, but you can include it where you have it.

New integrations upload through the Data Manager API, or through Data Manager connections in the Google Ads interface. Either way, you normalise and hash the data yourself. Google's "Format user data" guide sets the rules:

  • Email: lowercase and remove all whitespace. For gmail.com and googlemail.com only, also remove dots in the part before the @, and remove a + and everything after it. Leave other domains as they are.
  • Phone: E.164, a plus sign and digits only.
  • Hash: SHA-256, encoded as hex or Base64.
import hashlib

def normalise_email(raw: str) -> str:
    email = "".join(raw.split()).lower()
    local, _, domain = email.partition("@")
    if domain in ("gmail.com", "googlemail.com"):
        local = local.split("+", 1)[0].replace(".", "")
    return f"{local}@{domain}"

def sha256_hex(value: str) -> str:
    return hashlib.sha256(value.encode("utf-8")).hexdigest()

print(sha256_hex(normalise_email(" Cloudy.SanFrancisco+shopping@gmail.com ")))
# hashes "cloudysanfrancisco@gmail.com"

If the web tag and the CRM upload normalise the same email differently, the hashes will not match and the lead will not attribute. Test with one real submission end to end before you trust the numbers.

Step 5: verify in the browser

Configuration screens tell you what should happen. The request tells you what does.

  1. Open your browser's developer tools on the conversion or form page and filter the Network tab for pagead.
  2. Complete the conversion. Find the request to googleadservices.com/pagead/conversion/. Google notes that some browsers send it to google.com/pagead/1p-conversion/ instead.
  3. In the Payload tab, find the em parameter.

Google's guide explains what you will see:

em valueMeaning
MissingThe tag is not configured to send user data
tv.1~em. with nothing after itThe parameter is sent, but empty
tv.1~em.e1Data is sent but there is a problem with it, check diagnostics
tv.1~em followed by a long hashed stringData is being sent

Tag Assistant shows the same thing: in the debug summary, open the Conversion item under Output and look for em in the hit details.

Also check consent. Our Consent Mode v2 checklist explains why ad_user_data must be granted before user data is sent. Test once with consent accepted and once with it declined, and make sure the declined case sends no user data.

Step 6: read the diagnostics report

After a few days of traffic, open the conversion action in Google Ads and look at the enhanced conversions diagnostics. The key figure is the coverage rate: the share of conversion events that carried user-provided data. Statuses include:

  • Recording enhanced conversions: working with no major issues.
  • Needs attention: active but with errors, such as missing data.
  • No recent data: nothing recorded in the last 7 days.

For lead uploads, the diagnostics grade data quality as Excellent, Good, Needs attention or No recent data. A low coverage rate on web conversions usually means the data is missing on some templates, such as guest checkout or a second payment provider's return page. A low match on leads usually points to normalisation differences or uploads that carry no email or phone at all.

Verify the full delivery chain: Inspect collection in the browser and received data in the destination.
Tracking Whisper
Inspect collection in the browser and received data in the destination.

Common mistakes

  • Mapping a field that is empty for some users. Guest checkouts, Apple Pay express flows and third-party booking widgets often reach the confirmation page without an email in the dataLayer.
  • Sending data before consent. If ad_user_data is denied, the tag should not carry user data. A CMP mapping that only updates ad_storage breaks this silently.
  • Mismatched conversion IDs. The User-Provided Data Event tag must use the same ID and label as the conversion action with enhanced conversions on.
  • Hashing before normalising. Hashing an email that still has a trailing space or capital letters produces a valid hash that never matches.
  • Legacy upload code. Scripts calling UploadClickConversions from an integration without legacy access fail. Move them to the Data Manager API.

Key takeaways

  • Since June 2026, enhanced conversions for web and leads are one setting under Goals > Settings > Customer data use, and Google Ads accepts user data from tags, Data Manager and APIs at the same time.
  • On the web, pass email and phone through the dataLayer to a User-Provided Data variable and tick Include user-provided data from your website on the conversion tag.
  • For leads, fire a Google Ads User-Provided Data Event tag on successful form submission, then upload the qualified lead with the same hashed data through the Data Manager API.
  • Normalise exactly as Google's formatting guide says, including the Gmail-only rules, or hashes will not match.
  • Verify the em parameter in the request, test with consent declined, and watch the coverage rate in the diagnostics report.

Tracking Whisper builds changes like these in its own GTM workspace and publishes only after a person approves them, then checks the conversion pages in a real browser, including the dataLayer, the consent state and the hits that leave the page. The enhanced conversions glossary entry has the short definitions, and tracking monitoring covers what happens when coverage drops later.

Frequently asked questions

What is the difference between enhanced conversions for web and for leads?

For web, the Google tag sends hashed user data with a conversion that happens on your site, such as a purchase. For leads, the tag sends hashed data when a form is submitted, and you later import the conversion that happened offline, such as a closed deal, with the same hashed data. Since June 2026 Google Ads manages both with one setting.

Do I still need the GCLID for enhanced conversions for leads?

Google says enhanced conversions for leads does not require you to store the GCLID in your forms or CRM, because it matches on user-provided data such as email or phone. You can still send the GCLID if you have it. The GCLID is required only if you do not use a tag to collect user-provided data.

How do I check that enhanced conversions are working?

Open the conversion request to googleadservices.com/pagead/conversion/ in your browser's developer tools, or the hit details in Tag Assistant, and look for the em parameter. A value starting with tv.1~em followed by a long hash means data is being sent. Then check the diagnostics report in Google Ads for the coverage rate and status.

Should I hash email addresses before sending them?

In the Google tag you can send them unhashed and the tag normalises and hashes them, or send SHA-256 hashes under keys such as sha256_email_address. For uploads through the Data Manager API you normalise and hash yourself, following Google's formatting rules, for example lowercasing emails and using E.164 for phone numbers.

Does consent affect enhanced conversions?

Yes. Google's consent mode reference says the ad_user_data signal is needed for enhanced conversions. If ad_user_data is denied, user-provided data should not be sent, so check your consent setup before you judge coverage.

Sources

  1. Updates to your enhanced conversions settings, Google Ads Help
  2. Set up enhanced conversions for web using Google Tag Manager, Google Ads Help
  3. Set up enhanced conversions for web using the Google tag, Google Ads Help
  4. About enhanced conversions for leads, Google Ads Help
  5. Configure Google Tag Manager for enhanced conversions for leads, Google Ads Help
  6. About the enhanced conversions for web tag diagnostics report, Google Ads Help
  7. Format user data, Data Manager API, Google for Developers
  8. Changes to Offline Click Conversion Import Support in the Google Ads API, Google Ads Developer Blog
Written byDimitrisTracking Whisper

Dimitris builds Tracking Whisper and writes about tracking, analytics and data from the work the agent does every day: GTM containers, GA4 properties, ad platforms and the numbers in between.

Give Whisper its first job.

The free plan covers one site. Start with a setup, an audit or a question about your numbers. No card needed.