splitforms.com
100% client-side · no signup

UTM Builder (Campaign URL Builder)

A UTM builder adds utm_source, utm_medium and utm_campaign parameters to a link so analytics tools such as GA4 can attribute each visit to a campaign. Build one link with a live preview, tag a whole spreadsheet in bulk, or check a link you already tagged for capital letters, spaces and typos.

Last verified October 2, 2026 against Google Analytics Help

Presets
Campaign URL
https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale
Parameters only (Final URL suffix, Meta URL parameters)
utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale
Checks

No problems found: required parameters set, lowercase, no spaces.

Runs in your browser. Nothing you type is sent anywhere.

Tagging links that lead to a form? The UTM values can travel with every submission. Capture UTM parameters in your form.

Key facts: every UTM parameter

ParameterWhat it meansRequired?Example
utm_sourceThe referrer: who sent the visitRequiredgoogle, newsletter4, billboard
utm_mediumThe marketing mediumRequiredcpc, banner, email
utm_campaignProduct, slogan or promo codeRequiredspring_sale
utm_termPaid keywordOptionalform_backend
utm_contentTells creatives apart, such as two links in one emailOptionalheader_link, footer_link
utm_idGA4Campaign ID, matching the IDs you use when uploading campaign dataOptionalspring_sale_01
utm_source_platformGA4The platform that directed the traffic, such as a buying platformOptionalSearch Ads 360, Display & Video 360
utm_creative_formatGA4Type of creative; not currently reported in GA4Optionaldisplay, native, video, search
utm_marketing_tacticGA4Targeting criteria; not currently reported in GA4Optionalremarketing, prospecting

Source: Google Analytics Help, “URL builders: Collect campaign data with custom URLs”. Example values for utm_term, utm_content and utm_id are ours. Last verified October 2, 2026.

What are UTM parameters?

UTM parameters are tags added to a link's query string (utm_source, utm_medium, utm_campaign, utm_term and utm_content, plus utm_id and three newer GA4 parameters) that tell analytics tools which campaign sent a visit. They are plain key=value pairs after the ?, so anything that can read the page URL can read them: GA4, other analytics tools, and a script on your form. UTM stands for Urchin Tracking Module, after the Urchin software that became Google Analytics.

A tagged link looks like this: https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale. The page loads exactly as before; the parameters only label the visit.

Which UTM parameters are required?

utm_source, utm_medium and utm_campaign. Google's help page says to always use those three when you tag a link; utm_term, utm_content, utm_id, utm_source_platform, utm_creative_format and utm_marketing_tactic are optional. A link that leaves one of the three out still loads normally, but your reports have less to group it by.

Google's wording is that you “should always use utm_source, utm_medium, and utm_campaign”. The builder above marks those three with an asterisk and warns when one is empty.

Are UTM parameters case-sensitive?

Yes. Google states that UTM parameter values are case sensitive: utm_source=google and utm_source=Google are two different values, so they show up as separate rows in GA4's source, medium and campaign reports. GA4's default channel rules are not case sensitive, so both still land in the same channel. Use lowercase everywhere; the builder above warns about capital letters and can fix them for you.

Sources: case sensitivity of values from Google Analytics Help on custom URLs; case-insensitive channel matching from GA4's default channel group page. Parameter names should be lowercase too: a script that looks up utm_source will not match UTM_Source.

UTM naming convention cheat sheet

A UTM naming convention is a short set of rules your team follows so the same channel always gets the same values. These eight cover most teams:

  1. Lowercase only. Values are case sensitive, so Email and email split one channel into two rows.
  2. One separator, no spaces. Pick underscores or hyphens and stick to it: spring_sale, not Spring Sale.
  3. Medium is the channel type, source is the sender. utm_medium=email, utm_source=newsletter; not the other way round.
  4. Reuse GA4's medium values from the table below so visits land in the right default channel.
  5. Make campaign names sortable. Lead with the date: 2026_10_launch.
  6. No personal data. Never put an email address or a name in a UTM value; it ends up in analytics reports.
  7. Tag inbound links only. Leave links between your own pages untagged.
  8. Write the convention down. Keep it in a shared sheet; bulk mode reads a spreadsheet paste directly.
Trafficutm_sourceutm_mediumGA4 default channel
Google Ads (manual tags)googlecpcPaid Search
Microsoft AdvertisingbingcpcPaid Search
Meta adsfacebook, instagrampaid_socialPaid Social
LinkedIn adslinkedinpaid_socialPaid Social
Organic social postlinkedin, facebooksocialOrganic Social
NewsletternewsletteremailEmail
Text messagesmssmsSMS
Banner on another sitesite namedisplayDisplay
Paid affiliatepartner nameaffiliateAffiliates
Unpaid partner linkpartner namereferralReferral
QR code on printflyer, posterqrUnassigned (no print channel)

Channel column from Google's default channel group rules: Paid Search and Paid Social also need the source to be on Google's list of search or social sites, which google, bing, facebook, instagram and linkedin are. Anything no rule matches is reported as Unassigned. Last verified October 2, 2026.

How do I capture UTM parameters in a form submission?

Add a hidden input for each UTM parameter to the form, plus a few lines of JavaScript that copy the values from the page URL into those inputs. When the visitor submits, the UTM values are posted with the rest of the form, and the form backend saves them next to the lead.

Here is the whole thing for a splitforms form: four hidden inputs and six lines of script. Put the script after the form so the inputs exist when it runs.

contact.html
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <input type="hidden" name="utm_source">
  <input type="hidden" name="utm_medium">
  <input type="hidden" name="utm_campaign">
  <input type="hidden" name="utm_content">

  <input type="email" name="email" placeholder="[email protected]" required>
  <textarea name="message" required></textarea>
  <button type="submit">Send</button>
</form>

<script>
  // Copy utm_* values from this page's URL into the hidden inputs above.
  var params = new URLSearchParams(window.location.search);
  document.querySelectorAll('input[type="hidden"][name^="utm_"]').forEach(function (input) {
    var value = params.get(input.name);
    if (value) input.value = value;
  });
</script>

splitforms stores every field your form sends, so utm_source and utm_campaign appear on each submission in the dashboard, CSV export and webhook payload. Free: 500 submissions total, no card.

The snippet is required. splitforms does not read UTM parameters from the page URL by itself; without the script the hidden inputs post empty. CSV export and webhooks are on the paid plans (Pro is $5/month).

This short version reads the URL of the page the form is on. If visitors land on one page and submit on another, use the session-storage version in track form submission sources with UTM fields, which also records the referrer and landing page. Need the form itself first? Start with HTML form to email.

Get a free access key

How is this different from Google's Campaign URL Builder?

Google's Campaign URL Builder tags one link at a time with six UTM fields: campaign ID, source, medium, name, term and content. This builder makes the same kind of link and adds bulk tagging from CSV, a checker for links you already tagged, presets for common channels, case and spacing warnings, and fields for utm_source_platform, utm_creative_format and utm_marketing_tactic.

FeatureGoogle's builderThis UTM builder
utm_source, utm_medium, utm_campaign, utm_term, utm_content, utm_idYesYes
utm_source_platform, utm_creative_format, utm_marketing_tacticNo fieldsYes
Many links at onceOne link at a timeUp to 2,000 rows from CSV or a spreadsheet paste, CSV download
Existing tagged URLsPulls utm values from a pasted URL into its fieldsParameter table plus typo, duplicate, empty-value and fragment warnings
Case and spacing warningsNoYes, with a one-click fix
Channel presetsNoGoogle Ads, Meta, LinkedIn, newsletter, QR / print, partner
Snippet to save UTMs with form submissionsNoYes

Google's builder checked on October 2, 2026 at ga-dev-tools.web.app and in its open-source code. Both tools produce standard links, so if you only need one link, Google's builder works fine.

UTM builder FAQ

Does splitforms capture UTM parameters automatically?

No. splitforms saves the fields your form posts, and it does not read the page URL on its own. Add the hidden inputs and the short script from this page; once those inputs carry values, utm_source, utm_campaign and the rest are stored with each submission like any other field.

Does this UTM builder send my links anywhere?

No. Building, bulk tagging and checking all run in your browser with no network requests, and the CSV download is generated on your device. The only thing remembered is the last preset you picked, saved in your browser's localStorage.

What format does bulk mode accept?

Rows of url, source, medium, campaign, term, content, separated by commas or tabs, so you can paste straight from a spreadsheet. A header row is optional; with one, columns can be in any order and can include utm_id and the other GA4 parameters. Blank cells can take the values from the Build tab, so a plain list of URLs gets one shared campaign. Up to 2,000 rows at a time.

Why are {keyword} and {{campaign.name}} left unencoded?

They are ad-platform placeholders. Google Ads ValueTrack parameters use single braces and Meta's dynamic URL parameters use double braces, and each platform swaps in the real value when someone clicks. The builder leaves the braces as typed so the platform can find them; everything else is percent-encoded.

Should I add UTM parameters to links inside my own site?

No. UTM parameters belong on links that bring people in from somewhere else: ads, emails, social posts, QR codes and partner sites. Tagging internal links swaps the campaign the visitor really came from for your own internal tag, which muddles attribution, and the form snippet on this page would copy that internal tag into the submission.

More free tools: form action URL tester, honeypot field generator and the full tools list.

Know which campaign sent every lead.

Point your form at splitforms, add the hidden UTM inputs, and each submission arrives with its source, medium and campaign next to the name and message, with honeypot and smart spam filtering on every plan. 500 submissions total, free to start.

Try splitforms free →