Skip to content

UTM Builder

Build a tracked campaign link from a base URL and UTM parameters, every value encoded, every empty field skipped.

How do you add UTM parameters to a URL?

Three months from now, someone will ask which channel actually drove the signups, and every untagged link will answer "direct". UTM parameters are how you avoid that conversation. They're five short tags: utm_source, utm_medium, utm_campaign, utm_term, and utm_content: appended to a URL after a question mark as name=value pairs joined with ampersands, and your analytics tool reads them to learn where each visitor came from. Enter the destination and the fields you need; the builder assembles the finished link with every value URL-encoded and every empty field left out.

The values are yours to define; the reports stay readable only if the naming holds. Source names where the traffic comes from (newsletter, google, linkedin) and medium names the channel type (email, cpc, social), while campaign names the push: spring-sale, q3-launch. Analytics tools treat values as case-sensitive, so "Email" and "email" land as two separate report rows: pick lowercase before the first link ships. Term and content are optional refinements, one mostly for paid keywords, the other for telling two versions of the same placement apart.

Teams that build links every week keep a log, in Ferra, that's a table with one row per URL and its parameters, so next quarter's campaign names match this quarter's.

How the UTM Builder works

Six fields in, one link out. Give it the destination page and as many of the five campaign values as you're using; each filled field is appended as its own utm_ parameter, values are encoded so spaces and special characters survive the trip, and blanks add nothing. The finished link appears immediately, ready to copy.

Website URL
The full destination address, including https://. This is the page visitors actually land on.
Campaign source
Where the link will live: newsletter, google, linkedin, partner-site. Becomes utm_source.
Campaign medium
The channel type: email, cpc, social, referral. Becomes utm_medium.
Campaign name
The specific push or promotion, like spring-sale or q3-launch. Becomes utm_campaign.
Campaign term
Optional, mostly for paid search keywords. Becomes utm_term and is left out when empty.
Campaign content
Optional, for telling two versions of one placement apart: header-cta versus footer-cta. Becomes utm_content and is left out when empty.

Reading the finished link

Start with https://www.example.com/pricing, set source to newsletter, medium to email, and campaign name to spring sale, leaving term and content blank. Out comes https://www.example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring+sale. Two details matter there: the space in "spring sale" is encoded as a plus sign, and the two empty fields leave no trace in the link.

Casing is where the money leaks. Tag half your links utm_medium=Email and the other half utm_medium=email, and analytics counts two different mediums: the channel's traffic splits across two report rows, and both look smaller than reality. Agree on lowercase, and on a separator (hyphens read well), before the first link goes out.

When to use the UTM Builder

Any link that leaves a channel you control deserves tags if you'll ever want to know whether it worked: a newsletter send, a social post, a paid placement, a partner mention, a QR code on a printed flyer. Skip the tags and most of that traffic lands in analytics as direct or a generic referral, where the newsletter and the tweet look identical.

Tagging also settles attribution fights before they start. A launch going out across five channels at once means five links, each with its own source and medium, built in one sitting and logged somewhere shared, so the after-action review reads from data instead of from whoever argues loudest.

Tips for the UTM Builder

Tagging links is easy; tagging them the same way for a year is not. These habits protect the reports.

Standardize casing
Lowercase everything, always. Email and email count as two different values in analytics tools, and mixed casing quietly splits your report rows.
Keep a naming sheet
Write down the approved sources and mediums plus the campaign name format, and check every new link against it. Consistency beats any particular convention.
Don't tag internal links
UTM parameters on links between your own pages restart the visitor's session in most analytics tools and misattribute the traffic. Tag inbound links only.
Use hyphens, not spaces
spring-sale reads cleanly in an address bar; the encoded spring+sale is easier to misread. Both encode correctly, hyphens are just kinder to humans.
Test the finished link
Paste it into a browser before it ships. A typo in the base URL costs nothing to catch now and plenty after ten thousand sends.

Related templates

Browse all templates