GCLID to Salesforce: offline conversion import, step by step
This is the single highest-leverage change available to a high-ticket advertiser, and it is mostly CRM configuration rather than advertising work.
Below is the sequence in the order it has to happen. Skip step one and nothing downstream functions, which is why so many half-built implementations quietly produce nothing.
On this page
Step 1 — capture the GCLID
Read gclid from the URL on landing and persist it before the visitor does anything else.
Google appends the parameter to every ad click when auto-tagging is on — check that first, because it can be switched off and occasionally is. On landing, read the parameter, write it to a first-party cookie with a 90-day lifetime, and populate a hidden field on every form on the site from that cookie.
Do the same for phone. Your call tracking must store the GCLID against the call record, otherwise every phone enquiry becomes untraceable — which in high-ticket healthcare can be most of your pipeline.
Step 2 — store it in Salesforce
Add a dedicated field, do not improvise with an existing one.
Create a custom text field on Lead named GCLID__c, 255 characters, and map the hidden form field to it. Add the same field to Contact and Opportunity. Make it read-only in page layouts so nobody helpfully edits it.
If you use Salesforce Web-to-Lead, map the field in the form setup. If you use a form vendor, map it in the vendor's Salesforce integration. Then submit a test lead and confirm the value arrives intact — GCLIDs are long and get truncated by fields sized at 100 characters.
Step 3 — carry it through conversion
Lead conversion in Salesforce is where the value usually disappears.
When a Lead converts to Account, Contact and Opportunity, custom fields only carry across if they are explicitly mapped. Set the mapping under Object Manager, on the Lead field, using Map Lead Fields. Confirm on a real conversion that GCLID__c is populated on the resulting Opportunity, not just on the Contact.
Also handle duplicates. If your dedupe rules merge a new Lead into an existing record, decide explicitly whether the new GCLID overwrites the old one. First-touch and last-touch are both defensible; silently keeping whichever arrived first is not.
Step 4 — define the conversion action
Choose the earliest CRM stage that reliably predicts revenue and still produces enough volume for bidding to learn.
| Stage | Trade-off |
|---|---|
| Qualified Lead | Highest volume, weakest link to revenue. Use only if closed-won volume is very low. |
| Consultation attended | Usually the sweet spot in high-ticket healthcare — a real human filter, still enough monthly volume to train on. |
| Closed-Won / Paid | Truest signal, lowest volume, longest lag. Ideal where the sales cycle is short enough that Google still sees it inside the window. |
In Google Ads create the conversion action with source "Import" and category matching the stage. Set the click-through conversion window to cover your actual sales cycle — if patients take 45 days to decide, a 30-day window discards a third of your outcomes. Attach a value: the real revenue where you know it, a considered average where you do not.
Step 5 — send the data back
Three routes, in descending order of how much engineering they need.
- Salesforce through Data Manager. Connect Salesforce as a data source in Google Ads Data Manager, map stages to conversion actions, and Google pulls on a schedule. The old Linked accounts integration was retired on May 31, 2025. Least work, least flexibility.
- Scheduled upload. A CSV or Google Sheet with GCLID, conversion name, conversion time and value, on a daily schedule. Reliable, transparent, easy to debug. Google now labels file uploads legacy, but they remain the easiest route to audit.
- Data Manager API. Full control over timing, adjustments and restatements. Worth it once volume is high or the logic is genuinely complex. Since June 15, 2026 it replaces the Google Ads API for offline conversion uploads.
Whichever route, upload daily rather than weekly. Fresher outcomes mean faster learning, and conversion time must be the moment the stage was reached, not the moment you uploaded it.
Step 6 — move bidding onto it
Change the conversion goal at campaign level, then reset targets — and warn everyone first.
Set the imported action as the primary goal and demote form fills to secondary so you can still see them without bidding on them. Your target CPA now has to be expressed in cost per patient, which is a much larger number than the cost per lead everyone has been quoting.
Reported conversion volume will fall sharply. This is the correct outcome — you removed the numbers that were not real — but if nobody is warned, the first monthly report reads as a catastrophe. Give Smart Bidding 30 to 60 days to retrain before judging anything.
Where implementations break
Five failure points, all of them boring, all of them fatal.
- Auto-tagging off, so no GCLID exists to capture.
- The field truncates the value because someone sized it at 100 characters.
- Lead conversion mapping missing, so the Opportunity has no GCLID and nothing can be sent.
- Conversion window shorter than the sales cycle, so real outcomes arrive after Google stopped listening.
- Nobody warned the owner that reported conversions would drop, and the project gets cancelled in week three.
Google's documentation on offline conversions covers the mechanics; the Data Manager Salesforce guide covers the Salesforce route.
VERIFIED EXAMPLE · When I inherited a wasteful account at a luxury US healthcare clinic, this loop was the first thing built. Rebuilding bidding on verified patients imported from Salesforce cut cost per verified patient ~78% while spend scaled ~2×, with approved patients up ~9×.
Questions owners ask
How long does the whole implementation take?
Two to four weeks in most cases, and the majority of that is Salesforce configuration and testing rather than ad account work. Add another 30 to 60 days before Smart Bidding has retrained on enough imported outcomes to judge the change fairly.
What if I don't use Salesforce?
The same six steps apply. HubSpot, Zoho and custom systems all work through scheduled uploads or the Data Manager API. What you need is a field that stores the click ID against the lead and a stage that reliably marks confirmed revenue — the CRM brand matters much less than those two things.
Is sending data back to Google a HIPAA problem?
Not when it is built correctly. What leaves your systems is a click ID, a timestamp, a conversion name and optionally a value. No name, no contact details, no clinical information. That is materially safer than the pixel setups most clinics already run, which frequently do expose health interest through URLs and form fields.
Will my conversion numbers drop?
Yes, and sharply. You are replacing form fills with confirmed outcomes, so a report showing 140 conversions might show 30. The number that should improve is cost per confirmed patient. Set that expectation with everyone who reads the report before you go live, not after.
What conversion window should I use?
Long enough to cover your actual sales cycle, measured from your CRM rather than assumed. If patients typically decide over 45 days, a 30-day window silently discards a third of your outcomes and makes the whole exercise look ineffective.
Sources and official documentation
Every technical claim above can be checked against the platform's own documentation.
- Import conversions from Salesforce (Legacy) (Google Ads Help)The legacy Salesforce integration is no longer supported from May 31, 2025.
- Legacy Salesforce integration for conversions upgrade FAQ (Google Ads Help)How to move from the legacy integration to Conversion Import for Salesforce in Data Manager.
- Salesforce (Data Manager) (Google Ads Help)How to connect Salesforce as a data source in Google Ads Data Manager, the current route for Salesforce conversions.
- About offline conversion imports (Google Ads Help)How a GCLID saved with the lead goes back to Google Ads as an offline conversion, and that from June 15, 2026 these uploads run through the Data Manager API instead of the Google Ads API.