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.
A GCLID is a unique identifier Google appends to your landing page URL on every ad click. It looks like: gclid=CjwKCAiA...
GCLIDs must be captured on the landing page within the same session — they cannot be recovered retroactively.
The GCLID must be stored against a contact identifier (email or phone) to enable offline matching.
Most CRMs don't store GCLIDs by default — you need either a hidden form field or a server-side capture script.
Once stored, the GCLID is uploaded to Google Ads when the contact converts (deal closes, invoice paid, etc.).
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.
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.
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.
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.
Why the manual process breaks at scale — and what changes with automation
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.
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.
ConversionLoop handles GCLID capture, upload formatting, and delivery automatically. Set it up once.
Start free trialIn 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.
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.
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.
Automated GCLID capture, real-time upload, and full error diagnostics. Every conversion, every time.
Start free — 14 days on usNo credit card required · No developer needed · Cancel anytime