Enhanced Conversions attach a hashed email, phone or address to a Google Ads conversion so Google can match it to a signed-in user and recover conversions that cookies alone miss. In 2026 the feature was simplified: one setting instead of two products, data accepted from tags, uploads and API at the same time, and uploads routed through the Data Manager API. This guide covers the current setup end to end.
The 2026 Timeline
- April 2026: Google Ads accepts user-provided data from website tags, Data Manager and API connections simultaneously.
- June 2026: Enhanced Conversions for web and Enhanced Conversions for Leads become a single on or off setting at account level, with opt-out per conversion action.
- June 15, 2026: Offline conversion imports and Enhanced Conversions for Leads uploads move to the Data Manager API and are blocked in the Google Ads API. Anyone with scripts uploading through the Ads API needs to migrate.
Part 1: Enhanced Conversions for Web Through GTM
Step 1: Turn the setting on
In Google Ads, Goals, then Conversions, then Settings, turn on Enhanced conversions and accept the customer data terms if prompted. In 2026 this single switch covers web and leads. You can still disable it per conversion action.
Step 2: Push customer data to the dataLayer
At the moment of conversion, the page must expose the customer's details. On an order confirmation page, a form success event or a booking confirmation:
window.dataLayer.push({
event: 'purchase',
ecommerce: { transaction_id: '10234', value: 129.90, currency: 'USD', items: [] },
user_email: 'name@example.com',
user_phone: '+15551234567',
user_first_name: 'Name',
user_last_name: 'Surname',
user_street: '1 Main St',
user_city: 'Austin',
user_region: 'TX',
user_postal_code: '78701',
user_country: 'US'
});
Email alone is enough to start. Phone and address raise the match rate.
Step 3: The User-Provided Data variable
In GTM, create a variable of type User-Provided Data. Choose Manual configuration and map each field to a Data Layer Variable: Email to {{dlv - user_email}}, Phone to {{dlv - user_phone}}, and the name and address fields if available. The variable normalises and hashes the values.
Alternatives: Automatic collection lets the tag find fields on the page by itself, which is convenient and fragile; Code lets the page provide an already hashed object. Manual configuration from the dataLayer is the most reliable.
Step 4: Attach it to the conversion tags
Open each Google Ads Conversion Tracking tag, enable Include user-provided data from your website, and select the variable. Save and publish.
Step 5: Verify
In GTM Preview, fire a conversion and inspect the Google Ads request in a tag debugger such as the Insighter Debugger extension. You should see hashed user data parameters alongside the conversion label. After a few days, open the conversion action in Google Ads and check Diagnostics for the Enhanced conversions status and match rate. Anything above roughly 70 percent is healthy for a form; purchases with full details go higher.
Part 2: Enhanced Conversions for Leads
This is the flow for crediting what happens after the lead: a qualified call, a signed contract, a closed deal.
Step 1: Capture the identifier at the lead
When the form is submitted, the Google Ads conversion tag for the lead sends the hashed email through user-provided data, exactly as in Part 1. Google stores the hash against the click. In parallel, store the email and the submission timestamp with the lead in your CRM. No click ID is required, although storing the gclid as well does no harm.
Step 2: Create the offline conversion action
In Google Ads, create a conversion action with source Import from clicks, with Enhanced Conversions for Leads enabled on it. Set the window to match your sales cycle, up to 90 days, and decide whether the value comes from the upload.
Step 3: Upload outcomes through Data Manager
When a lead becomes qualified or closed, upload a row with the hashed or raw email, the conversion name, the conversion time and optional value and currency. Since June 15, 2026 uploads go through Data Manager, either in the Google Ads interface under Data Manager with a scheduled Google Sheet or file, or through the Data Manager API from your CRM or a connector. HubSpot, Salesforce and GoHighLevel integrations have been updating to the new path; confirm yours has.
Step 4: Verify
Data Manager shows each upload's processed rows and match rate. The conversion action's Diagnostics shows whether conversions are recording. Compare the number of uploaded outcomes with the number of attributed conversions; the gap is leads whose original click was not a Google Ads click, which is expected.
Normalisation Rules
Hashing happens automatically in GTM and in Data Manager, but the input must be clean:
- Email lowercase, trimmed. Gmail dots and plus aliases are not stripped by Google, so store the email as the user typed it, lowercased.
- Phone in E.164 format with country code, no spaces or symbols.
- Names lowercase, no punctuation. Addresses lowercase, postal code without spaces where the country uses them.
Common Problems
- Match rate zero. The User-Provided Data variable is attached but the dataLayer keys are empty at the moment the tag fires. Check event order in Preview.
- Status shows needs attention. The conversion tag is firing without user data on most conversions, usually because the form success event does not carry the email.
- Uploads rejected after June 2026. Still using the Google Ads API path. Move to Data Manager.
- Duplicate conversions. Web conversion and offline upload for the same action with the same conversion name. Use distinct conversion actions for lead and qualified lead.
Outcome
Every Google Ads conversion carries a hashed identifier, more of your real conversions are attributed, and the outcomes that happen after the form can be fed back to the account through a supported path. Smart Bidding gets the complete picture, which is the whole reason to do any of this.
