Google Ads Enhanced Conversions: Setup, Hashing, and Benefits in 2026

Table Of Contents
- What Changed in Enhanced Conversions in 2026
- Standard vs Enhanced Conversions: What's the Difference
- How Enhanced Conversions Works β Technical Overview
- Setup Method 1: via gtag.js (Recommended for Developers)
- Setup Method 2: via Google Tag Manager
- Verifying Enhanced Conversions Are Working
- Enhanced Conversions for Leads (Offline Use Case)
- Common Issues and Fixes
- Quick Start Checklist
- What to Read Next
TL;DR: Enhanced Conversions fills the gaps in your conversion data caused by cookie blocking, ITP, and Consent Mode restrictions β by hashing first-party user data and matching it to signed-in Google accounts. According to Google, it improves conversion measurement by 5-15% on average. Run it on verified Google Ads accounts with existing conversion history to see the fastest impact.
| β Right fit if | β Wrong fit if |
|---|---|
| You run Google Ads for EU, UK, or iOS-heavy traffic | Your entire audience never shares email/phone |
| You want more accurate Smart Bidding signals | You have no form or checkout on your site |
| Cookie-based tracking misses 20%+ of conversions | You're running purely brand awareness campaigns |
| You already use gtag.js or GTM on the site | Your site collects zero first-party user data |
Enhanced Conversions works by taking hashed first-party data (email address, phone number, name) that users submit on your site, and using it to match conversions back to Google's own user database β bypassing the limitations of cookie-based tracking. The result: more complete attribution data, better Smart Bidding signals, and more accurate reporting.
What Changed in Enhanced Conversions in 2026
- Enabled by default for all new Google Ads accounts created from January 2026 β opting out requires a manual action in conversion settings
- Enhanced Conversions for Leads is now listed as the primary offline conversion method in Google's documentation β manual GCLID upload is still available but not recommended for new setups
- SHA-256 hashing is now handled automatically by the Google Tag if you pass data in plain text β but server-side pre-hashing is still the recommended approach for GDPR compliance
- Consent Mode v2 integration: Enhanced Conversions works in modeling mode even when
ad_user_datais denied β Google models likely conversions using aggregated signals - According to Google, Enhanced Conversions improves bid optimisation accuracy, contributing to a 5% average improvement in conversion measurement for web and 5-15% for leads
Standard vs Enhanced Conversions: What's the Difference
| Dimension | Standard Conversions | Enhanced Conversions |
|---|---|---|
| Tracking method | Cookies + GCLID | Cookies + hashed first-party data |
| Affected by ITP/cookie blocking | Yes β 20-40% data loss | No β hash-based matching |
| Data sent to Google | Conversion event only | Event + hashed email/phone |
| Privacy compliance | GDPR-dependent on cookies | Hashing provides PII protection |
| Setup complexity | Low | Medium |
| Impact on Smart Bidding | Baseline | +5-15% signal coverage |
| Required data | Landing page tag | Form data (email, phone, name) |
| Works with Consent Mode | Yes | Yes (modelling when consent denied) |
How Enhanced Conversions Works β Technical Overview
- User clicks your Google Ad β lands on your site
- User completes a form or checkout (enters email/phone)
- Your gtag.js fires a conversion event AND passes the
user_dataobject - Google hashes the data with SHA-256 (or accepts pre-hashed values)
- Google matches the hash against its database of signed-in Google users
- If matched: conversion is attributed to the correct ad click β even if cookies were blocked
- If not matched: standard cookie/GCLID attribution is used as fallback
The match rate typically runs 60-85% depending on how many of your users are signed into Google accounts.
Related: Google Tag (gtag.js) Setup and Troubleshooting for Google Ads 2026
Setup Method 1: via gtag.js (Recommended for Developers)
Step 1: Enable Enhanced Conversions in Google Ads
Go to Goals β Summary β Settings (gear icon) β Enhanced conversions. Toggle on "Turn on enhanced conversions for web". Accept the data terms.
Step 2: Configure the Conversion Action
In your conversion action settings (Goals β Conversions β your action), under "Enhanced conversions", select "Google tag" as the method.
Step 3: Add user_data to Your Conversion Event
// On your thank-you page or in your form submit handler
gtag('event', 'conversion', {
'send_to': 'AW-XXXXXXXXX/YYYYYYYYYYYY',
'value': 99.00,
'currency': 'USD',
'transaction_id': 'ORDER-12345',
'user_data': {
'email_address': '[email protected]', // Google auto-hashes plain text
'phone_number': '+12025551234', // E.164 format
'address': {
'first_name': 'Jane',
'last_name': 'Smith',
'street': '123 Main St',
'city': 'New York',
'region': 'NY',
'postal_code': '10001',
'country': 'US'
}
}
}); β οΈ Important: When passing user data in plain text, Google hashes it client-side before transmission. However, plain text PII briefly exists in the browser's memory. For GDPR-compliant implementations, pre-hash with SHA-256 on your server and pass only hashed values in the
user_dataobject. The format for pre-hashed values is a lowercase hex string.Related: Google Ads Conversion Tracking Setup: GTM, Enhanced Conversions, and Everything in Between
Step 4: Implement Server-Side Pre-Hashing (GDPR-Recommended)
import hashlib
def sha256_hash(value):
normalized = value.strip().lower()
return hashlib.sha256(normalized.encode('utf-8')).hexdigest()
hashed_email = sha256_hash(user_email)
hashed_phone = sha256_hash(user_phone_e164) Pass the hex string to user_data. Google recognises pre-hashed values automatically.
Running conversion-optimised campaigns with Smart Bidding? Verified Google Ads accounts with existing spend data reach Smart Bidding's optimal performance threshold faster than fresh accounts β you're not starting from zero conversion history.
Setup Method 2: via Google Tag Manager
For teams using GTM instead of direct gtag.js:
- Open GTM β Tags β New β Google Ads Conversion Tracking
- In "Enhanced conversions", select "User-provided data"
- Create a new User-Provided Data variable: map your form fields to the corresponding data types (Email, Phone, First Name, Last Name)
- Set the trigger to fire on your thank-you page or form submit confirmation
GTM's built-in template handles the hashing automatically. You don't need to write custom JavaScript.
Related: How to Set Up Offline Conversions and Link CRM Sales to Google Ads
Verifying Enhanced Conversions Are Working
Check in Google Ads UI
After 24-72 hours: Goals β Conversions β your conversion action β Diagnostics. Look for "Enhanced conversions data quality: Good". If it shows "Limited", the match rate is below 30% β check that form fields are populated before the conversion fires.
Check via Tag Assistant
Tag Assistant (Chrome DevTools) shows the user_data object in the event payload. Verify it contains at least email or phone. If the object is empty (user_data: {}), your tag is passing but Enhanced Conversions has no data to work with.
Check via Network Tab
Look for the conversion request to https://googleads.g.doubleclick.net/pagead/viewthroughconversion/. In the request payload (POST body), search for em (email) or pn (phone) parameters β these indicate Enhanced Conversion data was sent.
Case: B2C e-commerce, apparel vertical, Google Shopping + Search, $800/day budget. Problem: iOS 17 update (ITP) wiped 28% of conversion attribution. Smart Bidding was under-bidding on mobile because it saw far fewer mobile conversions than actually occurred. Action: Enabled Enhanced Conversions via gtag.js, passing hashed email from checkout form. Used GTM for the conversion event, server-side hashing in the checkout backend. Result: Attributed mobile conversions increased 31%. Smart Bidding re-calibrated within 2 weeks, raising mobile bids appropriately. ROAS improved from 2.4x to 3.1x. According to Google, average ROAS for e-commerce Shopping is 3-5x (Store Growers, 2025) β they crossed into the target range.
Enhanced Conversions for Leads (Offline Use Case)
For lead gen where the conversion happens offline (sales call, in-person meeting), Enhanced Conversions for Leads works differently:
- User submits a form on your website β you store their email/phone
- When the lead converts offline (deal closed, appointment kept), you upload that email/phone hash to Google Ads
- Google matches the hash to the original ad click β even without a GCLID
This is more resilient than traditional offline conversion imports because it doesn't require GCLID capture in the CRM. The match rate is typically 50-75%.
Setup: Goals β Conversions β your offline conversion action β Enhanced conversions for leads β On.
β οΈ Important: Enhanced Conversions for Leads requires that the user submitted a form on your website at some point β Google needs to record the hash at the time of the form submission. If you're trying to match conversions from phone calls only (no web form), you need traditional GCLID-based offline conversion imports instead.
Common Issues and Fixes
Match rate below 30% Most likely cause: the user_data object is being populated after a partial form submit, or the email field is populated but the format is non-standard (has trailing spaces, uppercase). Normalise all data: email.trim().toLowerCase().
Enhanced Conversions "Limited" status Not enough data. Need at least 100 enhanced conversion events per month for Google to validate data quality. Below that, it works but shows "Limited" β keep running it, the status improves with volume.
Duplicate conversion events Both standard conversion tag AND enhanced conversion tag firing for same event. Check that you have a single conversion event with user_data attached, not two separate events.
GDPR / data transfer concern Google commits in its DPA (Data Processing Agreement) that Enhanced Conversion data is used only for conversion measurement and bidding, not for audience targeting or profile building. Review Google's EU-US Data Privacy Framework compliance documentation if your legal team requires it.
Case: Lead gen for finance vertical, $250/day budget, EU-focused campaigns. Problem: After Consent Mode v2 implementation, 45% of EU conversions dropped from reporting. Smart Bidding went into "Limited" status. Action: Enabled Enhanced Conversions for Leads β for users who gave consent, passed hashed email at form submit. For non-consented users, relied on Google's conversion modeling (built into Consent Mode v2). Result: Total attributed conversions (real + modelled) recovered to 92% of pre-Consent Mode levels. CPL in reporting stabilised at $83 vs the $147 seen during the data gap. Bidding strategy re-exited "Limited" after 3 weeks.
Quick Start Checklist
- [ ] Enable Enhanced Conversions in Google Ads β Goals β Summary β Settings
- [ ] Accept the customer data terms
- [ ] Add
user_dataobject to your conversion event (gtag.js or GTM) - [ ] Normalise data before passing: trim whitespace, lowercase email
- [ ] For GDPR: implement server-side SHA-256 hashing before passing to user_data
- [ ] For EU traffic: ensure Consent Mode v2 is in place β Enhanced Conversions models data for non-consented users
- [ ] Verify via Tag Assistant:
user_dataobject contains email or phone - [ ] Check Diagnostics after 72h: "Enhanced conversions data quality: Good"
- [ ] For leads: enable Enhanced Conversions for Leads on offline conversion actions
Need accounts with enough conversion history to test Smart Bidding performance? Browse verified Google Ads accounts β accounts with pre-existing spend data give Smart Bidding a head start on calibration.































