UTM Campaign URL Builder

Build campaign links that survive an existing query string, keep the fragment where it belongs, and encode properly. Then check a whole set for the naming drift that quietly splits one source into four rows in your report.

Build one

Check a set of links

Paste the campaign links you are about to use, one per line. The check worth running is the last one: values that differ only by case or separator become separate rows in your report, and nobody notices until the quarter is over.

Build a set at once

Give several values on a line, separated by commas, and every combination is produced. Useful when the same page is being promoted across a handful of sources and campaigns.

What actually goes wrong

An existing query string. A tool that glues ?utm_source=… onto a URL that already has ?ref=home produces a link with two question marks, and everything after the second one is lost. This one parses the URL properly, so existing parameters survive and the fragment stays at the end where it has to be.

Spaces. A campaign typed as spring sale has to be encoded before it is a working link. Pasted into a message unencoded, it breaks at the space and half the link becomes plain text.

Naming drift. This is the expensive one. facebook, Facebook, FB and face-book are four rows in your analytics and one source in reality. Nothing warns you, the report simply splits, and by the time anyone notices the campaign is over. The check above compares every value across the whole set with case, hyphens and underscores ignored, and tells you when two spellings will not group together.

Source, medium, campaign — which is which

Source is where the traffic came from: newsletter, facebook, partner-blog. Medium is the kind of link: email, cpc, social, affiliate. Campaign is the thing you are running: spring-sale, launch-2026.

The usual confusion is between source and medium. A rule that works: if you stopped running ads tomorrow, source is the place that would still exist, and medium is the thing that would stop.

A note on the CSV

Values are exported with a leading apostrophe when they start with =, +, - or @. Those characters make a spreadsheet treat the cell as a formula and run it when the file is opened, which is a genuine way to attack whoever opens your export. The apostrophe stops that and is invisible in the cell.