Enable Enhanced Conversions in your Google Ads account settings, accept the Data Processing Terms, then deploy either the Google tag or a Google Tag Manager configuration with user-provided data turned on. Use a code snippet for your highest-value conversion events, since Google prioritizes that data over automatic or manual collection. Hash sensitive fields with SHA256, keep phone numbers in E.164 format, and validate everything through GTM Preview and the Google Ads diagnostics report before you trust the numbers. If leads matter more than website purchases, route them through Data Manager instead of legacy offline imports.
TL;DR:
- Most setup errors for enhanced conversions stem from missing prerequisite steps, especially account access, existing tracking, and correct data collection acceptance.
- Using the code snippet method with a dedicated developer-built user data object yields the most reliable and future-proof results.
- Validation should occur immediately after setup through GTM Preview and network inspection, with diagnostics checked after at least one full conversion cycle.
- Regular audits by senior experts, especially for high-spend accounts, significantly improve match rates and overall measurement accuracy.
Table of Contents
- What Do You Need Before Starting Enhanced Conversions Setup?
- Which Implementation Method Should You Choose?
- How Do You Set Up Enhanced Conversions With the Google Tag?
- How Do You Configure Enhanced Conversions in Google Tag Manager?
- How Do You Set Up Enhanced Conversions for Leads?
- What Are the Exact Formatting and Hashing Rules?
- How Do You Validate That Enhanced Conversions Is Working?
- What Should You Check First When Enhanced Conversions Fails?
- Why Enterprise Accounts Need a Structured Enhanced Conversions Workflow
- Get Your Enhanced Conversions Setup Audited by Senior Google Ads Experts
- Where to Find the Official Setup Documentation
- Sources
What Do You Need Before Starting Enhanced Conversions Setup?
Rework is the enemy here. Most botched enhanced conversions setup projects trace back to skipping a prerequisite, not to a coding mistake. Before you touch any tag configuration, confirm four things are actually true in your account.
First, verify you have admin or standard access to the Google Ads account and that your conversion actions already exist and are firing correctly on their own. Enhanced Conversions augments existing conversion tracking; it doesn’t create it from nothing. Second, confirm a Google tag or a Google Tag Manager container is deployed sitewide, not just on a handful of pages. Gaps in tag coverage show up later as mysteriously low match rates that have nothing to do with your enhanced conversions configuration.
Third, and this trips up more accounts than anything else: you must formally accept the Google Ads Customer Data Terms at the account level. This isn’t a checkbox buried in a settings menu you can ignore. Google requires explicit confirmation that you’ll comply with its data processing policies before it will let you collect and hash any customer-provided data. Skip this step and your configuration will silently fail to activate no matter how clean your code is.
Fourth, know your data fields going in:
- Email address is the preferred field and produces the strongest match rates on its own.
- If you don’t have email, full name plus postal code plus country works as a substitute.
- Phone number alone isn’t accepted. It must be paired with either an email address or a full name and address, and it has to be formatted in E.164 (a plus sign, country code, then the number with no spaces or dashes).
Pro Tip: Keep sending the GCLID (Google Click Identifier) alongside your conversion data even after enhanced conversions is live. Google still uses it as a primary matching signal, and combining GCLID with hashed user data produces noticeably higher match rates than either one alone.
If your baseline tracking has gaps, fix those first. Our guide on setting up Google Ads conversion tracking properly covers the groundwork this feature depends on.
Which Implementation Method Should You Choose?
Google gives you three ways to feed enhanced conversions data into the system, and they are not interchangeable in terms of reliability.
Automatic detection scans your checkout, lead form, or confirmation pages and tries to identify email, name, and address fields on its own using common HTML patterns. It requires zero developer time and works reasonably well on standard forms built with common frameworks. The catch: it’s a best-effort guess, and it can misfire on custom-built forms, multi-step checkouts, or sites where field names don’t follow conventional patterns.
Manual CSS selectors or JavaScript variables let you point Google directly at the DOM element or variable holding each piece of user data. This closes the gap automatic detection leaves open, particularly on non-standard forms, but it requires someone comfortable identifying selectors in browser DevTools, and those selectors break if a developer redesigns the page.
Code snippet implementation means you build and pass the user_data object directly in code at the moment of conversion. Google explicitly prioritizes code snippet data over what it collects through automatic or manual configuration, because it’s the most precise and least prone to detection errors. It requires developer involvement, but it’s the only method that survives a site redesign without breaking silently.
- Automatic detection: fastest to deploy, weakest guarantee of accuracy.
- Manual selectors: a solid middle ground for non-standard but stable page structures.
- Code snippet: highest accuracy, prioritized by Google, requires developer resources.
The practical answer for most accounts isn’t to pick one. Turn on automatic detection sitewide so you get baseline coverage everywhere, then build a code snippet specifically for your highest-value events, whether that’s a completed purchase, a demo request, or a signed contract. This hybrid approach means you’re never missing coverage while still giving Google the cleanest possible signal on the conversions that actually move your account’s bidding performance.
How Do You Set Up Enhanced Conversions With the Google Tag?
If your site runs a Google tag directly rather than through Tag Manager, the setup happens almost entirely inside the Google Ads interface.
- Navigate to Goals (or Conversions) in the left-hand menu, then click Settings.
- Find Enhanced conversions and click into it. You’ll see a toggle to turn the feature on.
- Flip the toggle, and Google will immediately prompt you to accept the customer data terms. Accept them. Without this step nothing downstream activates.
- Choose Google tag as your data source when prompted for a method.
- Pick your collection method: Automatic, Manual, or Code snippet, in the tag details panel.
- If you selected automatic, Google will scan the pages where your tag fires and attempt to detect user data fields on its own. Spot check a few conversion pages afterward to confirm it actually found something.
- If you selected manual, you’ll need to supply CSS selectors for each relevant field (email, phone, name, address components). Pull these directly from your page’s HTML using Chrome DevTools.
- If you selected code snippet, Google gives you a JavaScript object structure to populate with hashed or plaintext user data at the point of conversion, which your developer inserts into the conversion event code.
The choice between manual and code snippet often comes down to how stable your form markup is. A form that hasn’t changed in two years is a fine candidate for manual selectors. A checkout flow your dev team touches every sprint needs the code snippet, because a selector change breaks silently and you won’t notice until your match rate craters weeks later.
- Automatic works best on marketing-standard lead forms and ecommerce checkouts built on major platforms.
- Manual selectors fit stable, custom-built forms where a developer can grab selectors once and walk away.
- Code snippet is the right call for any event tied directly to revenue or pipeline value.
Pro Tip: Don’t configure enhanced conversions and walk away. Open the page in an incognito window immediately after setup, complete a test conversion, and check the network tab in DevTools for the outgoing request. If you don’t see hashed values in the payload, something upstream is broken, and it’s far easier to catch that now than after two weeks of degraded reporting.
Once configured, give it a real test before trusting the data. Submit a test conversion, then check the Google Ads enhanced conversions diagnostics report for a match rate above zero and no field-level errors flagged. A completely blank diagnostics report almost always means the tag never fired the enhanced conversions payload in the first place, not that the data quietly matched with zero issues.
How Do You Configure Enhanced Conversions in Google Tag Manager?
Most enterprise accounts run tags through Google Tag Manager rather than a native Google tag, and the setup path differs enough to deserve its own walkthrough.
- Confirm the Google tag itself is already deployed inside your GTM container and pointed at the correct Google Ads destination account. If you’re managing multiple ad accounts, double check you’re editing the right tag.
- Open the Google tag configuration and locate Additional Settings, then find the section for user-provided data.
- Toggle on Allow user-provided data collection. Without this enabled at the tag level, nothing you configure elsewhere in the container matters.
- Decide how you’ll supply the data: either let GTM auto-detect it, define CSS selectors manually, or build a dedicated User-Provided Data variable using a Custom JavaScript variable that returns the structured object.
- If building the variable manually, structure it to return an object with keys like email, phone_number, and address fields, matching the exact format Google expects.
- Add this variable to the relevant conversion event tag, referencing it in the tag’s user-provided data field.
- Deploy a Conversion Linker tag across your container if it isn’t already present. This captures first-party click data that enhanced conversions relies on alongside the user data you’re now passing.
- Publish the container to a test environment, or use Preview mode rather than pushing live immediately.
- Verify the Google tag’s Ads destination matches the account you’re troubleshooting, since duplicate or legacy tags are a common source of confusion in mature containers.
- Build the User-Provided Data variable as its own reusable component rather than hard-coding it into every tag, so future conversion events can reuse it without rebuilding the logic.
- Always add a Conversion Linker tag if your container doesn’t have one; enhanced conversions performs measurably worse without it.
Testing in GTM Preview is where you catch problems before they hit live traffic. Trigger the conversion event in Preview mode, click into the tag that fired, and look at the Variables tab for the user-provided data object. You should see actual populated values, not “undefined” or an empty object. If it’s empty, the variable isn’t pulling from the right DOM element or the automatic detection isn’t finding the form fields you expect.
Pro Tip: Chrome DevTools tells you more than GTM Preview ever will. Open the Network tab, filter for requests to google-analytics.com or googleads.g.doubleclick.net, and inspect the payload directly. If the hashed email field shows up as a 64-character hex string, your hashing pipeline is working. If it’s plaintext or missing entirely, you’ve found your bug in about thirty seconds.
How Do You Set Up Enhanced Conversions for Leads?
Enhanced conversions for leads solves a different problem than the web version. Instead of matching data at the moment someone converts on your site, it strengthens conversions that happen off-site, days or weeks later, when a sales team closes a deal that started as a form submission or phone call.
This is an upgraded version of the older offline conversion import process, and Google recommends every account still running legacy offline imports migrate over. The mechanics look similar, since you’re still uploading conversion data tied to a lead, but enhanced conversions for leads adds hashed user-provided data to the match, which meaningfully improves attribution accuracy compared to matching on GCLID alone.
Google supports three upload paths: Data Manager, the Google Ads API, and select third-party integrations (CRM platforms with native connections). For most marketing teams without dedicated engineering resources, Data Manager is the more manageable route, since it handles scheduling and field mapping through a UI rather than requiring custom code.
Whichever path you use, your upload needs these fields:
- GCLID (when available; it’s the strongest matching signal you can provide).
- Conversion action name, exactly matching what’s configured in your account.
- Conversion time, in the correct timezone format Google expects.
- Consent status for the lead’s data collection.
- Optional but valuable: order ID and session attributes, which help disambiguate duplicate leads.
If you’re building this through the API, Google’s own developer guidance recommends including GCLIDs whenever available, importing every event even when a GCLID is missing, and setting partialFailure to true. That last setting matters more than it sounds. Without it, one malformed row in a batch upload can silently fail the entire batch instead of surfacing which specific record had the problem.
Don’t swap your primary conversion action the day you go live. Run the new upload alongside your existing setup for at least one full sales cycle, confirm the match rate and volume look reasonable in diagnostics, and only then make it primary. Our deep dive on tracking offline conversions in Google Ads walks through the legacy-to-enhanced migration sequence in more detail.
What Are the Exact Formatting and Hashing Rules?
Google’s code snippet expects specific key names, and getting them wrong is the single most common reason a technically “working” implementation still returns a zero match rate.
The core keys, per Google’s own reference, are:
email(plaintext) orsha256_email_address(pre-hashed).phone_number(plaintext, E.164 format) orsha256_phone_number(pre-hashed).addressobject containingfirst_name,last_name,postal_code, andcountry, all required together when address is used as the identifying field set.
Phone numbers must follow E.164: a plus sign, country code, then subscriber number with no spaces, parentheses, or leading zeros. A US number reads as +15551234567, not (555) 123-4567 or 555.123.4567. Feeding an unformatted number into the field is the single fastest way to get a rejected row.
On hashing: you have a choice. Send plaintext values and let Google normalize and hash them automatically, or hash them yourself before sending using hex-encoded SHA256. Pre-hashing gives you more control, which matters if your CRM or backend already has a hashing pipeline you trust, or if you have compliance requirements about plaintext data never leaving your server. Letting Google handle it is simpler and reduces the chance of a formatting mismatch between your hash and what Google expects.
Pro Tip: If you pre-hash, lowercase and trim whitespace from the value before hashing. Google normalizes case and whitespace on its end before hashing plaintext, so if you hash "John@Email.com " with the capital J and trailing space, your hash won’t match what Google would have produced, and the record silently fails to link.
For records with multiple identifiers, you can pass arrays of emails or phone numbers rather than a single value, which raises match potential when a customer has more than one email on file.
How Do You Validate That Enhanced Conversions Is Working?
Don’t wait weeks to find out your setup was broken from day one. Validate immediately, in this order:
- Open GTM Preview, trigger a test conversion, and check the Variables tab for the
user_dataobject. Confirm it holds actual values, not blank fields or the literal word “undefined.” - Open Chrome DevTools’ Network tab during that same test conversion and inspect the outgoing request payload. You should see hashed strings (64-character hex for SHA256) or correctly formatted plaintext, depending on your hashing choice.
- Wait for real conversion volume to accumulate, then check the Google Ads enhanced conversions diagnostics report inside the conversion action settings. It reports your match rate and flags specific field-level errors, like malformed phone numbers or missing required address components.
Google states you should expect one to two full conversion cycles, or up to roughly four weeks, before signal improvements show up clearly in bidding performance. Don’t panic if week one looks unchanged. Panic if week four still shows a zero match rate, because that means something in the pipeline never worked.
What Should You Check First When Enhanced Conversions Fails?
Work through failures in this order rather than guessing randomly, since most problems trace back to one of five things:
- Confirm account-level acceptance of the customer data terms actually went through; re-check the Enhanced Conversions settings toggle.
- Confirm the Google tag or GTM container is actually deployed on the page where the conversion fires, not just on the homepage.
- If using a variable, confirm it’s returning populated data in GTM Preview, not an empty object.
- If using manual selectors, re-verify them against current page HTML. A redesign or A/B test variant often changes the DOM structure without anyone updating the selector.
- Check phone and address formatting against Google’s exact requirements. A missing country code or an incomplete address object is the most common single-field error in the diagnostics report.
If the diagnostics report shows a specific field error (like “invalid phone format”), the fix almost always lives in your data formatting layer, not in GTM logic. If it shows zero data received at all, the problem is upstream: the tag isn’t firing, or user-provided data collection isn’t toggled on. Fix formatting issues yourself in GTM; loop in a developer when the fix requires touching the site’s underlying form code or backend hashing pipeline. If diagnostics stay blank after a full conversion cycle with no clear cause, that’s the point to open a case with Google Ads support rather than keep guessing.
Pro Tip: *Keep a simple log of every conversion action’s match rate the first time you check diagnostics.
Why Enterprise Accounts Need a Structured Enhanced Conversions Workflow
Across the $40 million-plus in ad spend North Country Consulting has managed, the accounts with the strongest bidding performance are the ones where enhanced conversions setup was treated as infrastructure, not a one-time checkbox. That distinction shapes how we prioritize the work.
We install a code snippet on any conversion action tied directly to revenue or qualified pipeline, full stop, because Google’s own guidance confirms that data gets prioritized in the matching algorithm. Automatic detection stays in place as a safety net for lower-priority events where developer time isn’t worth the marginal accuracy gain. At scale, we validate not just at launch but on a recurring cycle, since form redesigns and CRM migrations break selectors and field mappings without anyone flagging it to the marketing team.
Feeding accurate signal into bidding is directly tied to the account performance our clients see, and our average 8.7x return on ad spend reflects accounts where measurement was rebuilt correctly before the bidding strategy was touched. If your setup hasn’t been audited in over a year, a free strategy audit will tell you exactly where the gaps are.
— Eric
Get Your Enhanced Conversions Setup Audited by Senior Google Ads Experts
If you’ve read this far and you’re still not confident your match rate is where it should be, that’s the exact gap North Country Consulting exists to close. We don’t hand your account to a junior account manager running a checklist. Every implementation, from code snippet placement to Data Manager migration, goes through senior-led review, because a single misformatted phone field or a missing Conversion Linker tag can quietly suppress your match rate for months before anyone notices.

For accounts spending $25,000 or more a month, we handle the full measurement rebuild: enhanced conversions for web and leads, offline import migration, call tracking integration, and the attribution modeling that actually reflects how your bidding strategy should weight each conversion type. That’s the difference between a tag that technically fires and a measurement setup that gives Google’s bidding models a clean signal to optimize against. Request a free strategy audit and we’ll show you exactly where your current setup is leaking match rate, and what fixing it would mean for your account’s ROAS.
Where to Find the Official Setup Documentation
Bookmark these before you start building anything, since the setup steps and field requirements change periodically:
- Enhanced conversions for web using the Google tag for the core in-account toggle, method selection, and code snippet reference.
- Enhanced conversions for web using Google Tag Manager for container-level configuration and diagnostics timing.
- About enhanced conversions for leads for offline import migration guidance.
- Add enhanced conversions code snippet for exact key names, phone formatting, and hashing rules.
- Upload enhanced conversions for leads via API for developer-facing upload samples and partial-failure handling.
- Google Ads Customer Data Terms for the compliance language you’re accepting when you enable the feature.
Sources
- Set up enhanced conversions for web using the Google tag – Google Ads Help
- Set up enhanced conversions for web using Google Tag Manager – Google Ads Help
- About enhanced conversions for leads – Google Ads Help
- Add enhanced conversions code snippet – Google Ads Help
- Upload enhanced conversions for leads – Google Ads API Samples – Google Developers
