Google Ads is collapsing Enhanced Conversions for web and Enhanced Conversions for Leads (ECL) into a single on/off toggle, with multi-source ingest (gtag + Data Manager + Google Ads API) accepted simultaneously. Every EC setup guide written before April 2026 is now structurally wrong — and the most expensive audit miss is leftover EC tags firing alongside Data Manager uploads, double-counting the same conversion into Smart Bidding.
What the unification means + benchmark
Before April 2026, an advertiser picked ONE Enhanced Conversions implementation per conversion action: either Google tag, Google Tag Manager, or Google Ads API. ECL was a separate product with its own toggle, terms, and diagnostics report. Starting April 2026, Google Ads accepts user-provided data from website tags (gtag/GTM), Data Manager connectors (BigQuery, HubSpot, Shopify, Google Drive, Salesforce), and API connections (the new Data Manager API plus the legacy ConversionUploadService) all at the same time (PPC Land, 2026-04-12). From June 2026, the method-selection UI is removed entirely and EC + ECL collapse into a single toggle at the account level (Goals → Settings → Customer data use) and per conversion action (Search Engine Land, 2026-04-10).
Two follow-on deadlines shape the audit:
- June 15, 2026 — new developer tokens are blocked from
ConversionUploadService.UploadClickConversions; new offline import integrations must use the Data Manager API (PPC Land, 2026-05-18). - December 2025 — Data Manager API became the primary first-party ingestion endpoint across Google Ads, GA4, and DV360, with a unified schema and OAuth scope distinct from the Google Ads API.
Operational benchmark: in a clean post-unification setup, a conversion action's Receiving diagnostic should list ≤ 1 active path per signal type unless deduplication keys are present on every path. Anything else is a double-count risk.
Top causes (ranked by audit frequency)
- Legacy gtag EC still firing after Data Manager API rollout — most common. Marketing migrated lead measurement to the Data Manager API in Q1 2026; nobody removed the original gtag EC snippet from the form thank-you page. Result: same lead lands twice.
- ECL-only configuration treated as "EC enabled" — accounts where only Leads was turned on, web EC was never set up, and auditors mark the account "EC done" without realising web-side conversions are still bare gclid.
- Web-EC-only configuration with no leads pipeline — inverse case. EC enabled on the website purchase action; the form-fill conversion action has no Customer Data path at all, so CRM-uploaded closed-won values arrive without user-provided data matching keys.
- Auto-migrated stack with no deduplication keys — Google's June 2026 auto-migration preserves whatever was active. If gtag EC fires without an event ID AND Data Manager uploads the same event without
order_id, Google cannot dedupe; Smart Bidding sees inflated signal. - Stale Data Processing Terms acceptance — accounts that accepted older customer-data terms but lost admin who agreed; new toggle silently inactive on at least one ingest path.
- Multiple API integrations from agency + in-house team — ConversionUploadService still running from the agency stack while in-house engineers stand up Data Manager API uploads. No single owner mapping which path covers which conversion action.
- ECL diagnostics interpreted as account-wide health — the legacy ECL diagnostics report only covered the Leads path; once unified, it no longer reflects web-side match rate, but auditors keep citing it.
Diagnostic checklist
Run top-down per conversion action — fixing a path while another duplicates the same event just shifts the over-count.
| # | Check | Where in UI / API | Threshold |
|---|---|---|---|
| 1 | Unified EC toggle state (account level) | Goals → Settings → Customer data use | ON + Data Processing Terms accepted by a current admin |
| 2 | Per-conversion-action ingest paths | Goals → Conversions → action → Diagnostics | List EVERY active path: gtag, Data Manager connector, API |
| 3 | Deduplication key on each path | gtag: transaction_id; Data Manager: order_id; API: order_id | Same key value on every path for the same event, or only ONE path active |
| 4 | ConversionUploadService still in use? | Google Ads API call logs / agency runbook | If yes, plan Data Manager API migration before June 15, 2026 |
| 5 | Match rate per ingest path | Conversion action → User-provided data column | ≥ 50% match for web EC; ≥ 30% for CRM-sourced ECL (per Google) |
| 6 | Cross-check with GA4 same-event count | GA4 → Conversions for the same date range | Google-Ads-reported count > GA4 count by >20% → duplication suspect |
| 7 | Ownership map for every ingest path | Internal doc / Whitead audit notes | Each path has a named owner; if not, disable |
Fix paths
Order matters — disable duplicate paths before chasing match-rate improvements, or you will tune a signal that is already inflated.
Inventory every ingest path per conversion action. For each
conversion_action_id, list: (a) gtag/GTM tags firing today, (b) active Data Manager connectors, (c) API integrations (new Data Manager API and any survivingConversionUploadServicejobs). Treat any path without a named human owner as a candidate for removal.Pick a primary path per signal type and add deduplication keys everywhere else. A clean shape: web purchases via gtag with
transaction_id; offline closed-won via Data Manager API with matchingorder_id. Where two paths must coexist temporarily, both MUST carry the same key value; Google auto-dedupes onorder_id + conversion_action_id(Google Ads Help — About offline conversion imports, 2026).Disable redundant paths. If gtag EC was carrying the form-fill before ECL went live, and the form is now covered by Data Manager API uploads from the CRM, REMOVE the gtag user-provided-data snippet from the thank-you page. Do not rely on Google's dedupe alone — it requires the key to be present and identical.
Re-baseline 14 days after each change. Smart Bidding consumes whatever volume arrives; cutting a duplicate path will look like a conversion drop. Annotate the campaign and hold bid changes until 14d of clean data — see Smart Bidding learning phase.
Migrate any surviving
ConversionUploadServicejobs to the Data Manager API. New developer tokens are blocked fromUploadClickConversionsfrom June 15, 2026; existing tokens get temporary access during migration but the schema and OAuth scope differ — budget for engineering time.Re-accept Customer Data Terms with a current admin. If the user who accepted terms in 2024 no longer has Admin access, re-accept under the unified panel; the toggle is silently inactive otherwise. See fix-admin-access-excessive for the governance side.
Update the audit runbook. Replace any pre-April-2026 EC instructions in your team's wiki. The method-selection screen no longer exists; cite the unified panel path instead.
Methodology note. Whitead's enhanced_conversions_unified check fans out per conversion action and enumerates every active ingest path via the Google Ads API conversion-action diagnostics endpoint plus a GTM container scan (when GTM credentials are connected). The rule flags a conversion action when ≥ 2 ingest paths are active AND a deduplication key is missing on ≥ 1 path. Severity tiers: 2 paths with full dedup keys (advisory), 2 paths with one key missing (high), ≥ 3 paths without a single owner (critical). The fix-priority logic surfaces the path-without-owner first because that path is the most likely to be silently double-counting and the cheapest to disable. The check explicitly does NOT recommend disabling Data Manager API uploads in favour of legacy paths — the deprecation timeline makes that the wrong direction.
When to escalate
Escalate the account for measurement-architecture review (not a tactical fix in the UI) when:
- Conversion actions show ≥ 3 active ingest paths AND each is owned by a different team (agency, in-house engineering, marketing ops) — needs an ownership-map meeting before any path is disabled, otherwise you will break a reporting downstream nobody documented.
- Google Ads reported conversion count exceeds GA4 conversion count by >30% on the same goal for 14 days AND match rates look healthy on every path — duplication is structural and Smart Bidding has likely already learned on inflated signal; pause bid-strategy changes until cleaned up, then re-enter the learning phase deliberately.
- Any surviving
ConversionUploadServicejob still serves new lead measurement after May 2026 — engineering decision, not Ads UI; the June 15 cutover blocks new tokens and your in-house API client may not survive the schema migration without dev work.
Related concepts
- Enhanced Conversions — the core glossary for what EC is and how user-provided data is hashed and matched.
- Enhanced Conversions for Leads — the now-merged sibling product; cite for the pre-unification lead pipeline.
- Offline conversion import — the broader OCI playbook; Data Manager API is now the primary ingestion path.
- Conversion tracking — the parent concept; EC is one of three measurement layers on top of it.
- fix-enhanced-conversions-not-enabled — the finding article triggered when no EC path is active anywhere on the account.
- Data-driven attribution — DDA accuracy depends on clean, deduplicated conversion signal; this playbook is upstream.
- GA4 → Google Ads import — pair this audit with the GA4-import audit to avoid stacking duplication on top of duplication.
Sources
- Updates to your enhanced conversions settings — Google Ads Help, 2026-04
- About enhanced conversions for leads — Google Ads Help, 2026-04
- About offline conversion imports — Google Ads Help, 2026-04
- Google Marketing Live 2026: Turn your data into decisions — Google Blog, 2026-05-05
- Google Ads simplifies enhanced conversions into a single switch — Search Engine Land, 2026-04-10
- Google Ads finally collapses enhanced conversions into a single toggle — PPC Land, 2026-04-12
- Google blocks new offline conversion imports via Ads API from June 15 — PPC Land, 2026-05-18