Click identifiers: the URL parameters that let a server-sent conversion find the ad that caused it
In short
A click identifier is an opaque string the ad platform appends to your landing-page URL at the moment of the click. It is a join key: the value that lets a conversion recorded hours or weeks later be matched back to the exact click that caused it. Campaign tags describe traffic and join to nothing, so losing a tag costs you a label while losing the identifier costs you the match.
Key takeaways
- A click identifier is a join key issued by the platform; a UTM tag is a label you write yourself and nothing joins to it.
- Treat the value as opaque. Never parse, truncate, lowercase or re-encode it — a mangled identifier is the commonest cause of a low match rate.
- Capture it on the landing page and copy it onto the order row. A value that lives only in a session dies before a delayed conversion happens.
- The lifetime you request is not the lifetime you get: browser policies cap script-written cookies at days, not the 2 years you set.
- It identifies one click, not one person, and it is not the deduplication key for a conversion sent twice.
A click identifier is a parameter the ad platform adds to your landing-page URL as it forwards a click — gclid on Google, fbclid on Meta, and a different name on every other network. The value is opaque: meaningless to you, meaningful to the platform, which can resolve it to the impression, creative, campaign and account behind that click. It is the only mechanism by which a conversion your server reports days later attaches to a specific ad rather than to a channel.
The distinction worth holding is class, not vendor. Names change and new ones appear whenever a platform adds a surface. What does not change is the behaviour: issued at click time, opaque, single-purpose, expiring. Anything with those 4 properties is a join key and belongs on your order record. Everything else on the URL is description.
Join keys and descriptive tags are not the same class of parameter
| Parameter class | Issued by | What it joins to | Consequence of losing it |
|---|---|---|---|
| Platform click identifier | The ad platform, at click time | One specific click in the platform's logs | A server-sent conversion cannot be matched. The sale lands in direct or organic |
| Campaign tags: utm_source, utm_medium | You, when the destination URL is built | Nothing. Labels your own analytics groups on | Traffic lands in an unassigned bucket in GA4. Matching is unaffected |
| Your own visitor or session id | Your site, on first page view | Rows in your own warehouse | Internal joins break and sessions fragment. Matching is unaffected |
| Platform cookie from its browser tag | The platform's tag, on your page | The same click, via the browser not the URL | Browser-path attribution degrades. The server path still matches |
Rows 1 and 2 get conflated constantly, usually by a team that has spent a year perfecting a UTM convention and believes it is doing attribution. It is doing labelling, which is useful — but a URL arriving with a full tag set and no click identifier has already lost the ability to close the loop, and that loss shows up later as one of the causes ranked in the ad platform counting more conversions than you do.
The four properties that define the class
- Issued at click, not before. The value does not exist until someone clicks, so it cannot be embedded in a creative or printed on a poster.
- Opaque. No readable structure, no stable length. Nothing inferred from the string is safe, and any field that reformats it destroys it.
- Single-purpose. It answers one question — which click was this — and is not a user id, a session id or a consent record.
- Expiring. Your storage and the platform's matching window are both time-bounded, and the shorter of the 2 sets your real ceiling.
Where the value has to live for a delayed conversion to match
A same-session purchase needs almost nothing — the platform's browser tag handles it. The design problem is everything else: a form filled today and qualified next week, a quote signed by phone, a booking that converts on arrival. The identifier has to survive the gap between the click and the moment money exists, which means moving it out of the browser and onto a record.
- Capture on the landing page, before anything else runs. Read the query string on first paint, and check the parameter survives every 302 — to a locale path, a marketing domain, a consent gate. A redirect that rebuilds the URL is where it usually vanishes.
- Write it to first-party storage with an explicit overwrite rule. Decide once whether a later click replaces an earlier one, and store the capture timestamp so the rule can be revisited.
- Copy it onto the order, lead or booking row at creation. This is the step that matters: a value living only in a cookie is gone when the conversion happens in another system.
- Carry it into the CRM as a first-class field, not a note. If human qualification is what makes the conversion reportable, the identifier travels with the record through every stage in HubSpot or Salesforce.
- Include it in the server-sent conversion. It is the strongest matching signal available; the rest of the payload is ordered by matching power in assembling a server-sent conversion a platform will match.
Step 4 is where most of the engineering sits, and it is rarely a tagging job: it touches the form handler, the CRM object model and whatever queue sits between them, the sort of plumbing we treat as product work in internal tools and operations software. Step 1 fails more often than teams expect, and that diagnosis is the click id is gone by the time the form submits.
Storage lifetime needs its own caution. A cookie expiry is a request, not a guarantee: browser tracking-prevention policies cap cookies written by client-side script far below the 2 years teams usually set, and treat a cookie set in an HTTP response from your own domain differently again. Read the current caps from Apple's and Google's own documentation rather than a blog post, and see what the browser does to your identifiers for which mechanism shortens what. The same decision governs whether returning visitors keep arriving as new ones.
A campaign tag tells you what you called the traffic. A click identifier tells the platform which click it was. Only one of those survives a week and a change of system.
Four things a click identifier is not
- Not a user identifier. It identifies one click: the same person clicking twice produces 2 values, and a shared device produces values belonging to different people.
- Not a deduplication key. A browser copy and a server copy need a separate shared event id, and when that goes wrong you get conversions counting twice after the server goes live.
- Not consent. Persisting the value is itself storage, so a denied ad-storage state leaves nothing to persist — which is why consent travels as a typed field on every event.
- Not indefinitely matchable. Platforms match inside a published click-to-conversion window, commonly configurable between 7 and 90 days. A conversion sent after it closes is accepted and attributed to nothing.
Every join in advertising runs on a clock. On the buy side it is how long the identifier is stored and how long the platform will still match it; on the sell side it is the auction timeout that decides whether bids arrive after the auction has closed. Both are designed against rather than hoped about. The surrounding decisions sit under tracking, consent and event pipelines, in our marketing and advertising practice.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
What are click ID parameters in ad tracking?
They are opaque values an ad platform appends to your landing-page URL when it forwards a click, so a conversion reported later can be matched to that exact click. Each platform issues its own under its own parameter name. You cannot generate one and cannot interpret one; the only correct handling is to store it unmodified and send it back with the conversion.
What is the difference between a click ID and a UTM parameter?
A click ID is a join key issued by the platform; a UTM parameter is a label you write yourself. The platform can resolve a click ID to a specific click in its logs, which is what makes server-sent matching possible. Nothing resolves a UTM tag — it exists so your own analytics can group traffic, and it is entirely under your control, which is exactly why it proves nothing to the platform.
How long does a click identifier stay usable?
Two clocks apply and the shorter wins. The first is your storage: browser policies cap how long a cookie written by client-side script survives, often to days rather than months. The second is the platform's click-to-conversion window, published in its documentation and usually configurable. Check both against current vendor documentation, because both have moved repeatedly.
- click identifiers
- attribution
- conversion tracking
- url parameters
The work behind this page
Builds from our portfolio that this page draws on.
PipelineIQ
An AI SDR platform that scores every lead for fit, runs multichannel sequences across email, LinkedIn and call, drafts the replies, and books the meeting.
Sales AIQuoteForge
An AI CPQ and proposal platform that builds enterprise quotes from your catalog, guards every discount against the margin floor, routes approvals, and generates the proposal.
Sales AIRead next
- The click identifier is missing on half the conversions that need oneAn import rejected for a missing click identifier is a capture problem, not a platform problem. Three counts per entry path tell you which hop is eating the parameter.diagnostic
- Consent state: a typed field on each event, not a switch on the pageThe pageview before the banner answer and the purchase after it are both correct, and they carry different consent values. That only works if consent travels per event.definition
- The data layer: a versioned contract between the people who ship the site and the people who measure itA data layer is an interface two teams depend on. Undocumented, it is an API with no owner and no version — which is why tracking dies at every front-end rewrite.definition
- A slice of events lands before the visitor has answered the bannerEvents arriving with an absent consent field are not a compliance abstraction. They are a race between two scripts, and the race has a rate you can measure this afternoon.diagnostic
- Conversions started counting twice the week server-side sending was switched onA step change in reported conversions on the rollout date with flat order volume means deduplication failed. Five candidates, and one report that names which.diagnostic
- Event ID: the value that lets two systems agree a conversion happened onceThe same identifier, the same conversion, both transports, inside the platform's window. Four generation strategies, and the guarantee each one keeps or breaks.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation