Browse help topics
Set up enhanced conversions with Velo.
Turn on enhanced conversions in Google Ads, send hashed contact details from your forms only with consent, and prove it works with a test form submission.
How enhanced conversions follow consent
Enhanced conversions add a hashed copy of contact details that the visitor typed in, such as an email address, to your Google Ads conversion. Google uses it to match the conversion to an ad click when cookies are missing or the visitor switched devices.
The Google tag sends this data only when the ad_user_data signal is granted. Velo grants ad_user_data, together with ad_storage and ad_personalization, when the visitor allows the Advertising category. In regions where Velo asks before tracking, it stays denied until then. A browser that sends Global Privacy Control is treated as a refusal of advertising.
The Google tag collects and hashes the contact details. Velo only sets the consent signals that decide whether the tag may send them.
Before you start
- Velo is installed and Consent Mode works. Check it with the Tag Assistant test.
- A Google Ads conversion fires when the visitor completes your form, signs up or buys, for example on the thank-you page.
- The email address or phone number is available on the page when that conversion fires.
- You can edit Google Ads goals, and publish your GTM container or edit your website code.
- Your privacy notice says that you share hashed contact details with Google for advertising measurement. Check the wording with whoever advises you on privacy.
Turn it on in Google Ads
- In Google Ads, open Goals → Settings.
- Expand Customer data use. In older accounts, the panel is called Enhanced conversions.
- Select Turn on enhanced conversions, read the customer data terms and agree to them.
- Save.
Since 2026, one setting covers enhanced conversions for web and for leads, and Google Ads accepts data from the Google tag, GTM and Data Manager at the same time. If your account still asks for a method, choose the one you use below: Google Tag Manager or Google tag.
Set it up in Google Tag Manager
GTM can find the contact details in three ways:
- Automatic collection looks for an email address or phone number on the page. It is the quickest, but the least reliable.
- Manual configuration reads CSS selectors or JavaScript variables that you name, one per field.
- Code reads an object that your website pushes to the data layer. It is the most reliable.
- Open the Google Ads Conversion Tracking tag for the conversion, such as your lead or purchase tag.
- Select Include user-provided data from your website.
- Under User-provided data, choose New Variable and pick one of the three ways.
- Keep the tag’s consent settings as they are. Google Ads tags have built-in consent checks, so they follow the signals Velo sets without extra settings.
- Do not add a
velo_consent_updatetrigger to a conversion tag. It would count a conversion each time a visitor makes a choice. - Preview, then publish the container.
For the Code option, push the details when the form is sent, then read user_data with a Data Layer Variable and select it in the User-Provided Data variable.
dataLayer.push({
event: 'generate_lead',
user_data: {
email: formEmail,
phone_number: '+34600000000'
}
});Set it up with the Google tag in your code
With the Google tag installed directly, go back to Goals → Settings in Google Ads. If it shows Tag details, choose automatic detection or CSS selectors there. Otherwise, set the data in your code before the conversion event.
<script>
gtag('set', 'user_data', {
email: formEmail,
phone_number: '+34600000000'
});
gtag('event', 'conversion', { send_to: 'AW-XXXXXXXXX/XXXXXXXXXX' });
</script>Send plain values and let the tag hash them, or hash them yourself with SHA-256 after removing spaces and changing the text to lower case. Leave out fields you do not collect. Keep the Velo snippet above the Google tag, as shown in Installing the snippet, so the tag reads the consent defaults first.
Test it with a form submission
Submit your own form twice, once accepting advertising and once refusing it. Use an email address you own, and tell your team, because the test may reach your CRM or inbox.
Test 1: accept advertising
- Open the published website in a private window and choose Accept all in the Velo banner.
- Open the browser’s developer tools, go to Network and type
conversionin the filter. - Fill in the form with your test address and send it.
- Click the request to
googleadservices.com/pagead/conversion/orgoogle.com/pagead/1p-conversion/, and open Payload. - Find the
emparameter. It should start withtv.1~emand continue with a long string of letters and numbers. That string is the hashed address.
Test 2: refuse advertising
- Open a new private window and choose Reject in the Velo banner.
- Send the form again with your test address.
- Either no conversion request appears, or it appears without the long hashed string after
tv.1~em. Both mean the contact details stayed in the browser.
With GTM, you can also run both tests in Preview. Select the conversion event in Tag Assistant and open Consent: ad_user_data should read Granted in the first test and Denied in the second.
About 72 hours later, open Goals → Summary in Google Ads, select the conversion action and check its Diagnostics for enhanced conversions.
Send a test form with the side panel open, and the Velo Chrome extension will show whether the conversion carried hashed data and which consent it was sent with. Join the waitlist to hear when it is ready.
If something does not look right
The em parameter stops at tv.1~em.
The tag fired before the contact details were available, often because the form redirects first. Push the details to the data layer when the form is sent, or keep them on the thank-you page, and fire the conversion after that.
There is no em parameter after accepting.
Enhanced conversions are off in Google Ads, the terms are not accepted, or Include user-provided data from your website is not selected on the tag. Also check in Tag Assistant that ad_user_data was granted when the conversion fired.
The hashed data is sent after a rejection.
The Google tag probably starts before Velo or has its own consent defaults. Follow Resolve unexpected consent states, then repeat the test.
Diagnostics still shows no data after a few days.
Diagnostics needs real conversions from visitors who accepted advertising. Check that the conversion action you edited is the one your tag sends to, and that the conversion is not imported from Google Analytics, which enhanced conversions do not support.