UTM spreadsheet template
A shared sheet is how most teams start tracking campaign links. Here is the column layout, the formula that builds the URL, and the validation rules that keep it from rotting.
The columns your sheet needs
A UTM spreadsheet is a shared log of every tagged link you have created. Its job is to stop two people inventing two names for the same campaign, and to let you look up what a strange row in analytics actually was.
| Column | Purpose |
|---|---|
| destination_url | The clean page you want people to land on, no parameters |
| utm_source | Platform or list — from your fixed vocabulary |
| utm_medium | Delivery method — from a short fixed list |
| utm_campaign | The initiative name, with a year if it repeats |
| utm_content | Which link inside the same message (optional) |
| full_url | Formula column that assembles the final link |
| owner | Who created it, so questions have an answer |
| launch_date | When it went live, for lining up against reports |
The formula
In Google Sheets or Excel, put this in your full_url column and drag it down. LOWER() enforces the casing rule that causes most duplicate rows in Google Analytics.
=LOWER(A2&"?utm_source="&B2&"&utm_medium="&C2&"&utm_campaign="&D2)
If you also use utm_content, extend it with &"&utm_content="&E2 — but wrap the whole thing in IF() so empty cells do not append a dangling parameter.
Guardrails worth adding
- Data validation dropdowns on utm_source and utm_medium so nobody free-types a new value.
- Conditional formatting that highlights any cell containing a capital letter or a space.
- A COUNTIF column flagging duplicate full_url values.
- A locked reference tab listing your approved vocabulary.
- Never delete rows — archive them, so an old link found in the wild can still be identified.
Where spreadsheets stop working
A sheet records intent. It cannot tell you whether a link worked, it cannot stop someone pasting an untracked URL into an email, and it silently rots the moment a second team starts their own copy.
The moment you care about results rather than record-keeping, you need the links and the performance data in the same place — a saved campaign library with GA4 sessions, conversions and revenue attached to each URL.
Moving off the sheet
- Recreate your recurring source and medium pairs as presets so they can never be mistyped.
- Save each live campaign so the URL, its QR code and its results stay together.
- Keep the old sheet as a read-only archive for historical lookups.
Skip the formula
Build the link, save the campaign and keep every URL in one library — with presets that make mistyping impossible.
Open the UTM builderFrequently asked questions
What columns should a UTM spreadsheet have?
Destination URL, utm_source, utm_medium, utm_campaign, optional utm_content and utm_term, a generated full URL formula, the owner, the launch date and a notes field.
How do I build the full URL in Google Sheets?
Concatenate the base URL with each parameter, for example: =A2&"?utm_source="&B2&"&utm_medium="&C2&"&utm_campaign="&D2. Wrap it in LOWER() to enforce casing.
Is a spreadsheet enough for UTM tracking?
It works for a single person on a handful of campaigns. It breaks once several people edit it, because there is nothing stopping typos, duplicates or inconsistent casing — and it never shows you results.
Can I import my existing spreadsheet?
You can rebuild any row in the Trace UTM builder in seconds and save it as a campaign, keeping the same naming you already use.