Raising Google Ads match quality with enhanced conversions
A practical checklist for sending hashed customer data with every conversion so Google Ads matches more of them.
On this page · 3 sections
Google Ads matches a server-side conversion to an ad click using the click ID. When the click ID has expired or was never captured, the conversion is unmatched and Smart Bidding never learns from it. Enhanced conversions fix this by sending a SHA-256 hash of data the customer already gave you, such as their email, which Google matches against signed-in users. Google Ads enhanced conversions are live in Convultra today.
The checklist
1. Turn enhanced conversions on in Google Ads
In Google Ads, enhanced conversions must be enabled on the conversion action. Go to Goals → Conversions → Settings and turn on enhanced conversions for web, with the Google Ads API as the method. Without this, Google ignores the hashed identifiers Convultra sends.
2. Turn the toggle on in Convultra
Open Integrations, open the Google Ads card and switch Enhanced conversions on. The switch is on the Value and matching step of the setup wizard. If it is off, Convultra captures user data but does not include it in uploads.
3. Get customer data into every conversion
Pick whichever applies:
- WordPress with WooCommerce. The plugin hashes and sends email, phone, first name and last name with every purchase. Nothing to do.
- Custom site. Pass user data through the SDK. The simplest route is
setEnhancedUserData()as soon as you know who the customer is, orenhance()right after the conversion call. See Enhanced conversions in the SDK. - Server-side events. Include a
user_dataobject withemail,phone,firstNameandlastNamewhen you POST to the tracking endpoint. Convultra hashes it before forwarding. - Nothing in code yet. Enable Detect user data in conversion payloads under Settings → Tracking → Enhanced conversions. If your conversion payloads already contain fields like
email, Convultra flags them as Enhanced-eligible. Turn on Forward auto-detected user data to ad platforms when you are happy with what it found.
4. Send the strongest identifiers
Email is the strongest signal, then phone. First and last name, and address, improve confidence when combined with one of those. At minimum send email or phone. Normalize before sending where you can: lowercase, trimmed email; phone in international format with the country code.
5. Confirm capture before you look at Google
Open Conversions and click a recent conversion. The detail drawer shows Enhanced Eligible when hashed user data is present, and says whether it came from manual user data or auto-detection. If it is missing here, Google is not receiving it either.
6. Check the upload
Open Conversion delivery in the sidebar and find the attempt. A delivered upload that was matched on hashed user data says so in its detail. The API exposes the same thing: list_conversions returns enhanced_conversion: true on rows that carried user data.
7. Give Google time
Google Ads reflects uploaded conversions within about 24 hours, and its enhanced conversions diagnostics update over several days. Judge match rate over a couple of weeks, not an afternoon.
What the data does and does not do
- It is hashed with SHA-256 before it is sent to Google or any other ad platform. The WordPress plugin hashes on your own server before sending.
- It reuses data the customer already provided. Nothing extra is collected.
- Visitors who declined tracking are never recorded in the first place, so nothing is sent for them. See consent management platforms.
- It does not change how Convultra attributes conversions in your own dashboard; it changes how many Google can match.
If match quality is still low
- The click ID was never captured. Check landing page redirects preserve
gclid,gbraidandwbraid. See Click ID persistence. - Only some conversions carry user data. Lead forms without an email field, or guest checkouts that collect it late, leave gaps. Move the data collection earlier or use
setEnhancedUserData()once you have it. - Basic Access on the Google Ads API. Uploads fail entirely rather than matching badly. See Troubleshooting.