LAB LIVE
SCANNING409 CAMPAIGNS
ANOMALIES15 FLAGGED
AVG LIFT+4.45× ROAS
Google Ads

Enhanced Offline Conversions for Lead-Gen — the Setup That Actually Feeds Smart Bidding

Every services, clinic, and B2B account we audit runs Smart Bidding on form-fill signal alone. Enhanced Offline Conversions (EOC) close the loop from lead to booked revenue — and are the single largest bidding-quality improvement available to any lead-gen account. But the checkbox in Google Ads is not the setup. The setup is a specific pipeline — gclid capture, CRM stage triggers, hashed-PII fallback, and reconciliation — and skipping any part of it makes the whole feature perform worse than plain offline imports. Here's the blueprint we run in every audit.

Alex Sterling··10 min read

A lead-gen account without EOC feeds Smart Bidding one signal: the form submit. Smart Bidding then optimises for whoever submits forms cheapest — tyre-kickers, competitor snooping, people who came from a lead magnet and never intended to buy. The clean-quality campaigns look expensive; the noisy ones look great. Six months in, the account has drifted toward the wrong audiences and the sales pipeline is drying up while the dashboard looks fine.

EOC fixes this by feeding CRM-truth back to Google Ads. When a lead becomes a qualified opportunity, a booked appointment, or a signed contract, EOC uploads the event tagged with the original click ID (or hashed user data when the click ID is missing). Smart Bidding then knows which campaigns produce real customers versus form-fills, and reallocates spend accordingly. The behavioral change in bidding is visible within 4–6 weeks; the revenue change is visible within 8–12.

EOC vs Standard OCI — What's Actually Different

Standard OCIEnhanced Offline Conversions
Match keygclid onlygclid + hashed PII fallback
Recovery when gclid missing0% — event dropped40–70% via email/phone match
iOS 14.5+ recoveryLimited to wbraid/gbraidExtends via hashed PII to iOS clicks
Setup complexityClick ID capture + upload scriptClick ID + PII collection + hashing + upload
Compliance loadLow — click ID is not PIIMedium — PII collection requires consent

EOC is a superset of OCI. Every account that currently runs OCI can turn on EOC in-place — the same upload endpoint accepts both. Accounts that haven't started should build EOC from day one; the additional PII plumbing is small compared to reimplementing it later.

The Pipeline, End to End

01
Capture click IDs on landing

Read gclid, gbraid, wbraid from URL on every page. Store in localStorage with 90-day expiry. Never rely on the URL still being intact at form submit — SPAs and multi-step funnels destroy it.

02
Capture email + phone at form submit

On submit, capture the user's email and phone from the form fields. Store as raw values in your CRM alongside the click IDs. Don't hash on the client — hash later in the upload pipeline where you can verify correctness in one place.

03
Trigger on CRM stage change, not form submit

The point of EOC is to feed qualified events back, not raw leads. Wire a CRM webhook (Bitrix24, HubSpot, Pipedrive, Salesforce) on stage transitions — Qualified, Meeting Booked, Contract Signed — and upload one EOC event per stage.

04
Hash PII correctly before upload

SHA-256, lowercase, trimmed. Phone in E.164 (+491234567890, no spaces or dashes). Email lowercased. First name / last name hashed separately. Getting the format wrong is the #1 reason EOC uploads “succeed” but match rate stays low.

05
Upload via Google Ads API within 24 hours

UploadClickConversions with the conversion action, value, currency, timestamp, and user identifiers. Same-day uploads let Smart Bidding react within its normal cadence; weekly batches starve it of fresh signal.

06
Verify match quality after 3 days

Google Ads → Goals → Conversions → your action → “Diagnostics”. Match rate should be > 70% within a week. Below 40% means the hashing is wrong or PII capture is broken.

The Two-Action Split — Qualified vs Won

Almost every lead-gen account we set up runs two EOC actions in parallel, not one. The reason is Smart Bidding's learning-signal math.

ActionPrimary?Include in Conv metric?Value strategy
Form submit (online)No (secondary)NoStatic, low (10–20 units)
SQL / Qualified (EOC)No (secondary)NoStatic, medium (100 units)
Won / Contract (EOC)Yes (primary)YesActual deal value in account currency

This structure lets Smart Bidding use the form-submit and SQL signals as learning input while optimising primarily against Won revenue. See the primary/secondary lever piece for why this configuration is the actual bidding control.

Real audit exampleA German B2B SaaS running Google Ads with only form-submit conversions. tCPA target: 45 €. Reported cost per conversion: 42 €. Business cost per signed customer: 2 800 €. We wired EOC through their HubSpot (Qualified + Won stages), waited six weeks. Smart Bidding shifted spend away from three high-volume/low-quality campaigns and toward two smaller retargeting campaigns nobody had noticed. Cost per Won: dropped from 2 800 € to 1 650 € in Q1, 1 340 € by Q2. No new campaigns, no new creative, no budget increase — just closing the signal loop.

Consent, PII, and Compliance

EOC requires user PII (email, phone) to be sent to Google, even hashed. This is a legitimate concern under GDPR and equivalent frameworks. The defensible pattern:

  • Consent Mode v2 respected — if the user denied marketing consent, don't upload EOC for that record
  • Data Processing Agreement in place with Google Ads (already covered by the standard Google Ads terms in most regions)
  • Privacy policy explicitly names Google Ads as a data recipient for measurement
  • Hashing happens server-side, never in the browser — cleaner audit trail
  • Retention: uploaded records automatically age out at Google's side after 30 days from upload; only the hash is retained for matching

Meta's CAPI has the same shape of PII flow with the same defensibility. A single consent-aware pipeline usually feeds both — see the Meta CAPI dedup piece for the mirror workflow on the Meta side.

Common Failure Modes

1. Uploading form-submit as the primary Won conversion

Some teams enable EOC but only upload the form-submit event via EOC instead of setting up the stage-triggered pipeline. That's worse than the standard online conversion — same signal, more infrastructure. EOC is only valuable when the event uploaded is CRM-truth downstream of the form.

2. Uploading raw (unhashed) PII

Google Ads accepts unhashed PII in some API paths but silently downgrades match quality. Always hash SHA-256 lowercase. The diagnostic panel will report unhashed uploads as accepted but match rate will hover around 20%.

3. Batch uploads on 7-day cadence

Smart Bidding's learning cadence is 3–7 days. Uploading offline conversions weekly means every week's bidding decisions are made without knowledge of that week's CRM outcomes. Upload within 24 hours of stage change; 6 hours is even better.

4. Not extending the click look-back window

Default click look-back is 90 days. B2B sales cycles routinely exceed this. Conversion action settings → Click through conversion window → set to your longest realistic cycle up to 540 days. Uploads for older clicks are silently rejected without this extension.

5. No reconciliation between CRM and Google Ads

Uploads succeed as HTTP 200 but individual records fail with partial_failure reasons Google returns in the response. Log every failure with the deal ID and audit weekly — otherwise you'll believe the pipeline is working when 30% of records never make it.

Audit Checklist

gclid captured to localStorage and hydrated at form submit?Open page with ?gclid=test, navigate away, submit form — hidden field should contain test.
CRM has fields for gclid, email, phone, first_touch_ts?Every record downstream of a form must retain all four for the upload pipeline to work.
CRM stage transitions trigger the upload webhook?Test with a fake deal moving Qualified → Won. Both stages should trigger uploads within 6 hours.
Hashing is SHA-256, lowercase, trimmed, phone in E.164?Manually verify against a known hash of the same input string. Match exactly.
Match rate > 70% after 7 days?Google Ads → Conversions → action → Diagnostics. Below 40% = hashing wrong or PII capture broken.
Click look-back window extended to real cycle length?Conversion action settings. Default 90 days too short for many B2B accounts.
Won action set as primary, form-submit as secondary?Campaign → Conversion goals. If form-submit is primary, Smart Bidding is still optimising against noise.
Reconciliation log capturing partial_failure per upload?Weekly review of failures — otherwise silent drops compound over months.

What Changes in the Account

Once EOC is running with clean match rate for 6–8 weeks, the account behaves differently in three visible ways. First, campaign performance starts diverging — previously-similar campaigns split into clear winners and clear losers on true revenue metrics. Second, Smart Bidding reallocates spend on its own; you'll see budgets shifting between campaigns without your intervention, following the new signal. Third, and most importantly, the gap between reported cost-per-conversion and business cost-per-customer collapses — because Google is now measuring closer to what the business measures.

EOC is one of the highest-leverage tracking upgrades available in 2026. It is not glamorous, it is not new, and the checkbox in the UI is the easy part. The real work is the CRM plumbing, the hashing, the reconciliation. Any lead-gen account without it in 2026 is running Smart Bidding half-blind — and Smart Bidding half-blind is worse than manual bidding, because it's confidently wrong. See how we approach these rebuilds inside Enhanced Conversions setup.

Alex Sterling

Alex Sterling

Founder at Sterling Lab · Enhanced Conversions & CRM ↔ ad-platform architect