Click IDs, UTMs and intake links
Updated
Ad platforms add a click ID to the address when someone clicks an ad. Kalman uses it, along with your UTM tags, to tie a sign-up or purchase back to the ad that brought the visitor. Click IDs are random identifiers. They say nothing about a person's health.
What Kalman records automatically
When the tag is installed, each page view keeps:
- Click IDs:
fbclid,gclid,ttclid,msclkid,wbraid,gbraid,li_fat_idandrdt_cid. These are always kept, whatever your allowlist says. - UTMs:
utm_source,utm_medium,utm_campaign,utm_contentandutm_term, which are on Allowed query params by default.
Each click ID goes only to its own platform:
| Click ID | Sent to |
|---|---|
fbclid |
Meta (as its click cookie) |
gclid, gbraid, wbraid |
|
ttclid |
TikTok |
rdt_cid |
|
msclkid |
Microsoft |
li_fat_id |
When your intake is on another domain
Click IDs are often lost when a visitor clicks from your site to an intake on another host, such as start.northwindhealth.com or an intake platform's domain. The onboarding scan reports this as Pass click ids into your intake and offers two fixes.
No developer needed: the auto-linker (recommended)
- Open Integrations → Tracking and scroll to Privacy settings.
- In Intake domains, list your intake hosts, one per line, up to 10. For example:
start.northwindhealth.com*.intakeplatform.com
- Press Save privacy settings.
You can also set this from the onboarding scan page. Saving adds each host to Allowed origins too, so an intake page that runs the tag can send events.
Use hostnames only: no https://, path or port. A wildcard such as *.intakeplatform.com matches subdomains only.
What the tag then does:
- It adds
kl_id(the visitor's random Kalman ID) to links, forms and iframes that point at those hosts. It also adds the click IDs and UTMs the visitor arrived with. - It remembers the first click IDs and UTMs for 30 days in the browser, so a visitor who browses a few pages before starting the intake still carries them.
- It only touches
httpslinks to the hosts you listed. It never changes other links and never reads any form value. - If the intake page also runs the Kalman tag, it picks up
kl_id, so the visit continues as the same visitor.
I'll update the links myself
Your developer carries the current page's fbclid, gclid and utm_* values onto every intake link. They also add kl_id, read from the _kl_id cookie.
Getting kl_id back from your platform
If your intake platform returns kl_id in its webhooks, Kalman can join its purchases to the original visit:
- In a webhook catcher, map the field to
kl_id. - For Stripe, Kalman reads
kl_idfrom the payment's metadata, or from the client reference ID.
Consent
If a visitor has said no to ad sharing (or their browser sends Global Privacy Control), the auto-linker adds only kl_id. It adds no click IDs or UTMs and doesn't remember them. See Consent and GPC.
Tag your Meta ads
To see spend and results by campaign, ad set and ad, add Kalman's URL parameters to your Meta ads. The line is in the 3. Add tracking tags to your Meta ads panel on Integrations → Tracking, and on the Meta page.
- In Meta Ads Manager, open the ad (edit), or select several ads to edit them together.
- Scroll to Tracking, then URL parameters.
- Paste the line below, replacing anything already there.
- Publish.
utm_source=facebook&utm_medium=paid&utm_campaign={{campaign.id}}&utm_term={{adset.id}}&utm_content={{ad.id}}
Meta fills in {{campaign.id}}, {{adset.id}} and {{ad.id}} itself. Don't change them. New ads need the line too, or you can set it once at the campaign level with Meta's 'Build a URL parameter' tool. For Google Ads, see Connect Google Ads.
What Kalman never sends
These parameters carry only numeric ad IDs and random click IDs. Never put product names, conditions, medications or any other free text in a UTM tag or intake link.
Related articles
- Install the Kalman tagCopy the snippet from Integrations → Tracking, paste it in the head of every page, allow your domains, then press Verify installation.
- Track funnel events with track and identifyWhen to fire each Kalman event, the fields it accepts, what gets dropped, where to paste the calls and how to check they arrived.
- Consent and Global Privacy ControlChoose opt-in or opt-out, honour Global Privacy Control, and pick where consent comes from: your CMP, your own banner, or the Kalman banner.
- Connect Meta Conversions APISend Meta hashed, allowlisted conversion events from Kalman: credentials, event mappings, values, pixel dedupe, testing and pausing.
- Stripe and webhook catchersConnect Stripe, or catch any platform's webhook, map its fields to Kalman events, test the mapping, and watch for changes.
Support
Still stuck? Log in and open a request.
We answer in writing within one business day.
Open a request