Campaign-tracked URLs without the spreadsheet
UTM parameters are the standard way to tell your analytics tool where a click came from. Three are usually enough: utm_source (the place the link was published, like newsletter or twitter), utm_medium (the channel type, like email or social), and utm_campaign (the named push, like spring-launch). Google Analytics, Plausible, Fathom, and most other tools all read these.
The builder accepts the base URL either in the URL option or in the input panel. The option wins if both are filled. The output is the same URL with the UTM parameters appended; existing query string parameters are preserved through the URL constructor. Empty UTM fields are skipped, so you only get the parameters you actually filled in.
If the base URL fails to parse (missing scheme, malformed), the output is [invalid URL]. Add https:// in front and try again. For SEO-friendly slugs to put inside the URL itself, use the slug generator.
How to use utm link builder
- 1Paste the base URL into the input panel or the URL option.
- 2Fill utm_source with the publisher (e.g.
newsletter). - 3Fill utm_medium with the channel (e.g.
email). - 4Fill utm_campaign with the campaign name (e.g.
spring-launch). - 5The output panel shows the tagged URL. Click Copy to grab it.
Keyboard shortcuts
Drive TextResult without touching the mouse.
| Shortcut | Action |
|---|---|
| Ctrl F | Open the find & replace panel inside the input Plus |
| Ctrl Z | Undo the last input change |
| Ctrl Shift Z | Redo |
| Ctrl Shift Enter | Toggle fullscreen focus on the editor Plus |
| Esc | Close find & replace, or exit fullscreen |
| Ctrl K | Open the command palette to jump to any tool Plus |
| Ctrl S | Save current workflow draft Plus |
| Ctrl P | Run a saved workflow Plus |
What this tool actually does
Three standard UTM parameters
Appends utm_source, utm_medium, and utm_campaign to the base URL. The two other Google-defined UTM parameters (utm_term, utm_content) are not part of this builder; add them by hand if you need them.
Existing query parameters survive
The builder uses the browser URL constructor and URLSearchParams.set(). So example.com/page?id=42 with utm_source=email becomes example.com/page?id=42&utm_source=email. Existing UTM parameters with the same key are overwritten.
Empty UTM fields are skipped
If utm_medium is blank, no utm_medium parameter is added. Only the fields you fill end up in the output URL.
Two ways to supply the base URL
Type it into the URL option or paste it into the input panel on the left. The option wins if both are filled. If both are empty, the builder uses https://example.com as a placeholder so you can see how the result will look.
Invalid URLs return a clear error
If the base URL cannot be parsed (missing scheme, malformed), the output is the literal string [invalid URL]. Add https:// in front of the URL and re-run.
Worked example
Base URL https://example.com/launch, utm_source newsletter, utm_medium email, utm_campaign spring-launch. Existing query parameters would be preserved before the UTM block.
https://example.com/launch
https://example.com/launch?utm_source=newsletter&utm_medium=email&utm_campaign=spring-launch
Settings reference
| Option | Effect on output |
|---|---|
| URL | Base URL to tag. Wins over the input panel. Falls back to https://example.com if both are empty. |
| utm_source | Adds utm_source=.... Skipped if blank. |
| utm_medium | Adds utm_medium=.... Skipped if blank. |
| utm_campaign | Adds utm_campaign=.... Skipped if blank. |
| Existing query string | Preserved. Existing UTM keys are overwritten if you re-tag. |
| Invalid base URL | Output is the literal string [invalid URL]. Add a scheme like https:// and re-run. |
FAQ
What about utm_term and utm_content?
source, medium, campaign) cover most use cases. For utm_term or utm_content, append them manually after copying the result, or use the slug generator to format the value first.Will it preserve a query string that's already on my URL?
URL object, which keeps existing parameters and appends the UTM ones. If your URL already has a utm_source, it is overwritten by your new value.What happens with a malformed URL?
[invalid URL]. Add a protocol prefix like https:// in front of the URL and try again.Should I lowercase the UTM values?
email and Email show up as different sources in most analytics tools, so pick one case (lowercase, no spaces) and stick to it across campaigns.