Why your campaign reports stop adding up
UTM tags are the short labels added to the end of a link, such as ?utm_source=linkedin&utm_medium=paid_social&utm_campaign=spring-launch. When someone clicks the link, your analytics tool reads those labels and credits the visit to that source, medium, and campaign. That only works when everyone tags links the same way.
On most small teams, they don't. One person writes LinkedIn, another writes linkedin, and a contractor writes li. Your analytics tool treats those as three separate sources, so the real total for LinkedIn is split across three rows and nobody adds them back together. Mediums drift the same way. A newsletter tagged utm_medium=newsletter looks reasonable, but Google Analytics sorts visits into channels by matching the medium against a fixed list, and "newsletter" isn't on it. Those visits land in Unassigned instead of Email, and your email numbers look smaller than they are.
Missing tags cause a different problem. Links in email apps, PDFs, Slack messages, and mobile apps usually arrive without any record of where the visitor came from. Without UTM tags, your analytics tool has nothing to go on, so it counts the visit as direct. That is the most common reason a report shows a large share of direct or unattributed traffic, especially on deep pages that nobody types in by hand.
Then there is tracking that breaks quietly. A redirect can strip the tags off a link before the page loads. A page can load your analytics tag twice, or not at all. A payment page on another domain can take credit for every purchase. None of these raise an error. The reports just show the wrong numbers with full confidence.
An audit finds all of this, ranks it by how much it distorts your numbers, and leaves you with a convention that keeps it from happening again. The work is mostly careful reading and cross-checking across several tools, which is exactly the kind of work an AI agent does well. Kite is an AI marketer. It researches your business, builds a growth strategy, and ships the work that brings you new customers. Here is how it audits your tagging and tracking.
How Kite audits your UTM tags and tracking setup
Kite starts with what it already knows about your business: the channels you market on, the campaigns you've run, and the pages where visitors become leads or customers. It reads the tag values your analytics tools have actually recorded over the last few months, groups the ones that mean the same thing, and checks which channel each one ends up in. Then it opens your tagged links and your key pages to see whether the tracking itself works.
From those findings, Kite writes a naming convention that fits the channels you use and the way your analytics tools sort traffic. It fixes the problems it can change directly, gives you exact steps for the rest, and then uses the convention on every campaign link it creates. A month later, it can run the same audit again and show you what changed.
- Find every way your campaigns are tagged today
- See where each tagged visit actually lands
- Find where tracking breaks before a visit is counted
- What naming convention should you use for UTM campaign links?
- Clean up past reports and fix what's broken
- Keep new links on the convention and check again
Find every way your campaigns are tagged today
Kite begins by collecting the tag values your tools actually received, because the real state of your tagging lives in your reports, not in anyone's memory. In Google Analytics, it runs reports of sessions and conversions by source, medium, and campaign. In PostHog, it runs PostHog's own UTM audit, which finds campaigns with mistyped or unmatched sources. In Mixpanel, it reads the values stored for each UTM property. On a site Kite hosts, it reads its own built-in analytics.
Then Kite groups the values that mean the same thing. facebook, Facebook, fb, and facebook.com become one source. cpc, CPC, and paid-search become one medium. Campaign names get the same treatment, so spring_launch, Spring Launch, and springlaunch2026 show up as one campaign that was tagged three ways. For each group, Kite records how many visits and conversions sit under each spelling, so you can see how much each inconsistency hides.
If your team already keeps a spreadsheet of campaign links or a written convention, share it with Kite. It compares what the convention says with what people actually did, which usually shows exactly where the drift started.
See where each tagged visit actually lands
Kite checks which channel each group of tags ends up in, because a tag can be spelled consistently and still land in the wrong place. Google Analytics assigns every visit to a channel group, such as Paid Social, Email, or Organic Search, by matching the source and medium against its rules. Kite reads the channel groups defined on your property and the share of visits and conversions that fall into Unassigned. When a medium like newsletter, social-paid, or banner matches no rule, Kite names it and shows which campaigns used it.
Direct traffic gets the same scrutiny. Kite looks at which pages receive the most direct visits. A homepage with plenty of direct traffic is normal, because people type your address. A pricing page or a campaign landing page with mostly direct traffic usually means the links pointing to it went out without tags, often in emails, PDFs, or messages shared by hand.
Kite's own analytics works the same way on sites it hosts. It sorts each visit into paid search, paid social, email, AI assistants, organic search, organic social, referral, or direct, based on the link's tags and the site the visitor came from. It recognizes mediums such as cpc, paid_social, and email, so an email tagged newsletter with no referring site gets counted as direct there too.
Find where tracking breaks before a visit is counted
Kite tests the tracking itself, because a perfectly tagged link is worthless if the visit never gets recorded with its tags intact. It opens a sample of your tagged links in a browser and checks that the tags are still on the address when the page finishes loading. A redirect from an old campaign address, a move from http to https, or a link shortener can drop everything after the question mark, which turns a tagged click into a direct visit.
Next, Kite renders your homepage, your campaign landing pages, and the pages along your signup or checkout path, and it reads which analytics tags each one loads. A page that loads no tag records nothing. A page that loads Google's tag twice, once directly and once through Google Tag Manager, doubles its page views. A page that reports to a different Google Analytics property sends its data somewhere your team isn't looking.
Kite also looks for the places where a visitor's original source gets replaced. When your own domain, your app's domain, or a payment page such as checkout.stripe.com shows up as a source of conversions, the credit for those conversions was lost at that step. The same thing happens when your own website uses UTM tags on links between its own pages, because each internal click overwrites the campaign that brought the visitor in. Kite lists every internal link it finds carrying tags.
When your events flow through Segment, Kite checks whether they arrive where they should. It reads each source's daily event counts and each destination's delivery numbers, so a drop that starts on the day of a release points to the release rather than to your campaigns.
What naming convention should you use for UTM campaign links?
A good UTM naming convention uses lowercase letters, one separator, a short fixed list of mediums your analytics tool already recognizes, and campaign names built from the same parts in the same order every time. Kite writes that convention for your team from the audit, because the right list of sources and campaigns depends on the channels you actually use.
A typical convention from Kite covers each tag like this:
- Source names the specific site or sender, such as
linkedin,google,mailchimp, orpartner-acme. Kite picks one spelling for each source you use and lists it. - Medium names the kind of traffic, chosen from the values your analytics tool sorts into the right channel, such as
cpcfor paid search,paid_socialfor paid social,socialfor unpaid posts,emailfor email, andreferralfor partner links. - Campaign names the effort, built from the same parts in the same order, such as
2026-10-webinar-ai-visibility. The date at the front keeps campaigns in order when you sort a report. - Content tells apart the versions inside one campaign, such as two ad images or the header and footer links in one email.
- Term holds the paid search keyword when you use one.
The convention also covers the rules that keep reports clean. Everything is lowercase, because most analytics tools treat LinkedIn and linkedin as different values. Words are joined with hyphens rather than spaces. Tags go only on links that point to your site from somewhere else, never on links between your own pages. Personal details, such as a recipient's email address, stay out of tags entirely.
If your team already has a convention that mostly works, Kite keeps it and fills the gaps rather than starting over. Either way, Kite saves the final version to your team's knowledge base, so every person and every later piece of Kite's work uses the same reference.
Clean up past reports and fix what's broken
Kite fixes the problems it can change for you and gives exact steps for the ones that live in another tool's settings. On a site Kite hosts, or one it works on through your GitHub repository, it can add a missing analytics tag, remove a duplicate one, fix a redirect that strips tags, and take UTM tags off your internal links. It shows you the changes first, and they go live when you approve them.
Most analytics tools don't let anyone rewrite the tags on visits they've already recorded, so Kite makes the existing data readable instead. In PostHog, it suggests the mappings that put mistyped sources back under the right channel. In Mixpanel, it can build a lookup table or a formula-based property that groups the spelling variants under one name, so a breakdown by source reads the way your team talks about it. In Google Analytics, it tells you which domains to add to the unwanted referrals list and how to set up cross-domain measurement when your site and app live on different domains.
Kite ranks every finding by how much it distorts the numbers you make decisions with. A payment page taking credit for every purchase comes first, because it hides which campaigns produce revenue. A source spelled two ways on a small campaign comes later.
Keep new links on the convention and check again
Kite uses the convention on every campaign link it creates, so the cleanup doesn't decay the moment the audit ends. When it builds a landing page campaign, an outbound email, or a set of social posts, each link carries the agreed source, medium, and campaign, plus a content tag for each message or version. It records the campaign and its tags in your knowledge base, which gives your team a running list of what was tagged and when.
Links your team creates by hand still need checking. Ask Kite to repeat the audit every month, and each run compares the new tag values with the convention and with the last audit. A new spelling, a medium that slips into Unassigned, or a landing page that suddenly stops recording visits shows up within weeks. On a site Kite hosts, conversion tracking is added automatically every time you publish, so new pages start measuring from the day they go live.
What you get
A map of your current tagging
Every source, medium, and campaign value your tools recorded, grouped by what it means, with the visits and conversions under each spelling.
A channel check
Which tags land in Unassigned or the wrong channel, and which pages receive more direct traffic than they should, with the likely untagged links behind them.
A list of broken tracking
Links that lose their tags, pages with missing or duplicate analytics tags, domains that steal credit for conversions, and internal links carrying UTM tags.
A written naming convention
The approved source, medium, and campaign values for your channels and the rules for using them, saved to your knowledge base.
Fixes and steps
The changes Kite made to your site or tools, and exact instructions for the settings only you can change.
A baseline for next time
The audit saved so the next run can show what was fixed and what drifted.
How to get started
Start by telling Kite what's bothering you about your reports, in the Kite web app or in Slack. You might say, "Our campaign numbers don't add up and half our traffic shows as direct. Can you audit our UTM tags and tracking?" or "Write us a UTM naming convention and check whether our tracking is working."
Kite proposes the scope from what it already knows about your business: the channels to cover, the analytics tool to treat as the main record, and the pages where conversions happen. Confirm or change it, and Kite starts reading.
Connect the analytics tools your team uses, such as Google Analytics, PostHog, or Mixpanel, so Kite can read the tag values they recorded. Connect Segment if your events pass through it. If your site is one Kite built and hosts, its built-in analytics are already there and no connection is needed. If your team keeps a spreadsheet of campaign links, share that too.
Reading your data and testing your links is routine, so Kite does that on its own and reports back in the conversation. It asks for your approval before it publishes changes to your website. When you're happy with the convention, ask Kite to run the audit every month and tell you when something drifts.
Integrations used to audit your UTM tags and tracking setup
Kite reads your tag values and tracking from the analytics tools your team already uses. On a site Kite hosts, its built-in analytics cover the same ground without any connection.
Read the tags your analytics recorded
Kite reads sessions and conversions by source, medium, and campaign, the channel groups on your property, and your attribution settings to see where tagged visits land and how much falls into Unassigned or direct.

Kite runs PostHog's UTM audit to find mistyped and unmatched sources, breaks your conversion goals down by UTM source and campaign, and suggests the mappings that put stray sources back under the right channel.

Kite reads the values stored for each UTM property, breaks funnels and retention down by campaign, and builds lookup tables or formula-based properties that group spelling variants under one name.
Common questions
Which three UTM parameters should every campaign link have?
Every campaign link should carry a source, a medium, and a campaign name: utm_source, utm_medium, and utm_campaign. Source says where the click came from, medium says what kind of traffic it is, and campaign says which effort it belongs to. Add utm_content when you need to tell versions apart inside one campaign, and utm_term for paid search keywords.
Should I put UTM tags on links between my own pages?
No. Tags belong only on links that bring people to your site from somewhere else. When someone clicks a tagged link between two of your own pages, most analytics tools replace the campaign that originally brought them in, so the real source loses credit. Kite lists every internal link carrying tags and removes them on sites it can edit.
Can I fix the UTM tags on traffic my analytics already recorded?
Usually not directly. Most analytics tools store tags as they arrived and don't let you rewrite past visits. You can still make old reports readable. PostHog lets you map stray sources to the right channel, and Mixpanel lets you group variants with a lookup table or a calculated property. Kite sets those up where your tools allow it, then applies the convention to every new link so the problem stops growing.
How often should I audit my UTM tags and tracking?
Audit after any change that touches tracking, such as a site redesign, a new form tool, a new domain, or a new person running campaigns, and check monthly in between. Tagging drifts a little with every campaign someone builds by hand, and tracking usually breaks during site changes. A monthly check keeps the damage to a few weeks of data.
How much does a UTM and tracking audit with Kite cost?
The audit has no separate price. It uses your plan's usage like any other work you give Kite. Kite's free plan includes usage, and the Growth plan costs $100 a month with $100 in AI credits included. Pricing is per workspace, so adding teammates doesn't change the price. Check current prices at kite.ai/pricing.
