The UTM builder that shows you how your URLs will be tracked

Every other UTM builder just generates a URL. This one grades it, classifies it into a channel, and reverse-parses existing tagged links. Because a URL you can't read is a URL that breaks your analytics.

Channel classification preview A-F hygiene score Reverse URL parser Bulk + QR + CSV
Build
Fill the fields. Output appears on the right in real time.
Advanced GA4 fields (optional)
Auto-lowercase recommended
Your tagged URL
Copy, share, or scan. Every change above updates this panel live.
Fill the form to see your tagged URL
0 URLs
URLChannelGrade
Paste a tagged URL
We'll break it down into plain English, grade its hygiene, and show how Clickport would classify it.

Recent builds

    Your last 10 tagged URLs will appear here.

    Your saved presets

      Save your team's source/medium combos for reuse. Stored in your browser, never uploaded.

      Why this is not just another UTM builder

      Three features no other builder has, because none of them are an analytics tool. Channel classification preview, A to F hygiene score, reverse URL parser. Everything below is depth you can tap into when you need it.

      The five UTM parameters

      Tap any parameter to see what it does, when to use it, and the mistakes to avoid.

      utm_sourcerequired

      The platform, site, or newsletter name where the click came from. The most specific identifier of where traffic originates.

      Good values: facebook, newsletter, google, partner-site.com. Keep it lowercase, one concept per source.

      Common mistake: putting a campaign name here. utm_source=spring-sale is wrong. The source is where the link was clicked (e.g. facebook), not what the click was about.

      utm_mediumrequired

      The channel or vehicle. This is the single strongest signal analytics tools use to classify traffic.

      Standard values: cpc or ppc (paid search/social), social (organic social), email, newsletter, referral, affiliate, display, video, organic, podcast, sms.

      Anything outside these values lands in Referral or a generic bucket. If your team invents utm_medium=blog-share, analytics treats it as Referral, not Social. Pick from the standard list.

      utm_campaign

      The named marketing initiative. spring-2026-launch, black-friday, webinar-product-demo.

      Lowercase, hyphens not spaces. Prefix with year or quarter if you re-run annually: 2026q2-launch. Otherwise last year's launch merges with this year's launch in reports.

      Do not cram creative variants or source info here. Same campaign with three creatives: same utm_campaign, different utm_content.

      utm_content

      Which creative or variant was clicked. This is your A/B testing field.

      Examples: banner-a vs banner-b, footer-cta vs hero-cta, v1 vs v2.

      If you're running one campaign with three ads, the three links share utm_campaign and differ only in utm_content. That way your analytics can roll the campaign up or break it down by creative on demand.

      utm_termpaid only

      Historically for paid search keywords. Google Ads auto-populates this with {keyword} in your ad URLs, so the exact keyword the searcher used shows up in analytics.

      Leave this blank for anything other than paid search. Some teams use it for retargeting audience IDs, which is valid, but do not invent a use for it on every campaign. An email campaign with utm_term is usually a tagging mistake someone will spend two hours untangling later.

      How UTMs become channels

      16 channels, evaluated in priority order. Tap any channel to see the exact rules and a sample tagged URL.

      Paid channels
      Display

      Triggered by dclid in the URL, or by utm_medium=display, banner, or cpm.

      https://site.com/?utm_source=google&utm_medium=display&utm_campaign=banner-2026
      Paid Search

      Triggered by gclid or msclkid (unless source is social/shopping), or by a search-engine source combined with a paid medium.

      https://site.com/?utm_source=google&utm_medium=cpc&utm_campaign=spring-2026
      Paid Social

      Triggered by fbclid + paid medium, or any of ttclid, li_fat_id, twclid, rdt_cid, pnclid, or a social source combined with a paid medium.

      https://site.com/?utm_source=facebook&utm_medium=cpc&utm_campaign=launch
      Paid Video

      Video platform source combined with a paid medium.

      https://site.com/?utm_source=youtube&utm_medium=cpv&utm_campaign=preroll-q2
      Paid Shopping

      Shopping-site source with a paid medium, or utm_medium=shopping, or utm_medium=pla.

      https://site.com/?utm_source=google&utm_medium=shopping&utm_campaign=catalog-feed
      Affiliates

      Triggered by utm_medium=affiliate, irclickid (Impact.com), or a source that matches a known affiliate network (Awin, CJ, ShareASale, etc.).

      https://site.com/?utm_source=partner-name&utm_medium=affiliate&utm_campaign=q2-partnership
      Owned channels
      Email

      Triggered by utm_medium=email or newsletter, or by a source matching an email platform (mailchimp, klaviyo, hubspot, sendgrid, activecampaign, etc.).

      https://site.com/?utm_source=newsletter&utm_medium=email&utm_campaign=2026-03-update
      SMS

      Either utm_medium=sms or utm_source=sms.

      https://site.com/?utm_source=sms&utm_medium=sms&utm_campaign=flash-sale
      Audio

      utm_medium=podcast or audio, or a source matching a podcast platform (spotify, apple podcasts, overcast, castbox, etc.).

      https://site.com/?utm_source=show-name&utm_medium=podcast&utm_campaign=episode-123
      Organic channels
      Organic Shopping

      Source matches an organic shopping site (amazon, etsy, ebay, walmart, etc.) with no paid medium. Evaluated before Organic Search so shopping.google.com does not miscategorize.

      Typical: referrer from amazon.com with no UTMs. No sample URL needed.
      AI Search

      Source matches an AI answer engine: ChatGPT, Perplexity, Claude, Gemini, Copilot, Phind, Kagi, DeepSeek, Grok, Meta AI, You.com.

      For tagged campaigns: utm_source=chatgpt works. For untagged, the referrer URL usually carries the platform name.

      Organic Search

      Source matches a traditional search engine (google, bing, duckduckgo, yandex, baidu, etc.) with no paid medium. Or utm_medium=organic.

      Typical: referrer from google.com with no UTMs. Or ?utm_source=google&utm_medium=organic.
      Organic Video

      Source matches a video platform (youtube, vimeo, twitch, rumble, etc.) with no paid medium.

      https://site.com/?utm_source=youtube&utm_medium=video&utm_campaign=channel-link
      Organic Social

      Social network source (facebook, linkedin, x, reddit, threads, bluesky, etc.) with no paid medium. Or utm_medium=social.

      https://site.com/?utm_source=linkedin&utm_medium=social&utm_campaign=post-march
      Fallback
      Direct

      No referrer, no UTM parameters, no click IDs. Someone typed your URL, clicked a bookmark, or came from an app that stripped referrers (Slack, iOS Mail, some newsletter clients).

      Inflated Direct traffic is often untagged campaign clicks. Tag your links.

      Referral

      The catch-all. Everything that has a referrer or tags but does not match any of the channels above lands here.

      A Referral-heavy report usually means inconsistent utm_medium values. Audit and standardize.

      Full reference: UTM tracking docs.

      Common UTM mistakes

      Six mistakes our hygiene score flags, with the exact reason each one breaks your analytics.

      Uppercase letters in values

      Facebook and facebook are two different sources to analytics. Tools do not normalize case for you.

      Result: the same campaign appears as two separate rows. Totals are wrong. Reports split.

      Fix: lowercase everything. Always. Enable the auto-lowercase toggle in the builder.

      Spaces in values

      utm_campaign=spring sale gets URL-encoded to spring%20sale in the URL. Browsers handle it, but your dashboard shows it literally with the %20. Ugly in reports, and any tool that re-encodes the URL (email clients, ad platforms) may produce spring%2520sale (double-encoded).

      Fix: hyphens. spring-sale.

      URL syntax characters in values

      Characters &, =, ?, #, +, % are reserved URL syntax. Using them inside a parameter value breaks parsing.

      utm_campaign=Q3&Q4 becomes two parameters: one called utm_campaign with value Q3, and a separate one called Q4. Half your data vanishes.

      Fix: q3-q4, or percent-encode deliberately (rare in practice).

      Duplicate parameters

      Destination URL already has ?utm_source=google, and you add &utm_source=facebook. Most analytics tools keep one at random; some concatenate; some drop both.

      You will not know which one was used until the numbers look off. The hygiene score flags this automatically.

      Fix: strip existing UTMs from your destination URL before building.

      utm_term on non-paid campaigns

      utm_term was designed for paid search keywords. Adding it on an email blast or social post does not break anything technically, but it misleads whoever reviews the report.

      A teammate opens the Campaigns panel, sees utm_term=early-access on an email, and spends an hour figuring out why an email is categorized as paid search.

      Fix: leave utm_term blank unless the medium is cpc, ppc, or similar.

      Campaign names that collide over time

      utm_campaign=launch three years in a row gives you three rows called launch that merge in any report without a date filter. Year-over-year comparisons become impossible.

      Fix: prefix with year or quarter. 2024-launch, 2025-launch, 2026q2-launch. Year-over-year analysis becomes a one-click filter.

      Platform cookbook

      Ready-to-copy tagged URL templates for every major platform. Tap a platform for the sample.

      Facebook ads

      Classifies as Paid Social. Facebook appends fbclid automatically.

      https://site.com/?utm_source=facebook&utm_medium=cpc&utm_campaign=spring-2026&utm_content=video-ad-a
      Facebook organic posts

      Classifies as Organic Social. No click ID; source + medium alone.

      https://site.com/?utm_source=facebook&utm_medium=social&utm_campaign=march-launch-post
      LinkedIn ads

      Classifies as Paid Social. LinkedIn appends li_fat_id.

      https://site.com/?utm_source=linkedin&utm_medium=cpc&utm_campaign=b2b-q2&utm_content=carousel
      LinkedIn organic / InMail

      Classifies as Organic Social.

      https://site.com/?utm_source=linkedin&utm_medium=social&utm_campaign=founder-post
      Google Ads (search)

      Classifies as Paid Search. Google appends gclid. Set the final URL in Google Ads to the template below with {keyword} auto-fill.

      https://site.com/?utm_source=google&utm_medium=cpc&utm_campaign=brand-terms&utm_term={keyword}
      Google Ads (display)

      Classifies as Display.

      https://site.com/?utm_source=google&utm_medium=display&utm_campaign=remarketing-2026
      Google Shopping

      Classifies as Paid Shopping.

      https://site.com/?utm_source=google&utm_medium=shopping&utm_campaign=catalog-feed
      X / Twitter ads

      Classifies as Paid Social. X appends twclid.

      https://site.com/?utm_source=twitter&utm_medium=cpc&utm_campaign=launch-thread
      Reddit ads

      Classifies as Paid Social. Reddit appends rdt_cid.

      https://site.com/?utm_source=reddit&utm_medium=cpc&utm_campaign=subreddit-ad
      TikTok ads

      Classifies as Paid Social. TikTok appends ttclid.

      https://site.com/?utm_source=tiktok&utm_medium=cpc&utm_campaign=spark-ad
      Email campaigns

      Classifies as Email. Source can be the list name, the tool, or the broad label "newsletter".

      https://site.com/?utm_source=newsletter&utm_medium=email&utm_campaign=2026-03-update&utm_content=hero-cta
      Podcast mentions

      Classifies as Audio. Use a short show name as the source and the episode as the campaign.

      https://site.com/?utm_source=show-name&utm_medium=podcast&utm_campaign=episode-123
      QR code / offline print

      For offline scans, there is no referrer. UTMs are the only signal of where the click came from.

      https://site.com/?utm_source=qr&utm_medium=offline&utm_campaign=conference-2026

      Use the Generate QR button in the builder to produce a scannable code from your tagged URL.

      Advanced topics

      Edge cases and advanced patterns for when UTMs meet the real web.

      UTMs vs click IDs (gclid, fbclid, etc.)

      Click IDs are ad-platform identifiers appended automatically: gclid (Google), msclkid (Microsoft), fbclid (Facebook), ttclid (TikTok), li_fat_id (LinkedIn), twclid (X), rdt_cid (Reddit), pnclid (Pinterest), dclid (Google Display), irclickid (Impact).

      They carry information UTMs do not (specific ad, ad group, keyword) and they influence classification. A gclid on a Facebook-tagged URL still classifies as Paid Search, because the click came through Google Ads.

      Do not strip click IDs from URLs. Let them ride alongside your UTMs. Clickport uses both.

      UTMs in redirect chains

      If your destination is a redirect (site.com/r/abc123site.com/landing), make sure UTMs land on the final URL, not just the redirect entry point. Most ad platforms strip custom query params across redirects unless you explicitly append them.

      Build the tagged URL against the final destination. Let the redirect preserve the query string via server config (most do) or append them in the redirect logic.

      UTMs in single-page apps

      SPAs use client-side routing (pushState). UTMs in the initial URL load fine. If the visitor navigates to /page-b via internal links, the URL changes and the UTMs are stripped.

      Clickport captures UTMs on the first page-load event per session and pins them to the session. Internal SPA navigation does not lose attribution.

      UTMs and URL shorteners

      Shorteners like bit.ly and TinyURL preserve query parameters across the redirect if the long URL has them. Build the shortened link from the tagged URL, not the clean one. Otherwise you lose attribution at the redirect.

      QR codes work differently. They encode the full URL directly (no redirect). Tagged URL in, tagged URL scanned.

      UTMs and Consent Mode v2

      Consent Mode v2 (Google) affects cookie-based tracking. UTMs are URL-based, not cookie-based, so they work identically regardless of consent state.

      The analytics tool reading the UTMs may be gated by consent. The tags themselves are not. Clickport does not require consent, so UTMs are captured on every session.

      First-touch vs last-touch attribution

      UTMs label a single click. Whether that click gets credit for the conversion depends on the attribution model.

      First-touch: the first UTM of the session wins. Good for campaigns whose job is to acquire a visitor.

      Last-touch: the last UTM of the session wins. Good for campaigns whose job is to convert a visitor.

      Clickport uses first-touch per session by default (see UTM tracking docs).

      Frequently asked questions

      Is this tool free? Do I need an account?

      Yes, completely free. No signup, no email, no account. The builder runs entirely in your browser. Your URLs, presets, and history stay in your browser's localStorage and are never uploaded anywhere.

      What does the channel classification preview actually do?

      It runs the same classification logic Clickport uses on real traffic. Your UTM source, medium, and any click IDs get fed through a 16-channel decision tree and you see the result live. The preview matches how your URL would appear if you clicked it on your own site with Clickport installed.

      How does the A-F hygiene score work?

      You start at A. Each hygiene issue (uppercase letters, spaces, special characters, duplicate params, mismatched medium with utm_term) drops the grade by one. If required fields are missing, you get F regardless. The issues list tells you exactly what to fix.

      Can I paste a URL that already has UTMs?

      Yes. Switch to the Reverse parse tab and paste the URL. You get a plain-English breakdown, the hygiene grade, the classified channel, and a one-click button to load the parsed values back into the builder so you can edit them.

      What is bulk permutations mode?

      In Bulk permutations mode, each field accepts comma-separated values. facebook,linkedin in Source and cpc,social in Medium gives you four URLs (one per combination) in a table with channel classification and hygiene grade for each. Export as CSV or copy all at once.

      Are my URLs stored anywhere?

      No. Everything runs in your browser. Your recent builds and saved presets are stored in your browser's localStorage so they survive a page refresh, but they never leave your machine. Clear your browser data and they are gone. We do not log the URLs you build.

      How is this different from the free UTM builder Plausible just released?

      Plausible's tool has five input fields and a copy button. This one also has channel classification preview, A-F hygiene scoring, reverse URL parsing, bulk permutations, CSV export, QR codes, saved presets, and shareable URL state. The hook is the three unique features: only an analytics tool can credibly show you how your UTMs will be classified.

      Can I share a builder state with my team?

      Yes. Click "Copy shareable link" and send the resulting URL. When your teammate opens it, the builder prefills with the same values. No account, no backend: the state is encoded in the URL.

      See your real campaigns in a dashboard

      Tagging URLs is step one. Step two is watching them perform. Clickport shows every campaign, every channel, every conversion. Cookieless, GDPR-compliant, 30-day free trial.

      Start free trial