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):
cpcorpaid_search→ Paid Searchpaid_social→ Paid Socialpaid_ai→ Paid AI — as is any paid medium (cpcincluded) whenutm_sourceis an AI platform such aschatgpt- an AI-platform
utm_sourcewith no paid medium (ChatGPT's ownutm_source=chatgpt.com) → Organic AI email→ Emailreferral(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}returnsg(Google Search),s(search partners), ord(Display).- The
gclidis 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_socialis what classifies the visit as Paid Social. Don't usecpchere — that value means Paid Search.{{site_source_name}}resolves tofb,ig,msg, oran— 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 passesfb/igthrough 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_aiclassifies the visit as Paid AI. OpenAI's own example usescpc; that works too — an AIutm_sourcewith any paid medium is Paid AI, never Paid Search.- Keep
utm_sourceto 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.