Sign in
← Attribution docs
Documentation

Recommended UTM parameters

MTK Attribution works without any UTMs — click IDs and referrers classify most traffic on their own. But the templates below fill in what those signals can't: which campaign, which keyword, which creative, which placement. Set them once at the account level and every captured field lights up.

The values the engine keys on

Channel classification reacts to exact utm_medium values (case-insensitive):

  • cpc or paid_search → Paid Search
  • paid_social → Paid Social
  • paid_ai → Paid AI — as is any paid medium (cpc included) when utm_source is an AI platform such as chatgpt
  • an AI-platform utm_sourcewith no paid medium (ChatGPT's own utm_source=chatgpt.com) → Organic AI
  • email → Email
  • referral (with a utm_source) → Referral
  • anything else with a utm_source → Campaign

utm_source becomes the source value — normalized to canonical platform names by default (googleads → Google Ads, ig → Instagram; see the alias table), or byte-for-byte with the per-license verbatim toggle. Beyond the six standard params (source, medium, campaign, term, content, placement), the tag also freezes these URL params into every touch by default: matchtype, network, device, campaignid, adgroupid — mappable in your field map as e.g. first.adgroupid / last.adgroupid.

Google Ads

Set as the tracking template at account level (Admin → Account settings → Tracking) so it applies everywhere:

{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_term={keyword}&utm_content={creative}&utm_placement={network}&adgroupid={adgroupid}&matchtype={matchtype}&device={device}
  • {campaignid} passes the numeric ID — Google has no campaign-name ValueTrack macro. Match IDs to names in your reporting, or maintain per-campaign static names instead.
  • Don't use {adposition} — Google deprecated it and it now returns an empty value.
  • {network} returns g (Google Search), s (search partners), or d (Display).
  • The gclid is appended by autotagging automatically — even with no template at all, Google clicks classify as Paid Search.

Meta (Facebook & Instagram)

Paste into the ad's URL parameters field (Ads Manager → ad level → Tracking). No {lpurl} — Meta appends these to your link:

utm_source={{site_source_name}}&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_term={{adset.name}}&utm_content={{ad.name}}&utm_placement={{placement}}
  • utm_medium=paid_social is what classifies the visit as Paid Social. Don't use cpc here — that value means Paid Search.
  • {{site_source_name}} resolves to fb, ig, msg, or an — which app drove the click. In the default normalized mode the source field reads Facebook / Instagram / Messenger / Audience Network, matching what organic traffic from those platforms reports. (Verbatim mode passes fb/ig through as-is.)
  • Meta's dynamic parameters use double curly braces and resolve to names, not IDs. Google-style {keyword} macros do not work on Meta — they pass through as literal text.
  • Name-based values freeze when the ad is published; renaming a campaign later doesn't update them.

Microsoft Ads (Bing)

Account-level tracking template. Microsoft's {Campaign} macro passes the campaign name:

{lpurl}?utm_source=bing&utm_medium=cpc&utm_campaign={Campaign}&utm_term={keyword}&utm_content={AdId}

Even without a template, autotagging's msclkid alone classifies the visit as Paid Search / Bing.

ChatGPT Ads & AI assistants

Untagged, ChatGPT already appends utm_source=chatgpt.com to the links it cites, and that — or a referrer from any AI assistant — classifies as Organic AI. Ads in ChatGPT land on the same sites from the same app, so the medium is what tells them apart. Put this on every ChatGPT Ads destination URL (OpenAI's macros fill the IDs):

utm_source=chatgpt&utm_medium=paid_ai&utm_campaign={campaign_id}&utm_content={ad_id}&utm_term={ad_group_id}
  • utm_medium=paid_ai classifies the visit as Paid AI. OpenAI's own example uses cpc; that works too — an AI utm_source with any paid medium is Paid AI, never Paid Search.
  • Keep utm_source to the platform name (chatgpt, perplexity, …) so the source reads the same as organic traffic from that assistant.
  • Conversational interfaces sometimes drop URL parameters before the click resolves. A paid click that loses its UTMs arrives as Organic AI — there is no click ID to rescue it with, unlike Google or Meta.

LinkedIn, TikTok & email

LinkedInhas no dynamic URL macros — set static UTMs per campaign on each ad's destination URL:

utm_source=linkedin&utm_medium=paid_social&utm_campaign=YOUR_CAMPAIGN_NAME

TikTok clicks carry a ttclidthat classifies them as Paid Social / TikTok automatically; add static UTMs (or TikTok's __CAMPAIGN_NAME__-style macros) for campaign detail:

utm_source=tiktok&utm_medium=paid_social&utm_campaign=__CAMPAIGN_NAME__

Email links should carry utm_medium=email plus a utm_source (e.g. newsletter) and utm_campaign per send.

Full classification logic — every exact value, in evaluation order — lives in the developer docs.