Troubleshooting Guide

GCLID Capture and CRM Integration: How to Store and Use Google Click IDs

GCLID capture is the foundation of Google Ads offline conversion tracking. If you don't capture it correctly, nothing else works. Here is the full picture: what a GCLID is, how to capture it, how to store it in your CRM, and how to use it.

4 causes explainedExact fixes for eachAutomated solution included
30s
GCLID lifetime in URL
90d
Upload window after click
~30
Characters in a GCLID
0
Ways to recover a missed GCLID

Key Takeaways

1

A GCLID is a unique identifier Google appends to your landing page URL on every ad click. It looks like: gclid=CjwKCAiA...

2

GCLIDs must be captured on the landing page within the same session — they cannot be recovered retroactively.

3

The GCLID must be stored against a contact identifier (email or phone) to enable offline matching.

4

Most CRMs don't store GCLIDs by default — you need either a hidden form field or a server-side capture script.

5

Once stored, the GCLID is uploaded to Google Ads when the contact converts (deal closes, invoice paid, etc.).

1

Capture problem 1: Landing page strips the GCLID

Some landing page builders, redirect chains, and CDN configurations strip URL parameters before the page loads. By the time your capture script runs, the gclid is gone from window.location.search.

Fix: Test your landing page URL with a dummy gclid parameter: yoursite.com/landing?gclid=test123. Check if the parameter is still present in the URL after page load. If it is stripped, configure your redirect or landing page to preserve query parameters.
2

Capture problem 2: No capture script on page

If you don't have a script that reads the gclid from the URL on page load, nothing is captured. This is the most common gap. A form submission or CRM entry might fire, but with no GCLID attached.

Fix: Add cl.js to your landing page head. It reads window.location.search, extracts the gclid, and stores it in localStorage against the visitor's session. The script is < 3KB and adds no meaningful page load time.
3

Storage problem: GCLID not passed to CRM

Even if you capture the GCLID client-side, it needs to get into your CRM against the contact record. If your form doesn't pass the GCLID as a hidden field, the CRM entry has no GCLID attached. There is no way to match later.

Fix: Add a hidden form field named 'gclid' that is auto-populated by the capture script from localStorage. On form submission, the GCLID travels with the contact data into your CRM.
4

Matching problem: GCLID stored but not used

Some teams capture and store GCLIDs in their CRM but never close the loop — the GCLID sits in a contact property and is never uploaded to Google Ads when the deal closes.

Fix: Set up a workflow trigger that fires a webhook when a deal closes or an invoice is paid. The webhook payload should include the GCLID and the deal value. ConversionLoop or a direct API call uploads this to Google Ads.

Manual upload vs. ConversionLoop

Why the manual process breaks at scale — and what changes with automation

Feature
Manual CSV
ConversionLoop
GCLID capture method
Hidden form field — manual
cl.js — automatic
GCLID storage
CRM custom property — manual
Server-side + localStorage
GCLID to conversion link
Spreadsheet matching — manual
Automatic on webhook
Failure visibility
Silent — no diagnostics
Dashboard error logs

The manual GCLID pipeline

Manual GCLID tracking requires a hidden form field, CRM custom property, export script, and weekly CSV upload. Each step is a failure point. The pipeline degrades silently — most businesses don't know it's broken until they audit months of data.

The automated GCLID pipeline with ConversionLoop

cl.js captures the GCLID on page load and stores it in localStorage. When your CRM fires a webhook on deal close, ConversionLoop looks up the GCLID for that email and uploads the conversion to Google Ads immediately. No hidden fields, no CRM properties, no CSV.

Stop diagnosing. Start tracking.

ConversionLoop handles GCLID capture, upload formatting, and delivery automatically. Set it up once.

Start free trial

How to verify GCLID capture is working

In your browser's developer tools, go to Application > Local Storage after clicking a Google ad (or a URL with ?gclid=test123). Look for a key matching your integration ID — the value should be the GCLID. If nothing is there, the capture script is not running or the parameter is being stripped.

Frequently asked questions

What happens if a user clicks the ad twice before converting?

The second click overwrites the first GCLID in localStorage. This means the conversion is attributed to the last click — which aligns with Google Ads default last-click attribution model.

Does cl.js work on single-page apps and React sites?

Yes. cl.js runs on page load via a standard script tag. It reads window.location.search at that moment. For SPAs that manage routing internally, add the script to your root HTML file and it will fire on initial page load.

Never debug offline conversions again

Automated GCLID capture, real-time upload, and full error diagnostics. Every conversion, every time.

Start free — 14 days on us

No credit card required · No developer needed · Cancel anytime