- Google Ads
- Offline Conversions
- CRM
- Lead Generation
- Conversion Tracking
Google Ads Offline Conversion Tracking: CRM Setup
By Dolphin Analytics team · Published 22 Sept 2026
TL;DR
Google Ads offline conversion tracking sends the sales and qualified leads in your CRM back to the ad click that started them. Capture the GCLID (Google Click Identifier) on your lead form, store it in HubSpot or Salesforce, create an offline conversion action, then import each stage change. Bidding learns from revenue, not form fills. We set up and fix tracking for clients most weeks; this is our pipeline.
Olamide Sule, founder of Dolphin Analytics: a digital analytics expert based in London delivering solutions for agency and in-house clients.
A Google Ads account that optimises on form fills is bidding for enquiries, not customers. We set up and fix tracking for agency and in-house clients most weeks, and this is the walkthrough we give them for Google Ads offline conversions: which stages to send, how the GCLID gets from the ad click into HubSpot or Salesforce, and how to prove the import is working. If you have not set up basic conversion tracking yet, start with our Google Ads conversion tracking guide.
What is Google Ads offline conversion tracking?
Google Ads offline conversion tracking imports sales and qualified leads from your CRM back into Google Ads, matched to the ad click that produced them. Google’s offline conversion imports overview says Google Ads provides a unique GCLID (Google Click Identifier) for every click that comes to your website from an ad. You store it with the lead, and when the lead converts you send the GCLID back with the conversion.
The same page describes the problem the feature solves: an ad that starts a customer down a path ending in a sale “at your office or over the phone”. The GCLID is the thread the whole setup hangs on, and our guide to GCLIDs and click IDs covers where it gets lost before it ever reaches a form.
GCLID import or enhanced conversions for leads: which do you need?
Most lead-gen accounts need both, built on one CRM pipeline. GCLID import matches a conversion to a click by its ID. Google’s enhanced conversions for leads page describes the other route: you send hashed first-party data from your lead forms, such as an email address or phone number, and Google compares it with hashed data from signed-in Google Accounts. That match picks up leads whose GCLID never reached the CRM.
Google’s offline conversion imports overview says that if you have not adopted offline conversion import yet, Google recommends starting with enhanced conversions for leads. The Google Ads API guide to offline conversions makes the same recommendation. Neither replaces the CRM work below: the import still needs the right stage, the right timestamp and a clean connection. This post owns the GCLID capture and the CRM pipeline; our enhanced conversions for leads guide covers the hashed-data tag and the diagnostics report.
Which CRM stages should you send back to Google Ads?
Send the stages that tell a good lead from a bad one, usually two or three of them, each with a value. A form fill tells Google Ads nothing about quality; a stage your sales team sets by hand does.
The stages we usually map:
| CRM stage | Example trigger in the CRM | Why send it |
|---|---|---|
| Qualified lead | Sales marks the lead as a fit after the first call | Fast feedback, arrives within days of the click |
| Opportunity | A proposal or demo is booked | Separates tyre-kickers from buyers |
| Closed won | The deal is marked won, with its amount | The number the business actually runs on |
Google’s Data Manager setup page highly recommends choosing “Qualified lead” or “Converted lead” as the conversion goal for imported leads. Which one you let bidding chase is a separate setting. Google’s primary and secondary conversion actions page says primary actions are reported in the Conversions column and used for bidding, while secondary actions appear only in All conversions and are not used for bidding.
Our call on most accounts: bid on the qualified lead stage, not closed won. Closed-won deals in B2B are often too few, and too slow, for bidding to learn from. Import closed won anyway, as secondary, so you can report pipeline and revenue per campaign.
How do you set up Google Ads offline conversion tracking with the GCLID?
Set it up in six steps: turn on auto-tagging, capture the GCLID on your lead form, store it in the CRM, create the offline conversion action, connect the data source, and schedule the import. The website steps take an afternoon. In our experience, the CRM mapping is where projects stall.
Step 1: Turn on auto-tagging
Google’s
GCLID setup guide
lists auto-tagging as the first requirement for importing offline
conversions. In Google Ads, click the Admin icon, then Account
settings, open the Auto-tagging section, tick Tag the URL that people
click through from my ad and click Save. Google’s
auto-tagging page
shows the result: a click on an ad for www.example.com lands on
www.example.com/?gclid=123xyz.
Click one of your own ads (or use the ad preview) and confirm the landing URL
carries ?gclid=. If it does not, a redirect is stripping it, and nothing
below will work until that is fixed.
Step 2: Capture the GCLID on your lead form
The same GCLID setup guide asks you to add a hidden form field for the GCLID to every form submission page, and to store the GCLID in a cookie or local storage so it survives until the visitor submits. Google’s own sample keeps it in local storage with an expiry set to match the click window. It also warns that the GCLID is case sensitive, so never lowercase it anywhere in the pipeline.
-
Add a hidden input to the lead form:
<input type="hidden" name="gclid" value="">. -
Paste this script on every page, after the form markup. It stores the GCLID from the landing URL in local storage and fills every hidden field named
gclid:<script> (function () { var ttl = 90 * 24 * 60 * 60 * 1000; var params = new URLSearchParams(window.location.search); var fromUrl = params.get('gclid'); if (fromUrl) { localStorage.setItem('gclid', JSON.stringify({ value: fromUrl, expires: Date.now() + ttl })); } var stored = JSON.parse(localStorage.getItem('gclid') || 'null'); if (stored && stored.expires > Date.now()) { document.querySelectorAll('input[name="gclid"]').forEach(function (field) { field.value = stored.value; }); } })(); </script> -
If a script injects your form after the page loads, run the fill step once the form has rendered, or the field will still be empty on submit.
For HubSpot forms, the field itself is a HubSpot setting. HubSpot’s form editor guide has a Make this field hidden option that keeps a field off the form while it still passes a value to a contact property, and its hidden fields page says hidden fields can capture values from a query string or the page URL. That covers a form on the landing page. A form two pages later needs the stored value from the script above. Our HubSpot form tracking guide covers the rest of the HubSpot form side.
Step 3: Store the GCLID against the lead in your CRM
Create a text field for the GCLID on the contact or lead record, then map the hidden form field to it. In HubSpot, the properties guide path is the settings icon, then Properties, then Create property. Pick the Single-line text field type, which stores one string of alphanumeric characters. In Salesforce or any other CRM, the pattern is the same: one text field on the record your form creates.
Then make sure the stage you import can reach that value. If your qualified lead stage lives on the contact, you are done. If closed won lives on a deal or opportunity, copy the GCLID onto that record when it is created, so the export for each stage has the click ID on the same row.
Test it: submit a lead from a URL ending ?gclid=Test123 and check that the
CRM record shows Test123, capital T included.
Step 4: Create the offline conversion action
In Google Ads, open Summary in the Goals menu, select + Create conversion action, then Conversions offline, then Add data source. Google’s GCLID setup guide offers three connection types at this point: a direct connection, a third-party integration by Zapier, or a partner integration. You then pick a conversion category and choose which fields in your data source define the conversion.
Create one action per stage, named exactly as you will reference it in uploads (for example “Qualified lead” and “Closed won”). Set each new action to secondary until Step 6 proves it matches the CRM.
Google’s GCLID setup guide asks you to wait 4-6 hours after creating a new conversion action before uploading conversions for it, and says conversions uploaded during those first hours might take 2 days to appear in reports.
Step 5: Connect the data source
You have two practical routes: a direct CRM connection through Data Manager, or a scheduled file.
CRM connection. Google’s GCLID setup guide says that for Salesforce and HubSpot, Data Manager imports the last 14 days of data in its first successful run and, after that, imports all changes reported between the last successful run and the current one; for Google Cloud Storage, Amazon S3, HTTP, SFTP and Google Sheets sources, the same guide says it imports conversions from 90 days ago in every run, and that the setup suits click-to-conversion cycles under 14 days or 90 days depending on the data source, so check your sales cycle against the route before you pick one.
Scheduled file. Google’s file import guide (now marked legacy) uses a template with Google Click ID, Conversion Name, Conversion Time, Conversion Value and Conversion Currency columns, plus an optional Order ID. The time zone goes in a parameters row, and conversion names must match the action’s spelling and capitalisation exactly. A minimal file looks like this:
Parameters:TimeZone=Europe/London
Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
Cj0KCQjw_example,Qualified lead,2026-09-18 14:32:00,500,GBP
The same guide says Google Ads supports recurring uploads from Google Sheets, HTTPS or SFTP on a schedule you set. We schedule imports daily, so bidding gets fresh signals and a broken export shows up within a day, not at month end.
If your team uploads through the
Google Ads API
instead, each click conversion needs a click identifier (gclid, gbraid or
wbraid), the conversion action, a conversion date and time with its time
zone in yyyy-mm-dd HH:mm:ss+|-HH:mm format, a value and a currency code.
Step 6: Reconcile, then switch the action to primary
We run a new import as secondary for two to three weeks. Then we compare, week by week, the conversions Google Ads imported against the CRM records at that stage that carry a GCLID. The two should be close. They will not match your CRM’s total for the stage, because leads from other channels carry no GCLID.
Once the numbers line up, change the stage you want bidding to chase to primary. Our post on why ad platforms report more conversions than your CRM explains the gaps you should expect between the two systems, so you do not chase differences that are working as designed.
How do you check that offline conversions are importing?
Check three places in order: the upload history, the conversion action’s numbers, and a match against the CRM. Each tells you something the others cannot.
- Upload errors. Google’s file import guide says Google Ads won’t count duplicate conversions and returns an error naming which ones were duplicates. A run full of duplicate errors usually means the export re-sends every row each day without an Order ID.
- Timing. The same file import guide warns that conversions imported within one day of the click may not be recordable yet, and advises uploading extra days of data so they are picked up on the next run; it says data can take 24 to 48 hours to process fully into reports.
- Row-level match. Pull ten recent qualified leads that carry a GCLID and confirm each one appears in the import. One missing row points at the export filter; all ten missing points at the connection.
If Google Ads shows no conversions of any kind, the problem sits upstream of the import. Our guide to Google Ads conversions not tracking covers that case.
Where does offline conversion tracking usually break?
When we audit lead-gen accounts, the fault we find most is a GCLID captured on the landing page and lost before the form. The visitor lands on a blog post, browses to the pricing page, and submits a form that never saw the URL parameter. The storage script in Step 2 exists for exactly this.
The other faults we meet most often:
- The GCLID changes on the way. A CRM workflow or spreadsheet formula that lowercases or trims text breaks the match, because Google’s GCLID setup guide treats the ID as case sensitive.
- The conversion name drifts. Someone renames “Qualified lead” in Google Ads, and every file upload that still says the old name fails the exact match the file import guide requires.
- The sales cycle outruns the import. Deals that close months after the click fall outside the 14-day or 90-day cycle that Google’s guide says the setup suits. Import the earlier qualified stage, which lands inside the window, and report closed won separately.
- Leads arrive with no GCLID. Consent refusals, other devices and stripped redirects all leave the CRM field empty. That gap is what the hashed email in enhanced conversions for leads is built to close.
Does the same pipeline work for Meta or GA4?
The CRM half does: a lead record that holds its click IDs and stage history can feed any platform. The sending half differs per platform. For Meta, our Conversions API guide covers sending server-side events. For GA4, our Measurement Protocol explainer covers sending events from your own systems. This post sticks to Google Ads.
How we build the CRM to Google Ads pipeline for clients
We treat offline conversion tracking as a join between three things: the ad click, the lead form and the CRM stage that marks a lead as real. We build the GCLID capture, map it into HubSpot or Salesforce, connect the import and reconcile it against the CRM before any action goes primary. The join changes what you think is working: channels that never show up in a form-fill count can turn out to be doing much of the work. Here is what that looked like for one client. For a private aviation company, organic search drove 50.9% of web-attributed deal contacts, 29 of 57.
Our tracking work covers this pipeline end to end. Our paid audit, which needs access to GA4 and Google Tag Manager, is where we review an existing setup and write up each fault and its fix. If your Google Ads account still bids on form fills and you want a person’s read on where to start, tell us what’s broken, or book a call.
Frequently asked
What is offline conversion tracking in Google Ads?
Offline conversion tracking imports events that happen away from your website, such as a qualified sales call or a signed contract, into Google Ads. Each imported conversion carries the GCLID from the original ad click, so Google Ads can credit the sale to the campaign, ad group and keyword that produced the lead.
Should I use GCLID import or enhanced conversions for leads?
Google recommends starting with enhanced conversions for leads if you have not adopted offline conversion import yet. In practice the two share the same CRM pipeline: the GCLID matches a conversion to its click, and the hashed email matches leads whose GCLID never reached the CRM. We build the GCLID capture first, because both routes depend on the CRM holding the lead's source.
Which CRM stages should I import into Google Ads?
Import the stages that separate good leads from bad ones: usually a qualified lead stage and a closed-won deal, each with a value. Keep a new import as a secondary conversion action until it matches your CRM, then make the stage you want bidding to chase primary.
How long does it take for offline conversions to show in Google Ads?
[Google's GCLID setup guide](https://support.google.com/google-ads/answer/7012522?hl=en) says to wait 4-6 hours after creating a new conversion action before the first upload, and that uploads made inside that window can take 2 days to appear; its [file import guide](https://support.google.com/google-ads/answer/7014069?hl=en-GB) adds that data can take 24 to 48 hours to process fully into reports.
Can you set up offline conversion tracking with our CRM?
Yes. We capture the GCLID on the form, map it into HubSpot or Salesforce, connect the import and reconcile it against the CRM before it goes primary. If you want a person's read on where to start, send us a message or book a call; that part is free.