Published by Terminus, the marketing taxonomy governance platform.

UTM vs gclid vs fbclid vs ttclid: The Complete Click ID Reference

PC

Puru Choudhary

Last updated

UTM parameters are analytics-owned tags you add to a URL so any analytics tool can group visits into a campaign. Click IDs (gclid, fbclid, ttclid, msclkid, li_fat_id, dclid, twclid, ScCid, yclid, epik, and others) are opaque identifiers that ad platforms append automatically so they can match a click back to their own internal record. Both layers coexist on most marketing URLs. UTMs feed the analytics side. Click IDs feed the ad platform side. This article is the complete reference for every major identifier in use in 2026, with a full table, per-platform notes, an iOS Link Tracking Protection breakdown, a worked example, and a frequently asked questions section.

TL;DR

  • UTMs are analytics-owned. You set them. Any tool can read them.
  • Click IDs are platform-owned. The ad platform sets them. Only that platform fully understands them.
  • You almost always want both. UTMs drive cross-platform analytics reporting. Click IDs drive ad platform attribution and the Conversions APIs.
  • iOS Link Tracking Protection strips click IDs from links in Mail, Messages, and Safari Private. It does not touch UTMs.
  • Ad platform totals will never match GA4 totals exactly. UTMs plus click IDs plus a server-side Conversions API is the closest you can get.
  • Govern the UTM layer like a schema. Tag templates and a vocabulary in a tool like Terminus, the marketing taxonomy governance platform, prevent FB, fb, facebook, and Facebook all showing up as separate sources in GA4.

The fundamental distinction

There are two parallel systems for tracking a marketing click on the open web, and they are owned by different parties.

UTM parameters were invented at Urchin Software in the early 2000s and inherited by Google Analytics when Google acquired Urchin in 2005. They are five values (six if you count utm_id) you append to a URL as query string parameters. Any analytics tool that knows the convention can read them. The marketer chooses the values. The values are human-readable. The values are not tied to any specific ad platform.

Click IDs are opaque identifiers issued by individual ad platforms. Google Ads issues gclid. Meta issues fbclid. TikTok issues ttclid. The platform appends the ID to the landing page URL at click time, the platform’s own pixel or tag reads it on the page, and the platform uses it internally to tie that click to its own auction record, conversion model, and bidding system. You do not control the value. You usually cannot read it (it is hashed or encrypted). It is mostly useful when sent back to the platform that issued it.

The two systems exist for two different jobs. UTMs answer the question “where did this visit come from, in language a human marketer can interpret across every channel I run.” Click IDs answer the question “which specific click in our ad system led to this conversion.” Neither replaces the other. Most ad URLs in production carry both.

UTM parameters: the six standards

Google Analytics 4 documents six UTM parameters. Three are considered required. The others are optional but recommended for richer reporting. All values are case-sensitive in GA4, so utm_source=Google and utm_source=google are treated as different sources. This is the single most common cause of fragmented attribution data and the reason most teams adopt a governance layer.

ParameterPurposeExample valueRequired?
utm_sourceThe referrer or platform sending the traffic.google, linkedin, newsletterYes
utm_mediumThe marketing channel or category.cpc, email, social, displayYes
utm_campaignThe specific campaign, promotion, or initiative.spring_sale_2026, q2_launchYes
utm_termThe paid search keyword (used on non-Google search platforms).utm+governance, campaign+trackingOptional
utm_contentCreative variant or link position used to A/B test within a campaign.cta_top, variant_b, blue_buttonOptional
utm_idA campaign ID used to join external cost data into GA4.1234567890Optional

Encoding rules and pitfalls

UTM values follow standard URL query string encoding. Spaces become + or %20. Reserved characters need percent-encoding. Several practical rules matter:

  • Use lowercase, with underscores or hyphens, consistently. utm_campaign=Spring Sale and utm_campaign=spring_sale are different campaigns in GA4.
  • Keep values short but descriptive. Long values get truncated in some reporting surfaces and email clients.
  • Never put PII in a UTM value. The URL is logged in browser history, in CDN logs, and in third-party referrer headers.
  • Avoid characters that get URL-encoded in transit and then double-decoded by intermediate redirectors. Stick to ASCII letters, digits, hyphen, underscore.
  • If you need to pass a campaign ID for cost-data joining, use utm_id. Do not overload utm_campaign with both name and ID.

The platform click ID reference

The table below covers every major click ID in production use in 2026. “Lifetime” refers to how long the platform considers the ID valid for matching against a conversion, not how long the URL parameter persists in the browser. “Pairs with UTMs” indicates whether you should still set UTM parameters on URLs that already carry this click ID. The answer is almost always yes.

ParameterPlatformSet byPurposeLifetimeConversions API match keyPairs with UTMs
gclidGoogle AdsAuto-taggingPer-click identifier for ad-side attribution, Enhanced Conversions, offline conversion imports.90 days for offline uploadPrimaryYes
gbraidGoogle AdsAuto-tagging on iOSPrivacy-preserving identifier for iOS web-to-app journeys after ATT.Aggregate, group-levelPrimary (gbraid field)Yes
wbraidGoogle AdsAuto-tagging on iOSPrivacy-preserving identifier for iOS app-to-web journeys after ATT.Aggregate, group-levelPrimary (wbraid field)Yes
dclidCampaign Manager 360, DV360CM360 / DV360Display click identifier for Floodlight attribution.Per Floodlight configYes (Floodlight)Yes
fbclidMeta (Facebook, Instagram)Meta ad deliveryPrimary click identifier for Meta Pixel and the Conversions API; stored as _fbc cookie.90 days as _fbcPrimaryYes
msclkidMicrosoft AdvertisingAuto-taggingMicrosoft Click ID for UET tag attribution and Microsoft Conversions API.90 days for offline conversionsPrimaryYes
ttclidTikTokTikTok ad deliveryClick identifier for TikTok Pixel and Events API.7 days (per TikTok Events API default)PrimaryYes
li_fat_idLinkedInInsight Tag enhanced trackingFirst-party ads tracking UUID for LinkedIn Conversions API.30 days from last clickPrimaryYes
twclidX (formerly Twitter)X ad deliveryClick identifier for the X Conversion API.Per X attribution windowPrimary or emailYes
ScCidSnapchatSnap ad deliverySnapchat click identifier for the Snap Conversions API.Per Snap attribution windowPrimary (click_id field in user_data)Yes
yclidYandex DirectYandex DirectClick identifier for offline conversion uploads to Yandex Metrica.21 days for offline uploadsPrimaryYes
epikPinterestPinterest tag / ad URLPinterest click identifier; stored as _epik cookie; used by Pinterest CAPI.1 year as cookieYesYes
igshidInstagramInstagram shareShare identifier for organic Instagram outbound links. Not a paid-ads click ID.n/aNon/a
mc_cidMailchimpMailchimp sendCampaign-level identifier on email links.Per campaignn/aYes
mc_eidMailchimpMailchimp sendRecipient-level identifier on email links.Per subscribern/aYes
_kxKlaviyoKlaviyo sendEncrypted recipient identifier for onsite tracking and profile matching.Per subscribern/aYes
vero_idVeroVero sendRecipient identifier on email links.Per subscribern/aYes

The lifetime values above (notably ttclid, li_fat_id, yclid, and epik) drift as platforms revise their attribution defaults. Verify the current windows in each platform’s own documentation before you size a conversion-upload or persistence strategy on them.

Per-platform deep dives

gclid, gbraid, wbraid (Google Ads)

gclid stands for Google Click Identifier. Google Ads appends it to the landing page URL when auto-tagging is enabled on the account. The default is on. A real value looks like this:

https://example.com/?gclid=Cj0KCQjwk_qsBhDREiwAOTBHFv...

gclid is deterministic and per-click. One click produces one unique ID. The Google tag (or GA4 tag, or the Ads conversion tag) reads it on the landing page and stores it in a first-party cookie called _gcl_aw. When a conversion fires, the cookie is read, the ID is sent back to Google, and the click is matched to its auction record. For offline conversions uploaded via the Google Ads API or Enhanced Conversions for Leads, gclid remains usable for 90 days.

gbraid and wbraid were introduced after Apple’s App Tracking Transparency rollout in iOS 14.5 in 2021. Because gclid is a deterministic per-click identifier, Apple’s framework prevents Google from passing it on iOS without explicit user consent (which most users decline). Google’s solution was two new parameters that carry signal at the aggregate, group level rather than the individual user level.

  • gbraid is appended when a user on iOS clicks a Google web ad and the destination is an app. Web-to-app.
  • wbraid is appended when a user on iOS clicks a Google in-app ad and the destination is a website. App-to-web.
  • gclid continues to be used on Android, on desktop, and in browser surfaces unaffected by ATT.

For conversion uploads, Google accepts any of the three identifiers. The Ads API has dedicated fields for gbraid and wbraid conversion uploads. If your server-side conversion pipeline only captures gclid, you are silently dropping iOS attribution data. Capture all three.

fbclid (Meta)

fbclid is the Meta Click Identifier. Meta appends it to outbound links from Facebook and Instagram ads. The value is an opaque encoded string. The Meta Pixel reads it on the landing page and constructs the _fbc first-party cookie, which has the format:

fb.<subdomainIndex>.<creationTimeMillis>.<fbclid>

For example: fb.1.1715000000000.IwY2xjawE... (modern values are typically base64-like and longer than 80 characters; older IwAR… values still exist in 2026 but new clicks no longer use that prefix).

The _fbc cookie pairs with _fbp, a browser-level identifier that exists regardless of whether the visit came from a Meta ad. Both are sent server-side via the Meta Conversions API in the user_data object to match conversions back to ad clicks. Meta considers fbclid values older than 90 days expired and will not match them.

Two practical notes. First, Safari’s Intelligent Tracking Prevention caps script-writable (JavaScript / document.cookie) first-party cookies at 7 days, and tightens that to 24 hours when the landing navigation arrived via a link decorated with cross-site tracking query parameters (which a click ID like fbclid is). Server-side persistence of fbc in your own first-party cookie is the standard workaround. Second, GA4 does not parse fbclid as a traffic source dimension. If you want Meta traffic visible in GA4, you have to set UTMs on your Meta ad URLs explicitly.

ttclid (TikTok)

ttclid is TikTok’s click identifier. TikTok appends it on every click from a TikTok ad. The default Events API attribution window for ttclid is 7 days, although TikTok’s attribution settings allow longer windows in some configurations. The TikTok Pixel stores it in a first-party cookie and includes it in pixel events automatically. For server-side events sent through the Events API, you pass ttclid in the context.ad.callback field. Matching events to a TikTok ad click in 2026 is essentially impossible without either ttclid or hashed email and phone in the user identifier block.

li_fat_id (LinkedIn)

li_fat_id is the LinkedIn First-Party Ads Tracking UUID. It only appears on landing page URLs when Enhanced Conversion Tracking is enabled on the Insight Tag in Campaign Manager. The cookie validity is 30 days from the most recent click. To send conversions to the LinkedIn Conversions API, capture li_fat_id from the URL on landing, persist it in your own storage tied to the session or user, and pass it as LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID in the conversion event payload. LinkedIn lists it as a supported user match identifier with the highest match rate of any LinkedIn-side signal.

msclkid (Microsoft Advertising)

msclkid is the Microsoft Click ID, used by Microsoft Advertising (Bing, MSN, Edge, Microsoft Audience Network). Auto-tagging of msclkid must be turned on in account settings; unlike Google Ads, it is not on by default historically (though new accounts have it enabled). The format is a GUID followed by a single digit:

msclkid=cdd4afcccb1c9a4cad9544dd7e5006d5-1

The Universal Event Tracking (UET) tag reads msclkid from the URL and stores it in a first-party cookie called _uetmsclkid. Microsoft introduced the first-party cookie specifically to survive Apple’s Intelligent Tracking Prevention. For server-side conversion uploads through the Microsoft Conversions API (or Offline Conversion Imports), msclkid remains valid for 90 days from the click.

dclid (Campaign Manager 360 / DV360)

dclid is the Display Click Identifier used by Google’s Marketing Platform stack. It plays the same role as gclid but for Floodlight attribution in Campaign Manager 360 and Display & Video 360. The DV360-to-CM360 setup is identical to a standard CM360 implementation, except that the global mapping uses dclid in place of gclid. Conversions uploaded via the CM360 API must be sent in the dclid field, not gclid, when the click came from a DV360 buy.

twclid (X)

twclid is X’s click identifier (the parameter name predates the rename from Twitter). X appends it on ad clicks. The X Conversion API requires either twclid or hashed email per conversion event. X documents twclid as the strongest match signal and recommends always capturing it where possible.

ScCid (Snapchat)

ScCid is Snapchat’s click identifier. It is appended to the outbound URL when a user clicks or swipes up on a Snapchat ad. A real value looks like:

https://example.com/landing?utm_source=snapchat&ScCid=7b3a7917-a82a-47e8-9728-e1b3b045abb2

For the Snap Conversions API, you have two options. Pass the raw value as click_id inside the event’s user_data object. Or pass the full landing URL as event_source_url and let Snap extract the click ID server-side.

yclid (Yandex)

yclid is the Yandex Direct click identifier. Yandex Direct appends it on every paid click. The standard implementation pattern is a small JavaScript snippet on landing pages that reads yclid from the URL and stores it in a first-party cookie. Offline conversions are uploaded to Yandex Metrica as a CSV mapping yclid to a conversion event and timestamp. Yandex separately uses ysclid for organic search results and yadclid for some ad surfaces, both of which are not used for offline conversion attribution.

epik (Pinterest)

epik is Pinterest’s click identifier. The Pinterest tag stores it in the _epik first-party cookie. The Pinterest Conversions API accepts epik as a user identifier (passed via click_id) to attribute server-side events to a Pinterest click. A related parameter, _derived_epik, is set when Pinterest’s enhanced match matches a user without a cookie (for example via hashed email).

igshid (Instagram)

igshid is the odd one out. It is not a paid-ads click ID. Instagram appends it to outbound links when content is shared from Instagram (a post, a Reel, a Story). Instagram has never published an official spec. The community consensus is that it identifies the share path so Instagram can attribute traffic from shared links back to the originating account or post for its own analytics. For your purposes, treat igshid as noise: strip it in your tag manager before it pollutes GA4 landing page reports.

Email click IDs: mc_cid, mc_eid, _kx, vero_id

Email service providers append their own identifiers to email links. mc_cid (campaign ID) and mc_eid (subscriber email ID) are Mailchimp. _kx is Klaviyo’s encrypted recipient identifier and is what powers their onsite tracking. vero_id is Vero’s. These identifiers are not used by ad platforms. They are used by the ESP itself to attribute link clicks back to the campaign and recipient inside the ESP’s reporting.

From an analytics standpoint, these create a problem. Every unique mc_eid makes the landing page URL unique, which fragments page-level reports in GA4 unless you add these parameters to the “Unwanted referrals” or query-parameter exclusion list (GA4 handles this through its data stream configuration). Pair the ESP click IDs with proper UTMs on the same link to keep attribution clean.

The reconciliation problem

Ad platform totals never match analytics platform totals. Three numbers for the same campaign will look like this:

  • Google Ads reports 1,247 clicks.
  • GA4 reports 1,089 sessions from google / cpc.
  • The CRM reports 892 leads attributed to Google Ads.

The gap is real and structural. Each system counts a different thing. Google Ads counts ad clicks, including bounces, accidental taps, and clicks where the user never reached your site. GA4 counts sessions where the analytics tag actually fired. The CRM counts only the subset that converted. Add in cross-device sessions, ad blockers, iOS Link Tracking Protection, server-side filtering, and you have four or five competing definitions of “Google Ads traffic.”

The fix is not to make the numbers match. They cannot match. The fix is to plumb every system with the right identifier so that each system reports correctly on its own terms. Click IDs feed the ad platform side. UTMs feed the analytics side. A server-side Conversions API closes the gap on conversion attribution where browser tracking fails. A consistent UTM taxonomy is what lets you compare across platforms in your warehouse.

Apple introduced Link Tracking Protection in iOS 17 and macOS Sonoma, released in September 2023. It operates in three contexts: Apple Mail, Apple Messages, and Safari Private Browsing. It does not operate in regular Safari browsing or when clicking from an app like Instagram or TikTok directly to a website. Inside those three contexts, Apple inspects every clicked link and strips a known list of tracking parameters before the request leaves the device.

Apple does not publish an exhaustive official list, so coverage details are community-sourced and should be treated with appropriate confidence levels. Reliably reported as stripped (drawn from PrivacyTests.org and corroborated testing):

  • gclid (Google Ads)
  • fbclid (Meta)
  • mc_eid (Mailchimp recipient ID; mc_cid is a campaign-level identifier and has not been reliably reported on community strip lists)
  • dclid (CM360 / DV360)
  • twclid (X)

Community-sourced and not reliably confirmed (verify before relying on these):

  • gbraid (Google Ads, iOS web-to-app; an Apple-cooperative replacement for gclid)
  • wbraid (Google Ads, iOS app-to-web; an Apple-cooperative replacement for gclid)
  • li_fat_id (LinkedIn first-party ad tracking)
  • msclkid (Microsoft Advertising)
  • yclid (Yandex)

ESP and other vendor tokens such as mkt_tok (Marketo), _hsenc and _hsmi (HubSpot), and igshid (Instagram) also appear on community lists with varying confidence; verify each before depending on it.

UTM parameters are not on the strip list. utm_source, utm_medium, utm_campaign, utm_term, utm_content, and utm_id all survive Link Tracking Protection. This is the single biggest practical reason to set UTMs on every link, including links inside Google Ads where auto-tagging already provides gclid. When a Google Ads URL is shared from someone’s iPhone via Messages and a recipient clicks it, the gclid is gone but the UTM values remain.

The server-side preservation strategy is straightforward. Capture every click identifier on landing (via your tag manager, server, or edge worker). Persist them in a first-party cookie under your own domain. Replay them from your server to the relevant Conversions API. This is what tools like Stape, Snowplow, RudderStack, and the platform-native server tag containers exist to do.

Decision tree: when to use what

  1. Are you running paid ads on any platform? Yes. Leave auto-tagging on. The platform’s click ID is essential for that platform’s own reporting and conversion API. Do not disable it.
  2. Do you report on cross-channel performance in a single tool (GA4, Mixpanel, Amplitude, a warehouse)? Yes, almost certainly. Set UTMs on every paid URL, in addition to the auto-tagged click ID.
  3. Are you reconciling ads-platform conversions to your CRM or warehouse? Capture the click ID on landing and store it on the lead, account, or order. That is the only way to upload offline conversions back to the ad platform.
  4. Do you send marketing emails? ESP-set IDs (mc_eid, _kx) are fine, but set UTMs on every email link explicitly so GA4 reports the email campaign rather than direct or referral.
  5. Do you run on iOS? Assume any click ID can be stripped. Make sure your server-side Conversions API setup can match on hashed PII (email, phone) in addition to the click ID.

Worked example: one campaign, four platforms

Consider a single product launch campaign promoted on Google Ads, Meta Ads, TikTok Ads, and LinkedIn Ads. The campaign in your taxonomy is 2026_q2_governance_launch. The marketer wants every platform to report under that same campaign name in GA4 and the warehouse, while each platform also keeps its own auto-tagged click ID for ads-side attribution.

This is where a taxonomy governance layer like Terminus earns its keep. Terminus stores the campaign vocabulary (sources, mediums, campaign codes) as a typed schema, generates URLs from that schema, and prevents a marketer from typing Linkedin, LinkedIn, or linkedin_ads as three different sources for the same channel. The same campaign code flows through every platform’s tracking template. Here is what the final URLs look like for the four platforms:

Google Ads (tracking template applies UTMs; auto-tagging appends gclid on click):

https://example.com/launch?utm_source=google&utm_medium=cpc&utm_campaign=2026_q2_governance_launch&utm_content=headline_a&gclid=Cj0KCQjwk_qsBhDREi...

Meta Ads (UTMs on the destination URL; Meta appends fbclid):

https://example.com/launch?utm_source=facebook&utm_medium=paid_social&utm_campaign=2026_q2_governance_launch&utm_content=carousel_v2&fbclid=PAZXh0bgNhZW0CMTEAAR...

TikTok Ads (UTMs on the destination URL; TikTok appends ttclid):

https://example.com/launch?utm_source=tiktok&utm_medium=paid_social&utm_campaign=2026_q2_governance_launch&utm_content=spark_ad_3&ttclid=E.C.P.AbcDef...

LinkedIn Ads (UTMs on the destination URL; Insight Tag enhanced tracking appends li_fat_id):

https://example.com/launch?utm_source=linkedin&utm_medium=paid_social&utm_campaign=2026_q2_governance_launch&utm_content=single_image_b&li_fat_id=01234567-89ab-cdef-0123-456789abcdef

Notice the structure. The UTMs are consistent across all four URLs at the campaign level. The medium, content, and source differ to reflect the channel. The click IDs are different on every URL because each platform issued its own. In GA4, the four traffic sources roll up to one campaign for cross-channel rate comparisons. In each ad platform’s UI, the platform’s own click ID does the deterministic attribution. In the warehouse, the click IDs are the join keys for offline conversion uploads.

This is the steady-state pattern for any team running multi-channel paid media in 2026. The trouble starts when there is no schema. One marketer writes Linkedin. Another writes LinkedIn-Sponsored. A third forgets the campaign code and uses q2_launch. Six weeks later the GA4 campaign report has 14 variations of the same campaign and the warehouse join silently drops half of them. Governance is what prevents that. Whether you implement it in a tool like Terminus, a shared spreadsheet, or a homegrown URL builder, the schema is the thing that has to exist.

Common pitfalls

Parallel tracking strips parameters from the redirect

Google Ads parallel tracking sends the user directly to the final URL while the click measurement request goes to Google in parallel. This is what makes ads fast. The risk is that any third-party redirector (call tracking, link shorteners, affiliate networks) you insert between the click and the final URL must be able to forward gclid in the redirect. If the redirector strips query parameters, your gclid is lost. The same issue affects every other click ID. Test every redirector explicitly.

Tracking template double-encoding

Google Ads tracking templates and Microsoft Advertising tracking templates use a templating syntax ({lpurl}, {ifcontent:...}, etc.) that can double-encode characters if you nest them wrong. The classic symptom is UTMs that look fine in the URL builder but arrive at the landing page with %26 instead of & between parameters, breaking everything downstream. Test tracking templates in the platform’s preview tool, not by visual inspection.

Case-sensitive UTM fragmentation

GA4 treats UTM values as case-sensitive. utm_source=Google, utm_source=google, and utm_source=GOOGLE are three sources. The only reliable fix is governance: a single source of truth for allowed values, with URL generation done from that vocabulary rather than typed by hand.

Forgetting UTMs on a Google Ads URL

Because auto-tagging adds gclid automatically, marketers sometimes assume they do not need to set UTMs on Google Ads. The result is GA4 reports that show traffic as google / cpc (because GA4 infers it from gclid) but with (not set) for campaign, content, and term. Set the UTMs explicitly. GA4 falls back to gclid-inferred source and medium only when UTMs are absent; when both are present, the UTMs take precedence and populate the campaign-level dimensions correctly.

Meta flags fbclid values older than 90 days as expired. If your server-side stack is reading _fbc from a long-lived first-party cookie and replaying it to the Conversions API months after the original click, Meta will drop the match. Rotate the stored value or fall back to email matching for older sessions.

Treating igshid as paid attribution

igshid looks like a click ID and arrives on a lot of inbound traffic. It is not a paid Instagram identifier. Strip it before reporting, or attribute it as organic social. Counting igshid as Meta Ads attribution will inflate your reported ad-driven traffic.

Frequently asked questions

What is the difference between UTM and gclid?

UTM parameters are analytics-owned tags you add to a URL so any analytics tool can group visits into source, medium, and campaign. gclid is Google Ads’ own opaque click identifier that auto-tagging appends automatically. UTMs describe the campaign in human-readable values. gclid is a per-click record key that only Google can fully interpret. Most production setups use both.

Do I need UTMs if Google Ads auto-tagging is on?

Usually yes. gclid drives reporting on the Google Ads side and feeds GA4 enough to infer google / cpc. UTMs drive reporting in non-Google destinations (warehouses, CRMs, secondary analytics tools) and give GA4 explicit campaign and content values. Running both is the standard hybrid setup.

What does fbclid mean?

fbclid is the Meta click identifier. Meta appends it on outbound clicks from Facebook and Instagram ads. The Meta Pixel reads it on the landing page, stores it in the _fbc first-party cookie, and the Conversions API sends it back to Meta to match server-side events to the original click. Meta considers values older than 90 days expired.

What is ttclid?

ttclid is TikTok’s click identifier. TikTok appends it on every ad click. The default Events API attribution window is 7 days, with longer windows configurable in some attribution settings. Capture it on landing and persist it server-side if you intend to send conversions from your backend.

Does iOS strip gclid?

Yes, in three specific contexts: Apple Mail, Apple Messages, and Safari Private Browsing. iOS Link Tracking Protection reliably strips gclid, fbclid, mc_eid, dclid, and twclid before the request leaves the device. Others (gbraid, wbraid, li_fat_id, msclkid, yclid) are community-reported but not reliably confirmed. UTMs are not stripped. Clicks from standard browsing or from inside an app like Instagram are not affected.

What is the difference between gclid, gbraid, and wbraid?

gclid is the deterministic per-click identifier Google has used since 2008. gbraid is the privacy-preserving identifier for iOS web-to-app journeys. wbraid is the equivalent for iOS app-to-web journeys. Google introduced gbraid and wbraid after Apple’s App Tracking Transparency rollout in iOS 14.5 because gclid could not be passed to non-consented iOS users. All three are accepted in the Google Ads conversion upload API in their respective fields.

Will click IDs replace UTMs?

No. Click IDs and UTMs serve different jobs. Click IDs are platform-specific, opaque, and primarily useful to the platform that issued them. UTMs are platform-agnostic, human-readable, and useful to any tool that consumes URL parameters. As long as marketers buy across multiple platforms and report in a unified analytics tool, both layers stay necessary.

Can I see fbclid in GA4?

Not as a standard traffic source dimension. GA4 does not parse fbclid the way it parses gclid. To capture fbclid in GA4, write a custom dimension via Google Tag Manager that reads the parameter from the URL on landing and sets it as an event parameter. To get Meta traffic visible in GA4’s source and medium reports, set explicit UTMs on every Meta ad URL.

What is msclkid?

msclkid is the Microsoft Click ID, used by Microsoft Advertising. When auto-tagging is enabled, msclkid is appended to the landing page URL. The UET tag reads it, stores it in the _uetmsclkid first-party cookie, and uses it to attribute conversions and feed the Microsoft Conversions API. Offline conversion uploads accept msclkid for 90 days from the click.

What is li_fat_id?

li_fat_id is LinkedIn’s First-Party Ads Tracking UUID. It appears on landing page URLs when Enhanced Conversion Tracking is enabled on the Insight Tag. The cookie is valid for 30 days from the most recent click. It is the preferred match key when sending events to the LinkedIn Conversions API and produces a higher match rate than email alone.


Last updated: 2026-06-01

Terminus helps you and your team be consistent in UTM tracking

Try Terminus risk-free for 21 days. Cancel anytime with 1 click.