What is a click ID?
A click ID is a unique value that an advertising platform adds to the landing page URL when someone clicks one of your ads. It looks like random text, and it is the key that lets the platform recognise that person's later purchase or lead as the result of that exact click.
Every major platform has its own. Google calls its click ID the GCLID, short for Google click identifier. Meta uses fbclid, Microsoft uses msclkid, TikTok uses ttclid, LinkedIn uses li_fat_id, Pinterest uses epik and Taboola uses tblci.
A landing page URL with a GCLID on it looks like this:
https://example.com/product?utm_source=google&utm_medium=cpc&gclid=Cj0KCQjw...
Everything after gclid= is the identifier. You do not create it and you cannot make it up. The platform generates a new one for every click, and your job is to capture it, keep it intact and send it back when the visitor converts.
This guide explains what each click ID does, how they differ from UTM parameters, the ways they get lost between the click and the sale, and how to capture them reliably.
How a click ID works from click to conversion
The life of a click ID has five steps, and every missing conversion in your ad reports comes from one of them breaking.
- The click. Someone clicks your ad. The platform adds a click ID to the destination URL, provided auto-tagging (or its equivalent) is on.
- The landing. The visitor arrives at your site with the click ID in the address bar. This is the only moment it is guaranteed to be there.
- The capture. A script or tag reads the click ID from the URL and stores it, usually in a first-party cookie, so it survives page navigation.
- The conversion. The visitor buys, books or submits a form, possibly days later. You look up the stored click ID.
- The report back. Your tag, or your server, sends the conversion to the platform together with the click ID. The platform matches the two and credits the campaign, ad group or ad.
When step 3 fails, step 5 has nothing to match with. The platform still charged you for the click, but it never learns that the click turned into revenue, so its bidding and your reports both undercount.
Click IDs by platform
This table covers the click IDs you are most likely to meet. The details are taken from each platform's own documentation.
| Platform | Click ID | How it gets onto your URL | What to do with it |
|---|---|---|---|
| Google Ads | gclid | Added to the landing page URL when auto-tagging is on | Store it exactly as received. The Google tag does this for you. For server or offline uploads, send it back with the conversion |
| Google Ads (iOS) | gbraid, wbraid | Added on iOS 14.5+ clicks when GCLID can't be used: gbraid for web-to-app, wbraid for app-to-web | Capture alongside GCLID. When uploading with BRAIDs, set the conversion count to Every |
| Meta | fbclid | Added to the URL when someone clicks through from Meta | Meta's pixel stores it as the _fbc cookie. For server events, send fbc in the format fb.1.<timestamp in ms>.<fbclid> and never hash it |
| Microsoft Ads | msclkid | Added when auto-tagging of Microsoft Click ID is on, which is the default | It is a UUID. Keep the most recent value and retain it for about 90 days |
| TikTok | ttclid | Appended to the ad's landing page URL | The TikTok Pixel stores it in a first-party cookie also named ttclid. Send it as user.ttclid in the Events API |
li_fat_id | Added when enhanced conversion tracking is on for the Insight Tag | The cookie lasts 30 days. Send it as LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID | |
epik | Added on Pinterest ad clicks | The Pinterest tag caches it in the _epik cookie. Send it as click_id and prefer the cookie value when the URL parameter is missing | |
| Taboola | tblci | Appended to all ad URLs automatically | Capture it from the URL, then send it in the postback as click-id, with a hyphen |
Two details in that table cause real bugs, so they are worth repeating. Taboola's landing page parameter is tblci but its postback parameter is click-id, and the postback fails if you use the wrong name. And Meta's fbc value is built from the fbclid, not the raw fbclid itself, so sending the bare value will not match.
GCLID, GBRAID and WBRAID: Google's three identifiers
Google does not use a single identifier any more. It uses three, and you need all of them.
GCLID is the standard Google click ID. It is added to the landing page URL when auto-tagging is on and covers ordinary clicks that end on your website.
GBRAID and WBRAID exist because of Apple's App Tracking Transparency policy. Google says that since the policy took effect on April 26, 2021, it no longer sends a GCLID for iOS 14 traffic coming from ads on a handful of Google apps. Instead it added two privacy-safe parameters:
- GBRAID is for a click on a web ad that leads into an iOS app (web to app)
- WBRAID is for a click on an ad inside an iOS app that leads to a web page (app to web)
Both are less granular than a GCLID, and Google's tooling treats them as a fallback for places where a GCLID cannot be used. If you upload conversions with BRAIDs, the conversion action needs its count set to Every or the upload errors.
Google also appends aggregated parameters such as gad_source and gad_campaignid to ad URLs. They identify the source and campaign rather than the individual click, so they supplement a GCLID and do not replace it.
Rules that apply to every Google click ID
- They are case sensitive. Store the value exactly as it arrived. Never trim, lowercase, re-encode or "clean" it.
- They are opaque. Treat the value as a string you carry, not something you can decode or build yourself.
- One click, one identifier. Do not merge several clicks into one conversion. Each uploaded conversion should point at the click that produced it.
- They expire. Google says Google Ads cookies expire 90 days after the click, and offline conversion imports have to fall inside the same 90-day window (more on that in our offline conversion tracking guide).
GCLID vs UTM parameters
New advertisers often assume UTM tags and a GCLID do the same job. They do not, and removing one to "tidy up" the URL costs you data.
| GCLID (click ID) | UTM parameters | |
|---|---|---|
| Who writes it | The ad platform, automatically | You, in your tracking template or URL builder |
| What it identifies | One specific click | A campaign, source, medium or creative |
| What reads it | The ad platform, to match conversions to clicks | Analytics tools and your CRM, to report by channel |
| Unique per click? | Yes | No, every click on the ad shares the same values |
| Survives Safari link protection? | Not always | Reported to pass through |
The practical rule is simple: use both. UTM tags keep your analytics and CRM readable, and the click ID lets the ad platform optimise on real outcomes. If you run Google Ads, check that auto-tagging is on and that your UTMs are added through a tracking template at account level so they do not collide with it.
Where click IDs get lost
Most "missing conversions" problems are click ID problems. These are the places they usually disappear.
| Where it breaks | Why | What to do |
|---|---|---|
| Auto-tagging is off | The platform never adds the click ID, so there is nothing to capture | Turn auto-tagging (or MSCLKID auto-tagging, or LinkedIn enhanced conversion tracking) on |
| Redirects and link shorteners | A redirect that drops the query string removes the click ID before the page loads | Make every redirect pass the full query string through, and test with a real ad click |
| Landing page builders and forms | The ID is on the URL but never copied into the lead record | Add hidden form fields and fill them from the stored value |
| Checkout on another domain | The cookie was set on your store, but the order is created somewhere else | Pass click IDs into the cart or order (on Shopify, as cart attributes) before the handoff |
| Cookie expiry | Browsers shorten the life of cookies written by JavaScript, Safari in particular | Store the value server-side or in a server-set cookie as well |
| Consent denied | In regions that need consent, you may not store marketing identifiers until the visitor agrees | Capture after consent, and use consent mode and enhanced conversions for the rest |
| Safari link protection | Safari strips known click IDs in some contexts | See the section below, and capture hashed customer data as a second match key |
| Ad blockers | The browser tag that would capture the click ID never loads | Capture on your own domain and send conversions from the server |
Does Safari remove the GCLID?
Sometimes. Safari's Link Tracking Protection removes query parameters that it classes as tracking individual users or clicks. Apple does not publish the list, but per-click identifiers like gclid, fbclid and msclkid are the ones reported removed in independent tests.
The important part is where it applies:
- On by default for links opened from Mail and Messages, and in Private Browsing
- Off by default in normal Safari tabs, unless the user sets Advanced Tracking and Fingerprinting Protection to All Browsing
- UTM campaign parameters pass through, because they identify a campaign and not an individual
Safari 26 did not change those defaults. What it did add is protection against known fingerprinting scripts, which can no longer read query parameters on the page. That is a separate feature and only affects scripts on Apple's list. Most Safari visitors still arrive with their click ID intact, but the minority who tap an ad link in an email or message do not.
Because Apple's list is not public, the safe approach is to test your own links in each context and to never rely on a click ID as your only match key. If you want the wider picture on Apple's changes, see our guide to fixing iOS tracking.
How to find a GCLID
You usually need a GCLID for one of two reasons: you are debugging, or you are uploading conversions.
- From a test click. Click your own ad, or use the ad preview, and read the address bar on the landing page. Everything after
gclid=is the value. If it is not there, auto-tagging is off or something stripped it. - From your CRM or form data. If you added a hidden field, the GCLID is stored on the lead record next to the contact.
- From Google Ads. The Google Ads API's click view report returns the GCLIDs for a given day, for up to 90 days back, which is also how you check which account a click belongs to when an upload fails.
You cannot work backwards from a customer to their GCLID unless you stored it at the time of the click. That is why capture matters more than any other step.
How to capture click IDs on your site
There are three reliable methods, and a robust setup uses more than one.
1. Let the platform tags do it
The Google tag stores the GCLID in a cookie on your domain. The Meta pixel writes _fbc. The TikTok Pixel writes a ttclid cookie, the LinkedIn Insight Tag writes li_fat_id and the Pinterest tag writes _epik. This covers browser-side reporting, but it fails whenever the tag is blocked or consent is denied, and you do not control the value for your own server or CRM.
2. Store them yourself in a first-party cookie
A short script can read the click IDs on landing and keep them for later. Run it only after marketing consent where consent is required:
const CLICK_ID_PARAMS = ["gclid", "gbraid", "wbraid", "fbclid", "msclkid", "ttclid"];
const MAX_AGE_SECONDS = 60 * 60 * 24 * 90;
function captureClickIds() {
const params = new URLSearchParams(window.location.search);
for (const name of CLICK_ID_PARAMS) {
const value = params.get(name);
if (!value) continue;
document.cookie = `click_${name}=${encodeURIComponent(value)}; max-age=${MAX_AGE_SECONDS}; path=/; SameSite=Lax; Secure`;
}
}
captureClickIds();
URLSearchParams keeps the original letter case, which matters for Google and Meta. Cookies written by JavaScript are shortened by some browsers, so for important flows also pass the values to your server on the first request.
3. Copy them into forms and carts
For lead generation, add hidden inputs named after each identifier, then fill them from the stored cookie so the click ID travels with the submission into your CRM:
for (const name of CLICK_ID_PARAMS) {
const input = document.querySelector(`input[name="${name}"]`);
const stored = document.cookie.split("; ").find((c) => c.startsWith(`click_${name}=`));
if (input && stored) {
input.value = decodeURIComponent(stored.split("=")[1]);
}
}
For stores that hand off to a separate checkout, write the values into the cart or order metadata before the handoff. If you build Meta's fbc yourself, use the form fb.1.<time you first saw the fbclid in ms>.<fbclid>, and send it unhashed.
What to do with a click ID once you have it
Capturing is half the job. The click ID has to go back to the platform in the right shape and inside the platform's time window.
- Google Ads: send the GCLID (or GBRAID/WBRAID) with the conversion time, value, currency and an order ID so Google can deduplicate. Imports must fall within 90 days. See the Google Ads conversion tracking guide and Google enhanced conversions setup.
- Meta: send
fbcwith every Conversions API event, alongsidefbpand a shared event ID. See what is Facebook CAPI. - Microsoft Ads: upload offline conversions by
msclkid, with the conversion time in UTC and inside both the goal's conversion window and the last 90 days. See Microsoft Ads offline conversions. - TikTok: hold the
ttclidfor the whole visit and send it asuser.ttclidon every event. See TikTok Events API setup. - LinkedIn: capture
li_fat_idand send it as an identifier. LinkedIn keeps the ID-to-member mapping for 365 days, even after the 30-day cookie has expired. See LinkedIn Conversions API setup. - Pinterest: send
click_idfrom the_epikcookie or the URL. See Pinterest Conversions API setup. - Taboola: pass the stored
tblcivalue back asclick-id. See Taboola server-side tracking and the no-code Taboola Conversions API setup.
If you are choosing between sending these conversions from the browser or from your server, what is server-side tracking explains the trade-offs.
How SignalBridge handles click IDs
SignalBridge's tracking pixel reads click IDs on landing, including gclid, gbraid, wbraid, fbclid, msclkid, ttclid, tblci and li_fat_id, along with UTM parameters. It stores them in first-party cookies: the latest values for 30 days, the first-touch values for a year, and a touch history for 90 days. Capture only runs when marketing consent allows it.
On Shopify stores, SignalBridge also copies the click IDs into the cart attributes, so they survive checkout and are still attached to the order. When the purchase happens, they are sent with the conversion from the server to each connected ad platform. You can see the full server-side tracking feature or how multi-touch attribution uses the same touches.
Click ID checklist
Use this to audit a setup in about ten minutes:
- Auto-tagging is on in Google Ads, and MSCLKID auto-tagging is on in Microsoft Ads
- Click your own ad and confirm the click ID is in the landing page URL
- Check that redirects and link shorteners keep the full query string
- Confirm the click ID is stored in a cookie after you land
- Confirm the value is saved with the lead or the cart, not only in the browser
- Check that GBRAID and WBRAID are captured, not only GCLID
- Confirm values are stored with their original letter case
- Confirm conversions are sent back with the click ID inside the platform's time window
- Include an order ID or event ID so retries are not counted twice
- Test with a Safari visitor who opens the link from Mail or Messages
Frequently Asked Questions
What is a GCLID?
A GCLID, or Google click identifier, is a unique value Google Ads adds to your landing page URL when someone clicks your ad and auto-tagging is on. Google uses it to match later conversions, such as a purchase or a lead, back to the exact click.
What does GCLID stand for?
GCLID stands for Google Click Identifier. The matching names on other platforms are FBCLID for Meta, MSCLKID for Microsoft and TTCLID for TikTok.
What is a click ID?
A click ID is a unique value an ad platform adds to the landing page URL when someone clicks an ad. It lets the platform identify that click when you later report a conversion.
Is a GCLID the same as a UTM parameter?
No. UTM parameters are tags you write to describe a campaign, and every click on the same ad shares them. A GCLID is generated by Google for each individual click and is used to match conversions. Use both.
How do I find my GCLID?
Click your own ad and read the landing page URL. The value after gclid= is your GCLID. For past clicks, you can read a lead's stored value from your CRM if you captured it, or query the Google Ads API's click view report for a given day.
Can you decode a GCLID?
Treat it as an opaque string. Google's guidance is to store it exactly as received, including the letter case, and to send it back unchanged. You cannot rebuild a GCLID or use it to identify a person yourself.
What is the difference between GCLID, GBRAID and WBRAID?
GCLID is the standard click ID for web clicks. GBRAID is used when a click on a web ad leads into an iOS app, and WBRAID is used when a click on an ad inside an iOS app leads to a web page. Capture all three.
How long is a GCLID valid?
Google says Google Ads cookies expire 90 days after the click, and offline conversions have to be imported within that 90-day window. Store the GCLID with the lead so you can upload while it is still valid.
Does Safari remove the GCLID?
Only in some contexts. Safari's Link Tracking Protection removes known click IDs by default from links opened in Mail, Messages and Private Browsing, and in regular browsing if the user chooses All Browsing. UTM tags are reported to pass through.
Why is my GCLID missing?
The usual causes are auto-tagging being off, a redirect or link shortener that strips the query string, a form or page builder that never copies it into the lead record, or a Safari visitor who opened the link from Mail or Messages.
What is fbclid?
FBCLID is Meta's click ID. It appears in the landing page URL when someone clicks through from Meta. The Meta pixel stores it as the _fbc cookie, and for server events you send fbc in the form fb.1.<timestamp>.<fbclid>.
What is msclkid?
MSCLKID is Microsoft Advertising's click ID. It is a UUID added to landing page URLs when auto-tagging of Microsoft Click ID is on, which is the default. Keep the latest value and use it to import offline conversions within 90 days.
Do I need to store click IDs if I use Google Tag Manager?
Google Tag Manager's Conversion Linker stores the GCLID for browser tracking. You still need your own copy if you upload conversions from a server or CRM, or if a tag may be blocked, because you cannot read the tag's cookie later from your back end unless you saved it.
Related Reading
Related Articles
Google Ads vs Microsoft Ads: Server-Side Tracking & ROAS
Google Ads vs Microsoft Ads: compare CPC, attribution, and server-side tracking to see where ROAS really comes from, with 2026 data. See the numbers.
Google Ads Conversion Tracking: Setup Guide (2026)
Set up Google Ads conversion tracking step by step: create the action, install the Google tag, choose counting and windows, verify it, and close the gaps.
