Enhanced conversions for leads rest on one idea that is simple to set up. Capture the lead’s email or phone at the form, then send it back with the sale. Google matches the two, even when the click ID is missing.
This guide covers what it recovers, the Google Ads setup, the hashing rules with code, and common mistakes. It sits on top of the tag-based Google Ads conversion tracking that records the form fill itself.
What enhanced conversions for leads does
Enhanced conversions for leads is an upgraded offline conversion import that matches CRM results using hashed customer data. Google calls it “an upgraded version of offline conversion import” that uses data such as email addresses (Google Ads Help).
Your website sends Google the hashed email when the lead submits a form. Later you import the lead’s stage with the same hashed email. Google attributes the conversion by matching the imported data with the tag data and signed-in Google accounts (same source).

What enhanced conversions for leads recovers
Enhanced conversions for leads recovers conversions that a click ID alone would lose. Google lists cross-device and engaged-view conversions among the benefits over standard offline imports (same source).
Google’s own figure: advertisers who added emails or phones to GCLIDs saw a median 10% increase in conversions (Google Ads Help).
| GCLID import only | Enhanced conversions for leads | |
|---|---|---|
| Matches on | The Google Click ID stored with the lead | Hashed email or phone, plus the GCLID if stored |
| Lost click ID | Conversion cannot be matched | Can still match on the hashed data |
| Cross-device and engaged-view | Not available | Enabled, per Google |
| Upload limit after the click | 90 days | 63 days |
| Google’s advice | Existing users: consider upgrading | Recommended for new setups |
Since April 2026, enhanced conversions for web and for leads share one on and off setting. From 15 June 2026, lead uploads through code use the Data Manager API (same source). We compare the two import methods in offline conversion tracking for Google Ads.
Before you set up enhanced conversions for leads
Enhanced conversions for leads needs four things in place before any code. Google lists them as setup requirements (Google Ads Help):
- Auto-tagging on in Google Ads.
- An email or phone field on your lead form.
- The URLs of your lead forms, which setup may ask for.
- Agreement with Google’s customer data policies.
Google recommends the email address as the key, because it is unique and is not reformatted in most CRMs. It also recommends collecting both email and phone to improve match rates (same source).
Step 1: turn on form detection in the Google tag
The Google tag can find the email in your form automatically once form interaction detection is on. Open the Google tag settings, choose Manage automatic event detection, and enable Form interactions (same source).
Forms inside a third-party tool or an iframe may not be detected. For those, send the data with code, as in Step 3. If you use Google Tag Manager, Google documents the same setup there.
Step 2: create the conversion action and accept the terms
The lead stages you import need their own conversion action in Google Ads. In Goals, Summary, create a conversion action, choose Conversions offline, and add a data source (same source).
In the enhanced conversions for leads option, check Turn on enhanced conversions for leads. Pick the stage you will bid on, such as a qualified lead, and set it as primary.
Then accept the Customer data terms under Goals, then Settings, if your account has not already. Google notes the terms apply to the whole account (same source).
Step 3: normalize and hash the customer data
Google matches only data that is normalized and hashed the same way on both sides. Google’s rules: trim spaces, convert to lowercase, use E.164 for phone numbers, and hash with hex SHA-256 (same source).
Gmail addresses get one extra rule. Google says to remove all periods before the domain in gmail.com and googlemail.com addresses (same source). So [email protected] and [email protected] hash to the same value.
| Step | Email example | Phone example |
|---|---|---|
| As typed | [email protected] | (123) 123-4567, US |
| Trim and lowercase | [email protected] | n/a |
| Gmail rule: remove dots before @ | [email protected] | n/a |
| E.164 format | n/a | +11231234567 |
| Hex SHA-256 | d6117306485ed0e50afab3ac871e98f81699151f30281527d63ff5f233656c69 | e9d3eef677f9a3b19820f92696be53d646ac4cea500e5f8fd08b00bc6ac773b1 |
You can also send raw values to the Google tag, and Google normalizes and hashes them before they reach its servers. Hash in your own code when data leaves your systems another way, such as a CRM upload.
This browser code follows Google’s rules, using the Web Crypto API:
// Normalize and hash customer data the way Google's enhanced conversions expect.
async function sha256Hex(text) {
const bytes = new TextEncoder().encode(text);
const digest = await crypto.subtle.digest('SHA-256', bytes);
return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, '0')).join('');
}
function normalizeEmail(raw) {
const email = raw.trim().toLowerCase();
const [local, domain] = email.split('@');
if (domain === 'gmail.com' || domain === 'googlemail.com') {
return local.replace(/./g, '') + '@' + domain;
}
return email;
}
function normalizePhone(raw, countryCode) {
const digits = raw.replace(/D/g, '').replace(/^0+/, '');
return '+' + countryCode + digits; // E.164: plus sign, country code, no spaces or dashes
}
Store the same normalized values in your CRM. If the CRM keeps (123) 123-4567 while the tag hashed +11231234567, the two will never match.
Step 4: send the data with the conversion
The Google tag sends user-provided data with the gtag set command, before the conversion event. Google’s own snippet uses these keys, with hashed versions named sha256_email_address and sha256_phone_number (same source):
// After the form validates: send hashed user data, then the conversion event.
const email = normalizeEmail(document.getElementById('email').value);
const phone = normalizePhone(document.getElementById('phone').value, '1');
gtag('set', 'user_data', {
sha256_email_address: await sha256Hex(email),
sha256_phone_number: await sha256Hex(phone)
});
gtag('event', 'form_submit', { send_to: 'AW-123456789' });
Leave a field out entirely if the form does not collect it. Google says to remove it rather than send it blank (same source). Replace AW-123456789 with your own Google tag ID.
How to test it before going live
You can confirm the hashed data leaves the page in Chrome DevTools, before any CRM import. Google describes the check on its enhanced conversions page (Google Ads Help).
- Open DevTools on the form page and select the Network tab.
- Filter for google, then submit a test lead.
- Find the conversion request and look for a parameter named em.
Google says the em value should start with tv.1~em followed by a long string (same source). If it is missing, the tag is not picking up the email.
Step 5: import the lead stages from your CRM
Import each later stage with the same hashed email or phone, plus the GCLID if you stored one. Google recommends including GCLIDs whenever possible for accuracy (Google Ads Help).
Data Manager connects to Salesforce, HubSpot, Google Sheets and cloud storage. Upload daily: Google does not import enhanced conversions for leads that arrive more than 63 days after the click (Google Ads Help).
Then let bidding use the stage. We cover how in how Smart Bidding learns from your conversion data.
Step 6: check the diagnostics report
The enhanced conversions diagnostics report shows whether customer data is arriving and how well it matches. Google says it helps find missing or incorrectly formatted user-provided data (Google Ads Help).
Check it a week after setup, once enough leads have come through. A setting that shows on with no data reaching Google is the most common failure we find.
Common enhanced conversions mistakes
Most enhanced conversions failures look healthy in the settings and do nothing in practice. These are the ones we see most.
| Mistake | What happens | Fix |
|---|---|---|
| Setting on, no data sent | Diagnostics show no customer data; nothing improves | Add the user-provided data tag or variable |
| Variable returns undefined | The tag fires without an email | Test the variable on a real submission |
| Phone without country code | Phone numbers do not match | Store and send E.164, with the plus sign |
| Hashing already-hashed data | Matches fail silently | Hash once, or send raw data to the Google tag |
| Uploading after 63 days | Rows are not imported | Upload daily from the CRM |
Two audits show the pattern. At Killian’s HVAC, enhanced conversions were switched on for the quote form, but no tag supplied the email. At Toolab, the email variable returned undefined after a tracking source was removed, and only live testing caught it.
For a check against your own forms and CRM, our Google Ads conversion tracking service covers enhanced conversions end to end.
Frequently Asked Questions
Why might an advertiser use enhanced conversions for leads?
An advertiser uses enhanced conversions for leads to measure sales that happen after a form fill, such as a signed contract. It matches those sales with hashed first-party data, so they count even when the click ID is lost. Google reports better accuracy than standard offline imports, which gives Smart Bidding truer data.
Where can I find enhanced conversions in Google Ads?
You turn on enhanced conversions for leads while creating an offline conversion action, under Goals, then Summary. The Customer data terms sit under Goals, then Settings. The diagnostics report opens from the action’s status and shows whether customer data arrives.
Sources (5)
All checked on 14 October 2026.
- Google Ads Help, About enhanced conversions for leads
- Google Ads Help, Configure the Google tag for enhanced conversions for leads
- Google Ads Help, About offline conversion imports
- Google Ads Help, Guidelines for importing offline conversions
- BlazeByte client audit reports, named with permission: Killian’s HVAC and Toolab (May to July 2026).


