For any business where the sale happens after the website visit, on a call, in a showroom or over weeks of follow-up, Google Ads only learns which clicks were worth paying for if you tell it. Offline conversion import is how. In 2026 the mechanics changed: uploads now flow through Data Manager, and the old Google Ads API path is closed. This guide covers the whole workflow, from capturing the click to the upload file.
The Workflow in One Picture
Visitor clicks an ad with a gclid, your site stores the gclid, the lead form writes it into the CRM, the sales team marks the lead qualified or won, a weekly export produces rows of gclid plus conversion name plus time plus value, and Data Manager uploads them into Google Ads where they attach to the original click.
Step 1: Capture the Click ID on Arrival
Add a Custom HTML tag in GTM on All Pages that stores gclid, and while you are there the UTMs, in a first-party cookie for 90 days:
<script>
(function () {
var params = ['gclid', 'gbraid', 'wbraid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];
var qs = new URLSearchParams(window.location.search);
var domain = location.hostname.replace(/^www\./, '');
params.forEach(function (p) {
var v = qs.get(p);
if (v) {
document.cookie = 'lead_' + p + '=' + encodeURIComponent(v) + '; max-age=' + (90 * 86400) + '; path=/; domain=.' + domain + '; SameSite=Lax; Secure';
}
});
})();
</script>
gbraid and wbraid are the iOS equivalents of the gclid and are accepted in uploads.
Step 2: Write It Into Every Lead
Add hidden fields to every lead form named gclid, gbraid, wbraid and the UTMs, and populate them from the cookies on page load:
<script>
(function () {
function cookie(name) {
var m = document.cookie.match('(?:^|; )' + name + '=([^;]*)');
return m ? decodeURIComponent(m[1]) : '';
}
['gclid', 'gbraid', 'wbraid', 'utm_source', 'utm_medium', 'utm_campaign'].forEach(function (p) {
var el = document.querySelector('input[name="' + p + '"]');
if (el) { el.value = cookie('lead_' + p); }
});
})();
</script>
Map each hidden field to a custom property in the CRM. For phone leads, a call tracking platform can capture the gclid from the session and pass it with the call record, or you rely on Enhanced Conversions for Leads matching on the phone number.
Also fire the standard website lead conversion with Enhanced Conversions at submission time, so Google stores the hashed email against the click for the leads path.
Step 3: Create the Import Conversion Actions
In Google Ads, Goals, then Conversions, then New conversion action, then Import, then CRM or other data sources, then Track conversions from clicks. Create one action per outcome you will upload, for example Qualified Lead and Closed Deal. Set:
- Value: use the value from the upload for Closed Deal, a fixed value for Qualified Lead.
- Count: One.
- Click-through window: as long as your sales cycle, up to 90 days.
- Primary or secondary: Closed Deal primary once you have volume; Qualified Lead primary until then.
Enable Enhanced Conversions for Leads on the action if you want email matching as a fallback.
Step 4: Build the Export
Weekly, export from the CRM every lead that reached each stage in the period, with these columns:
| Column | Value |
|---|---|
| Google Click ID | the stored gclid, or gbraid or wbraid in their own columns |
| optional, for Enhanced Conversions for Leads | |
| Phone | optional |
| Conversion Name | exactly as in Google Ads, for example Qualified Lead |
| Conversion Time | the stage change timestamp, with time zone, for example 2026-10-27 14:32:00+10:00 |
| Conversion Value | number, for Closed Deal |
| Conversion Currency | ISO code |
Rows with no gclid and no email cannot match; leave them out or keep them for reconciliation only.
Step 5: Upload Through Data Manager
Since June 15, 2026 this is the supported path. Three options:
- Manual file upload in Google Ads under Data Manager, for a one-off or a small business doing it weekly by hand.
- Scheduled Google Sheet. Connect a sheet in Data Manager and have the CRM or a Zap write rows to it; Google Ads reads it on a schedule.
- Data Manager API or a connector. HubSpot, Salesforce and other CRMs have integrations that moved to the new path; connectors such as Zapier and Make expose it too. If you wrote your own uploader against the Google Ads API, migrate it.
After each upload, open the upload history. It shows rows processed, matched and the reason for each failure.
Step 6: Read the Results
Within a day or two, the import actions show conversions in the Google Ads reports attached to the original campaigns and keywords. Compare cost per qualified lead and cost per closed deal across campaigns. Once Closed Deal has around 30 conversions in 30 days, switch bidding to it with values, and watch the account shift spend toward the searches that produce revenue.
Troubleshooting Match Rates
- Below 50 percent matched. Most leads have no gclid: the cookie script is missing on landing pages built in another tool, or forms lack the hidden fields. Check a test lead end to end.
- Conversion time before click. The CRM timestamp is wrong or in the wrong time zone. Include the offset explicitly.
- Conversion name not found. Spelling or case differs from the Google Ads action.
- Uploads failing after June 2026. Still using the Ads API. Move to Data Manager.
- Duplicates. The same lead exported twice; include the CRM record ID in your export and deduplicate before upload.
Outcome
Google Ads learns which clicks became customers, with values, and bidding optimises toward revenue instead of form fills. For lead businesses this is the single change with the largest effect on return on ad spend, and in 2026 it runs on a supported, scheduled path rather than a fragile script.
