July 3, 2026Analytics

Google Ads Offline Conversion Tracking: Import CRM Deals

Two weeks ago I audited a mid-market HR-tech company spending EUR 14,000 per month on Google Ads. They had 312 demo requests in Q1. Thirty-one turned into contracts worth EUR 227,000. Google Ads showed seven conversions for the quarter. Seven. The other twenty-four closed deals were invisible because nobody had wired the CRM back to the ad platform. Smart Bidding was steering budget on roughly one-fifth of the real outcome data.

The campaigns were fine. The measurement was not. Fixing it meant building a proper google ads offline conversion tracking pipeline: capturing the GCLID at form submit, storing it in HubSpot, and importing conversion events back into Google Ads when deals moved through the pipeline. The integration took a day. Within six weeks, Smart Bidding cut cost per qualified opportunity by 22 percent.

This post walks through how to build that pipeline -- from click to CRM to import -- so you stop optimizing on a fraction of your results.

What Is Offline Conversion Tracking in Google Ads

Every Google Ads click generates a GCLID (Google Click Identifier), appended to your landing page URL. When a visitor converts on your website -- submits a form, books a demo -- a tag fires immediately and reports that conversion back to Google. That is online conversion tracking.

But for most B2B companies, the real conversion does not happen on the website. The revenue event -- a qualified opportunity, a signed contract -- happens weeks or months later inside your CRM. Google Ads has no way to observe it unless you explicitly send the data back. That is what offline conversion tracking does.

You capture the GCLID when the prospect first arrives, store it in your CRM, and when the deal reaches a meaningful stage, import that conversion back into Google Ads with the original GCLID attached. Google matches it to the click, the conversion appears in your reports, and Smart Bidding learns which clicks produce revenue.

Without this loop, you are optimizing for form fills -- a vanity metric in most B2B funnels. I cover why this matters in my B2B conversion tracking guide.

Why Google Ads Offline Conversion Tracking Matters for Smart Bidding

Smart Bidding strategies like tCPA and tROAS rely on conversion signals to decide how much to bid. If you only feed form submissions, the algorithm treats every lead as equally valuable. A bot-filled spam form and a genuine enterprise buyer look the same.

When you import offline conversions with revenue values attached, Smart Bidding learns the difference. It sees that a specific keyword produced a deal worth EUR 45,000, while another produced five leads that all churned. Over time, bidding shifts toward patterns that generate pipeline, not just traffic.

Google's own documentation on offline conversion imports states the feature exists specifically to "optimize bids and targeting based on what happens after an ad leads to a click." The question is whether your implementation delivers that signal cleanly. In most accounts I audit, it does not.

Step 1: Capture the GCLID on Your Website

When someone clicks a Google ad, the URL they land on includes a gclid parameter. Your job is to grab it and store it before the user submits a form.

There are two standard approaches.

JavaScript snippet. Parse the URL, extract the GCLID, and write it to a first-party cookie. Then inject it into a hidden field in your lead form.

function getParam(name) {
  const match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
  return match ? decodeURIComponent(match[1]) : null;
}
const gclid = getParam('gclid');
if (gclid) {
  document.cookie = '_gclid=' + gclid + ';max-age=7776000;path=/;SameSite=Lax';
}

The max-age above is 90 days -- matching Google's offline conversion upload window. On form submission, read the cookie and populate a hidden field.

Google Tag Manager. Capture the GCLID through a custom JavaScript variable and push it to the data layer on form submission. This centralizes the logic and avoids hardcoding scripts on every page. Make sure a Conversion Linker tag fires on all pages -- without it, auto-linking will not persist the GCLID across page views. If you are not sure whether your GTM setup is healthy, run through my GTM debug checklist.

The Cookie Problem

Safari ITP caps first-party JavaScript-set cookies at seven days. If a Safari user clicks your ad on Monday but does not submit a form until the following Tuesday, the GCLID cookie is gone. Depending on your audience, Safari can represent 30 to 50 percent of traffic.

Mitigations: set the cookie server-side (ITP does not restrict server-set cookies), use a server-side GTM container, or layer enhanced conversions for leads on top -- which uses hashed email as a second matching path and does not depend on the GCLID surviving.

Step 2: Store the GCLID in Your CRM

This sounds trivial but is the step that breaks most pipelines. The GCLID must travel from the hidden form field into the CRM record and stay there through every stage transition.

In HubSpot, create a custom contact property (single-line text, call it gclid) and map your form's hidden field to it. In Salesforce, add a custom field on the Lead object and flow it through to the Opportunity object on conversion -- you need the GCLID when the deal closes, not when the lead is created.

Common failures I find in audits:

FailureImpact
Hidden field present in form HTML but not mapped to a CRM propertyGCLID is collected but never stored
CRM property exists on Lead but not on OpportunityGCLID is lost when lead converts to opportunity
Form builder strips hidden fields on mobileMobile users never get a GCLID stored
Multiple forms across the site, only some have the hidden fieldInconsistent capture rate

Test every form, on every device, with a real click from a Google Ads preview. Verify the GCLID appears in the CRM record. It takes 20 minutes. Skipping it is why companies run broken offline conversion tracking for months without knowing.

Step 3: Import Conversions Back to Google Ads

Once your CRM stores the GCLID alongside each lead, you need to send conversion events back to Google Ads when deals reach key pipeline stages.

Manual CSV Upload

Go to Goals > Conversions > Uploads in Google Ads and upload a CSV. The required columns:

ColumnDescription
Google Click IDThe GCLID stored in your CRM
Conversion NameMust match the conversion action name exactly
Conversion TimeFormat: yyyy-MM-dd HH:mm:ss+ZZZZ
Conversion ValueRevenue or estimated deal value
Conversion CurrencyThree-letter code (e.g. EUR, USD)

Google's formatting requirements are strict. A mismatched timestamp format or a trailing space in the conversion name will silently reject the row.

Manual CSV works for testing, but it does not scale. Someone must remember to export, format, upload, and check for errors -- weekly at minimum. In practice, manual uploads decay within two months as priorities shift.

Automated Import via CRM Integration

HubSpot and Salesforce both have native or third-party connectors that push conversion data to Google Ads automatically when deals hit specific stages. Zapier and Salesforce Data Connector are the most common tools I see.

The logic: when a deal moves to "Closed-Won," the integration fires an API call containing the GCLID, conversion action name, timestamp, and value. No manual exports. No forgotten uploads.

Make sure the integration fires on every pipeline stage you want to track -- not just closed-won. Importing MQL and SQL stages as separate conversion actions gives Smart Bidding earlier signals, which is critical when your sales cycle exceeds 30 days. I cover this timing problem in Marketing Measurement for Long B2B Sales Cycles.

Google Ads API (Data Manager)

For enterprise setups, the Google Ads API lets you upload conversions programmatically. As of June 2026, Google is migrating new integrations to the Data Manager API -- build against it directly if starting fresh. I recommend this path when you have a data warehouse in the loop or need to enrich conversions with revenue data before upload.

Step 4: Validate the Pipeline

Uploading conversions is not the same as having them work. After your first import, check three things.

Match rate. In Goals > Conversions > Uploads, check how many rows matched versus uploaded. A healthy pipeline matches above 80 percent. Below 60 percent means something is broken -- stale GCLIDs, formatting errors, or GCLID corruption during CRM storage.

Conversion lag. Check the time delta between click and upload. If most uploads land close to the 90-day window, you risk losing conversions that take slightly longer. Import intermediate stages earlier to build buffer.

Smart Bidding response. After four to six weeks of clean data, tCPA or tROAS bidding should shift meaningfully. If it does not, confirm the conversion action is set to "Primary" (not "Secondary"). Only primary conversions feed Smart Bidding.

The Next Level: Enhanced Conversions for Leads

GCLID-based google ads offline conversion tracking has a structural weakness: it depends entirely on the click identifier surviving from ad click to CRM. When the GCLID is lost -- cookie expiration, consent suppression, device switching -- the conversion cannot be matched.

Enhanced conversions for leads adds a second signal: the prospect's hashed email address. Your tag captures a SHA-256 hash of the email at form submission and sends it to Google. When you later upload the conversion with the same hashed email, Google can attribute it even without the GCLID.

I covered the full setup -- tag configuration, hashing, CRM upload formatting -- in my enhanced conversions for leads guide. If your GCLID match rate is below 70 percent, that post is your next step.

Common Mistakes That Break Offline Conversion Tracking

Not uploading revenue values. If every conversion has a value of zero, you cannot use value-based bidding. Even an estimated pipeline value is better than nothing -- it lets the algorithm distinguish a EUR 5,000 deal from a EUR 80,000 one.

Uploading only closed-won. If your average sales cycle is 90 days, half your closed-won events will fall outside the upload window. Import MQL and SQL as separate conversion actions to give Smart Bidding faster feedback.

Mismatched conversion action names. The conversion name in your CSV or API payload must match Google Ads character-for-character. Trailing spaces, different capitalization, or renamed actions silently reject the upload.

Ignoring mobile forms. Your desktop forms capture the GCLID. Your responsive mobile forms do not because the hidden field was stripped by a form plugin. Test on real devices.

If any of this sounds familiar -- match rates you do not trust, conversions that seem to vanish, Smart Bidding that refuses to improve -- a targeted marketing measurement audit will pinpoint exactly where the pipeline is leaking and how to fix it.

FAQ

What is offline conversion tracking?

Offline conversion tracking is the process of sending conversion data from your CRM or sales system back to an ad platform like Google Ads. It connects ad clicks to business outcomes that happen outside your website, such as closed deals, signed contracts, or qualified opportunities, so that bidding algorithms and reports reflect real revenue instead of just form submissions.

How long do I have to upload an offline conversion after the click?

Google Ads accepts offline conversion uploads within 90 days of the original ad click. If your sales cycle is longer than 90 days, upload intermediate pipeline stages such as MQL or SQL before the window closes. The final closed-won event can be uploaded as a separate conversion action at a later stage if needed.

Can I use offline conversion tracking without a GCLID?

Standard offline conversion imports require the GCLID to match a conversion back to a click. If the GCLID is lost due to cookie expiration or consent suppression, the import will fail to match. Enhanced conversions for leads adds hashed email as a second matching path, which recovers conversions that would otherwise be lost.

What CRM systems work with Google Ads offline conversion tracking?

Any CRM that lets you store a custom field on the lead or contact record can work. HubSpot, Salesforce, Pipedrive, and Zoho are the most common systems I see in the field. The key requirement is that the GCLID captured at form submission is stored and accessible when the deal reaches a conversion-worthy stage.

Why is my offline conversion match rate low?

Low match rates typically come from expired GCLIDs due to cookie restrictions, formatting errors in the upload file such as wrong timestamp format or mismatched conversion action names, or GCLIDs that were never properly stored in the CRM. Check your hidden form fields, CRM field mapping, and upload file formatting as a first step.

Not sure whether your offline conversions are actually making it back to Google Ads? Get in touch -- I will audit your pipeline from click to CRM to import and tell you exactly what is broken.

Ready to fix your marketing measurement?

Take assessment →