How-to
Offline Conversion Tracking Explained (Click → CRM → Sale)
For anything with a sales cycle (B2B, high-ticket, lead gen), the conversion that matters doesn't happen on the website. It happens weeks later, on a call or in your CRM. Offline conversion tracking closes that loop: it ties the closed-won deal back to the ad click that started it, so Google Ads can optimize toward revenue instead of raw form fills. The whole technique rests on one thing, capturing a durable identifier at the moment of the click and keeping it attached to the lead until the deal is done.
What offline conversion tracking is
The idea is simple even if the plumbing isn't: when someone lands from an ad, capture an identifier that can later be matched back to that click, carry it with the lead into your CRM, and when the deal closes, send that outcome back to the ad platform keyed on the same identifier. The platform reconnects the sale to the campaign, keyword and creative that earned it.
There are two primary types of identifier, and a complete setup captures both. The first is a click id (Google's gclid), read straight from the landing URL. The second is enhanced conversion data: the email or phone number the lead typed into your form, hashed before it leaves the browser. The click id is precise while it lasts; the hashed email is what keeps matching after the click id is gone.
Offline conversion tracking
Connecting a conversion that happens off your website (a closed deal, a qualified call) back to the ad interaction that drove it, by capturing a durable identifier at click time, storing it with the lead, and importing the outcome back to the ad platform when it happens.
Why this matters now
gclid is a cookie value, and cookies are exactly what the privacy era is taking away. Capturing enhanced conversion data alongside it is no longer a nice-to-have, it's how offline tracking survives the cookieless future.Identifiers are the key
Every offline match comes down to one question: what identifier links this sale back to the click? Get the identifier right and everything downstream works. Lose it and the conversion is invisible, no matter how good your campaigns are. There are two families of identifier, and a resilient setup uses both.
Click IDs
Every paid click can carry an id in the landing URL. Google's gclid (plus gbraid / wbraid for iOS web and app traffic), Microsoft's msclkid, Meta's fbclid. It's precise, it points at the exact click. But it lives in a cookie, and that's its weakness.
https://example.com/landing?gclid=Cj0KCQ...AB
Enhanced conversion data
The second identifier is the first-party contact data the lead already gave you: their email, and optionally phone, name and address. Hashed with SHA-256 in the browser so the raw value never leaves the device, it becomes a privacy-safe key the platform can match against the account behind the click. It doesn't expire, it doesn't depend on a cookie surviving, and it's collected with consent. This is the identifier built for a cookieless world.
Click ID (gclid)
- Read from the landing URL
- Precise, points at one click
- Stored in a first-party cookie
- Fragile: capped lifetime, consent, ad blockers
Enhanced conversion data
- Hashed email or phone from the form
- Durable, no cookie required
- Survives long sales cycles
- Privacy-safe, consent-gated, future-proof
Stop relying on the click id alone
Why the click ID alone isn't enough anymore
It helps to be precise about what is actually breaking, because "cookieless future" gets thrown around loosely. Three separate forces shorten the life of a stored click id:
- Cookie lifetime caps. The
gclidis persisted in a first-party cookie (_gcl_aw, written by the Conversion Linker). Safari's ITP caps script-set first-party cookies at 7 days, and in some cases 24 hours. A lead that converts a month later has nogclidleft to match. - Consent rejection. Under Consent Mode v2, if a visitor denies
ad_storageyou never write thegclidcookie at all. For those users the click id simply doesn't exist, so the only identifier you can still capture is the data they type into the form. - Third-party cookie deprecation and signal loss. The broader move away from cross-site cookies, plus ad blockers and privacy browsers, means click-id coverage keeps shrinking. Planning around it now is cheaper than rebuilding later.
None of this breaks enhanced conversion data, because a hashed email isn't a cookie. It's captured at submit time, lives in your CRM record, and matches months later. That asymmetry is the whole argument: build on the identifier that lasts.
Importing conversions back
When a deal closes, the stored identifier goes back to the ad platform with the conversion name, time and value. You can key the import on the gclid (a standard offline conversion import) or on the hashed email (Enhanced Conversions for Leads). Same pipeline, different key, and the email-keyed path keeps working when the click id has expired.
- Manual upload: a CSV of identifier + conversion name + time + value.
- Scheduled import: from Google Sheets or your CRM on a recurring basis.
- Automated: a direct CRM integration (e.g. HubSpot or Salesforce → Google Ads), or the Google Ads API.
# gclid-keyed (classic offline import) Google Click ID, Conversion Name, Conversion Time, Conversion Value Cj0KCQ...AB, Qualified Lead, 2026-06-01 14:05:00, 500 # email-keyed (Enhanced Conversions for Leads, survives a lost gclid) Email, Conversion Name, Conversion Time, Conversion Value 9b2c1f...e7a, Qualified Lead, 2026-06-01 14:05:00, 500
Practice this on a real container
See how the identifier flows from the click and the form into your CRM, and how it comes back as an offline conversion, in the offline conversions reading, then practice the GTM pieces that capture it.
Read: capturing the identifier →Measuring and reconciling
Offline conversions arrive late, so reports lag, a deal that closes in week six shows up against the click from week one. Expect the delay, and reconcile uploaded conversions against your CRM's closed-won count so you trust the numbers driving your bids.
Watch your match rate, the share of uploaded conversions the platform can tie back to a click. A low match rate almost always means a lost identifier: an expired gclid with no email to fall back on, or a hashed email that wasn't normalized the same way on both sides. It's the clearest signal that you need the durable identifier doing the heavy lifting.
Putting it together
A setup that survives the cookieless future captures both identifiers on every lead, stores both on the CRM record, and imports on whichever one still matches when the deal closes. Thegclid gives you precision while it lasts. The hashed email gives you durability for everything after. Lean on the second, treat the first as a bonus, and your offline conversions keep flowing no matter what the browsers do to cookies next.
Now go practice it
Reading sticks when you do it. These hands-on lessons load your own GTM container and let you debug in Tag Assistant.
Frequently asked questions
What is offline conversion tracking?
Connecting a conversion that happens off the website (a closed deal, a qualified call) back to the ad click that started it. You capture a durable identifier when someone arrives from an ad, a click id like gclid or enhanced conversion data like a hashed email, store it with the lead in your CRM, and send the outcome back to the ad platform when the deal closes so it can optimize toward revenue.
Why isn't the gclid enough on its own anymore?
The gclid is stored in a cookie, and cookie lifetimes are shrinking. Safari caps script-set first-party cookies at around 7 days, consent rejection means no gclid is written at all, and third-party cookie deprecation keeps eroding coverage. A deal that closes weeks later can outlive the stored gclid, so you also capture the hashed email, which doesn't expire and is built for the cookieless future.
What's the difference between a click ID and enhanced conversion data?
A click id (gclid, msclkid, fbclid) is read from the landing URL and points at one exact click, but it lives in a cookie that can expire. Enhanced conversion data is the email or phone the lead submitted, hashed in the browser, which is durable, consent-gated and survives long sales cycles. Both are identifiers that match a sale back to a click; resilient setups capture both.
How do I capture and store the identifier in Google Tag Manager?
Read the gclid from the URL with a URL variable, persist it in a first-party cookie with the Conversion Linker, and write it into a hidden form field. At the same time capture the user's email (and phone), which GTM's user-provided data variable hashes with SHA-256. Store both on the CRM record so they're there when the deal closes.
How are offline conversions imported back to Google Ads?
Three common ways: a manual CSV upload of the identifier, conversion name, time and value; a scheduled import from Google Sheets or your CRM; or an automated integration such as HubSpot or Salesforce to Google Ads, or the Google Ads API. You can key the import on the gclid (classic offline import) or on the hashed email (Enhanced Conversions for Leads).
Related posts
How-to
Enhanced Conversions Explained (and How to Set Them Up in GTM)
Cookies and consent make real conversions invisible. Enhanced Conversions recover some by matching on hashed first-party data. What they are, Web vs Leads, and the GTM setup.
Read →Fundamentals
What Is the dataLayer in Google Tag Manager? A Plain-English Guide
The dataLayer is the bridge between your website and your tags. Here's what it actually is, why it exists, and how to push and read values without the jargon.
Read →Fundamentals
GTM vs GA4: What's the Difference (and Do You Need Both)?
Both come from Google, both involve a snippet, but GTM and GA4 aren't alternatives. One delivers data, the other analyzes it. The difference, and why you use both together.
Read →About the author

Analytics & Tag Management Consultant
Nathan Gage got his start in marketing through Google Tag Manager. Seeing how tracking customer behavior could turn raw clicks into insight you can actually act on is what pulled him into the field. Since then he has worked both full time and as a consultant with 15 marketing agencies, supporting brands that spend anywhere from a thousand dollars a month to over a million. Along the way he built a multi-touch attribution app, and he created The Happy Tagger so anyone can practice GTM, GA4 and server-side tracking on a real container instead of a production site.