UTM Builder
Paste a web address and enter source, medium and campaign to build a tagged link. The tool below preserves unrelated parameters and fragments, replaces managed UTM tags, and shows their encoded values. For several URLs using the same campaign values, open Bulk UTM links, add the rows and export CSV.
Paste the link you want to tag, then fill in source, medium and campaign. A link that already carries parameters or a #fragment keeps them, and a link that already carries utm tags fills these boxes instead of gaining a second set.
Campaign parameters
Source, medium and campaign are required by this builder. The other three are optional. Capitals stay capitals, spaces at the ends are trimmed, and spaces within a value are written as %20.
What the link actually carries
The table fills in as soon as the link and the three required boxes are filled in. It shows the value you typed beside the encoded form the link carries, so nothing about the escaping is left to guess.
Campaign rows
Add each finished link to the list and export the lot as a CSV, which is the sheet most teams keep their campaign links in. The list and the last source and medium are remembered in this browser. Start over, above the tool, forgets them.
Bulk UTM links
Paste one http or https URL per line. The current campaign values apply to every link, replacing existing managed UTM tags. Blank lines are ignored. All links must be valid before any are added; the list holds 200 rows in total.
No rows yet. Build a link above and press Add row: the boxes keep their values, so a second link for the same send is usually one edit away.
Worked examples
Paste a link that already carries utm tags into the top field and the boxes fill from it, so editing an existing campaign link never means building a second set of tags. A tag you clear is taken off the link rather than left behind to contradict the boxes.
utm_source: Where the click came from: newsletter, google, a partner's site.utm_medium: How it travelled: email, cpc, social, referral, qr.utm_campaign: Which push it belongs to: spring-sale, launch-week.utm_term: The paid keyword, when there is one.utm_content: Which link in the same campaign: hero-banner, footer-link.utm_id: An optional campaign identifier for a receiving setup that maps it.
Common questions
- What does each UTM parameter do?
- UTM means Urchin Tracking Module. These query parameters label the source, medium and campaign of a link for an analytics setup that reads them. This builder requires utm_source, utm_medium and utm_campaign; utm_term, utm_content and utm_id are optional. It constructs a web address, not tracking JavaScript, a pixel or an analytics connection. The form explains each field.
- Should UTM values be uppercase or lowercase?
- Choose a consistent convention for your analytics setup. This builder preserves the case you enter and trims whitespace from the ends. For example, Facebook and facebook remain different tag values; the tool does not merge them or select campaign names for your account.
- What happens to a link that already has parameters, or a #fragment?
- Unrelated parameters keep their order and raw values, including ref, gclid and bare flags. The fragment stays at the end after the query. In the single-link field, pasting existing managed UTM tags fills their form boxes. Building again replaces each managed tag once and removes managed optional tags whose boxes are empty. Bulk entry applies the current form values to every supplied link.
- Should I use spaces, underscores or hyphens in a campaign name?
- All three are accepted. Spaces are written as %20, and a literal plus is written as %2B, so they remain distinct when the query is decoded. Hyphens and underscores stay readable in a URL. The encoded column shows the actual value placed on the link.
- Is my link or my campaign list sent anywhere?
- The tool processes your URLs and campaign values locally. It does not connect to an analytics account, shorten URLs, verify destinations or record clicks. Campaign rows and the last source and medium are saved in this browser; Start over above the tool clears them. A CSV export is prepared locally and never uploaded by the builder.
- Why will it not tag a mailto: or a javascript: link?
- This builder accepts http and https web destinations. It refuses mailto, javascript, ftp and native-app/store deep-link schemes and asks you to provide an http or https address. The check validates URL syntax; it does not visit the destination.
- How do I build UTM links in bulk?
- Fill the campaign fields, open Bulk UTM links and paste one web URL per line. Press Add bulk rows to apply the same values to all links. Existing managed tags are replaced, blank lines are ignored, and a malformed URL or missing required field refuses the complete batch with its line number. The list holds 200 rows total, including earlier single-link rows. Export and clear it to start another set.
- Can I use these parameters with GA4?
- This builder writes standard manual campaign parameters, including an optional utm_id. It is an independent URL constructor with no Google account connection. Your destination must retain the query parameters and have an analytics setup that reads them. The tool cannot confirm reporting, campaign-ID mapping, auto-tagging interactions or attribution in your account.
- Can I use a campaign template or spreadsheet?
- For a newsletter template, set source to newsletter, medium to email and campaign to a name such as spring-sale. Reuse those values for individual or bulk links. Export CSV gives the URLs and six campaign columns for a spreadsheet. This page does not provide an Excel formula workbook, spreadsheet add-in or Google Sheets integration.
- Does building a tracking link also track clicks?
- No. A tracking-link builder adds labels to a URL. Visits, click counts and attribution require a separate receiving analytics setup. The campaign rows here are a local list of constructed links, not a click-tracking dashboard.
- Can I build manual campaign links for Google Ads?
- Yes, for a supplied http or https destination. Load the Manual Google Ads campaign labels example to use source google, medium cpc and campaign spring-sale. Its sample-click-id is an illustration, not a real click identifier. The builder preserves any gclid already on your URL, along with unrelated parameters and the fragment. It does not create a gclid, enable auto-tagging, expand ValueTrack macros, build an account tracking template or connect to Google Ads. Auto-tagging and attribution are controlled by your receiving account and destination; this example demonstrates manual URL labels only.
Exact URL construction: the browser's own parser encodes the parameters, an existing tag is replaced rather than duplicated, and anything already on the link, including the fragment, is kept. It checks the shape of the URL, not whether your analytics account expects those campaign names.