UTM Link Generator - Campaign URL Builder with Channel Check

    Campaign parameters appended to an address you were going to share anyway, with two checks a hand-built link never gets: which channel group the pair lands in, and whether an anchor will throw the tracking away.

    Parameters

    Enter data for calculations

    The page the visitor should land on

    Where the visit came from, named as a place

    How the visit traveled

    The effort this link belongs to

    Campaign identifier from the ad platform

    Keyword or audience

    Which of several identical links was clicked

    Applies to the campaign values, never to the address

    Form progress0 / 4 fields

    💡 Fill in all required fields to unlock the calculate button

    Five short words at the end of an address decide what your reporting can tell you

    Analytics can see that someone arrived. It cannot see which newsletter, which post or which of the four buttons in that newsletter they clicked, unless the link itself carries the answer. Campaign parameters are that answer: utm_source, utm_medium, utm_campaign and three optional companions, appended to the address you were going to share anyway.

    This builder takes the address and the values, hands back the finished link, and tells you two things a plain string concatenation cannot. First, which default channel group the pair you typed will be filed under, so a medium like qr-print is caught here rather than three weeks later when the report shows a pile of Unassigned. Second, whether the address itself will quietly destroy the tracking: an address ending in an anchor, or one that already carries campaign parameters from a previous round, both do that.

    A worked case: liczgrupa.pl/en/tools#pricing with source newsletter, medium email and campaign autumn-launch comes back as https://liczgrupa.pl/en/tools?utm_source=newsletter&utm_medium=email&utm_campaign=autumn-launch#pricing, filed under Email. The anchor is still at the end, where it belongs, and the parameters sit in front of it, where they are actually read.

    Six fields, and what each one has to answer

    1. Destination address. The page you want people to land on. The scheme can be left off and https is added for you. If the address already has a query string, its parameters are kept and the campaign values are appended after them.
    2. utm_source. Where the visit came from, named as a place: newsletter, facebook, partner-blog. One word, no spaces, always spelled the same way. This is the field people most often improvise, and every improvisation becomes a separate row in the report.
    3. utm_medium. How the visit traveled: email, cpc, social, referral, affiliate. This is the field that decides the channel group, so it is the one worth taking from the table below rather than inventing.
    4. utm_campaign. The name you will look for in six months. autumn-launch beats campaign2, and a date in the name beats a date in your memory.
    5. utm_id, utm_term, utm_content. Optional. The ID is what a reporting tool uses to join a campaign to what it cost. Term carries a keyword or an audience. Content separates two links that are otherwise identical, which is the only way to tell a header button from a footer button in the same email.
    6. Lowercase the values. On by default, and it applies only to the campaign values, never to the path of your address. Read the section on capital letters below before switching it off.

    The six parameters, side by side

    Three of them carry the attribution and three refine it. The distinction that matters is not which are optional, it is which question each one answers, because a value in the wrong field is invisible rather than wrong.

    Parameter Required Question it answers Good value
    utm_sourceyesWhich place sent themnewsletter, facebook
    utm_mediumyesBy what means they traveledemail, cpc
    utm_campaignyesWhich effort it belongs toautumn-launch
    utm_idnoWhat it cost, by joining to the ad platformAW-8891
    utm_termnoWhich keyword or audiencevat-calculator
    utm_contentnoWhich of several identical linksheader-cta

    Only utm_content is allowed to differ between two links in the same message. Change the campaign name instead and the two buttons become two campaigns, each with a fraction of the numbers and no way to add them back together.

    The medium you type decides the channel group you get

    Reporting tools file traffic into channel groups automatically, and the rule is mostly a pattern match on the medium, with the source used to split paid traffic between search, social, video and shopping. The table below lists the values that match a group. Anything outside it lands in Unassigned, which is the single most common reason a campaign appears to have produced no visits at all.

    Medium you type Source it needs Group it lands in
    cpc, ppc, paid, anything containing cpa search enginePaid Search
    the same paid patternsa social networkPaid Social
    the same paid patternsanything elsePaid Other
    display, banner, cpm, interstitial, expandableanyDisplay
    email, e-mail, e_mailany, or the source itself says emailEmail
    affiliateanyAffiliates
    organicany, or a search engine on any mediumOrganic Search
    social, social-media, social-network, smany, or a social network on any mediumOrganic Social
    referral, app, linkanyReferral
    sms, audio, pushanySMS, Audio, Mobile Push
    newsletter, qr, print, partner, bloganyUnassigned

    Read the last row twice. newsletter is a perfectly sensible English word for what you are doing, and it matches nothing. It belongs in utm_source, paired with the medium email. The lists of recognized search engines and social networks are maintained by the analytics vendor and are longer than the ones checked here, so a source this tool does not recognize may still be classified correctly on their side. A medium outside the patterns above, though, is unassigned everywhere.

    Three links, taken apart

    A paid search ad. Destination example.com/pricing, source google, medium cpc, campaign brand-defense, ID AW-8891.
    Result: https://example.com/pricing?utm_source=google&utm_medium=cpc&utm_campaign=brand-defense&utm_id=AW-8891, filed under Paid Search. The ID is what lets the report put spend next to the clicks.
    Two buttons in one email. Same destination, same source and medium, campaign autumn-launch, and the only thing that differs is content: header-cta on one, footer-cta on the other.
    Result: two links identical except for utm_content, and a report that can finally answer whether anyone scrolls to the bottom.
    A poster in a shop window. Destination example.com/menu, and the instinct is source qr, medium print.
    Result: Unassigned, flagged before publication. Turning it round, source window-poster and medium referral, gives Referral and keeps the poster distinguishable from every other offline placement.
    An anchor in the middle of an address. Destination example.com/guide#step-4, source blog, medium referral.
    Result: https://example.com/guide?utm_source=blog&utm_medium=referral&utm_campaign=...#step-4. Written the other way round, with the parameters after #step-4, the link still opens the right section and records 0 attributed visits.
    A link that already had parameters. Destination example.com/x?utm_source=old&ref=partner, source facebook, medium social.
    Result: https://example.com/x?ref=partner&utm_source=facebook&utm_medium=social&utm_campaign=.... The stale utm_source=old is dropped rather than duplicated, ref=partner is untouched, and the removal is reported rather than done silently.

    Four ways a tracked link stops tracking

    Parameters written after the anchor. page#section?utm_source=x looks right and records nothing. Everything after the # stays in the browser and is never sent to the server, so the parameters are not merely ignored, they never arrive. The fix is to put them before the anchor, which this builder does for you.
    The same source spelled two ways. Facebook and facebook are two sources, not one, because the comparison is case sensitive. One campaign then appears as two rows, each with half the numbers, and neither looks worth repeating. Lowercasing every value is the cheapest habit in this whole list.
    A medium nobody recognizes. facebook-ads as a medium does not match the paid patterns, so a paid campaign is filed as if it were free. Source facebook with medium cpc or paid-social says the same thing and lands in the right group.
    Tagging your own internal links. A campaign parameter on a link between two of your own pages restarts the session attribution, so the visitor who arrived from a paid ad is recorded as arriving from your own newsletter banner instead. Campaign parameters belong on links that cross into your site from outside it, and nowhere else.

    Frequently asked questions

    Which parameters are actually required?
    Three: utm_source, utm_medium and utm_campaign. A link carrying only a source is accepted by the browser and produces a half-attributed visit, which is worse than none because it looks like data. The builder refuses to produce a link until all three are filled.
    Do the parameters change what the visitor sees?
    No. They are read by the analytics tag and ignored by the page itself. What they do change is the address in the browser bar, which is why a link meant to be read aloud, printed, or shortened by a chat app is usually worth passing through a link shortener afterwards.
    Should spaces become hyphens or underscores?
    Either works, and a plain space works too since it is encoded as %20. Hyphens win on readability: the encoded form is unreadable in a report cell, and an address containing %20 is the one people most often break while copying it out of a chat window. Pick one separator and use it in every campaign you ever name.
    Why did my campaign end up in Unassigned?
    Almost always the medium. It is matched against a fixed set of patterns, and a value outside them matches nothing, no matter how descriptive it is. newsletter, qr, print, blog and partner are all real answers to the wrong question: they describe the source, not the medium. The builder names the group before you publish the link, which is the only moment the fix is free.
    Can I add parameters to a link that already has some?
    Yes, and this is where hand-built links go wrong. Anything that is not a campaign parameter, a product ID or a search term for instance, is kept exactly as it was. A campaign parameter already present is removed and rebuilt from your fields, because two copies of utm_source in one address are read as the first by some tools and the last by others.
    What is utm_id for, and can I skip it?
    It carries a campaign identifier from the advertising platform, and it is what lets a reporting tool join clicks to the amount you paid for them. Skipping it costs nothing on an unpaid channel such as a newsletter or an organic post. On anything you are billed for, it is the difference between knowing you got 400 visits and knowing what those 400 visits cost.
    Is there a length limit?
    Nothing in the specification, but practice draws a line near 2,000 characters, where some older servers and mail clients start truncating. The builder flags a link that crosses it. Reaching that length usually means a campaign name that is really a sentence.
    Does everything happen in my browser?
    Yes. The address is parsed, the values encoded and the group decided by code running on this page. Nothing is sent anywhere, which matters because a campaign link often names an unannounced product, a price or a partner before any of it is public.

    Related tools

    SEO Meta Tag Generator

    Builds the title, description and social preview tags for the page this link points at, and measures both in characters and in pixels - Open the tool

    UUID Generator

    Identifiers for the rows your campaign creates, in versions 1, 4 and 7, with a validator that reads the version back out - Open the tool

    QR Code Generator

    Turns the tracked link into a printable symbol, drawn in your browser as a vector image - Open the tool

    Barcode Generator

    EAN-13, EAN-8 and UPC-A symbols with the check digit calculated and the prefix explained - Open the tool

    Business Name Generator

    Name candidates with a matching domain form, useful when the campaign is launching something that has no name yet - Open the tool

    Table Generator

    Turns a pasted range of campaign links into Markdown or HTML for a brief or a README - Open the tool

    Similar calculators from this section