Add a small piece of tracking text to the links inside client emails, so Google Analytics can tell you exactly how many people clicked and what they did next. No technical skills needed — use the generator below, fill in three boxes, copy the link.
That's it. The reader clicks and the page opens normally — they never notice anything. But now Google Analytics knows the visit came from that email.
A UTM code is just extra text stuck onto the end of a link. It's a name tag for the link. It doesn't change where the link goes — it only tells Google Analytics where the click came from.
Here's a normal link, and the same link with a UTM tag added:
Normal link:
https://clientsite.com/spring-offer/
Same link, tagged:
https://clientsite.com/spring-offer/?utm_source=newsletter&utm_medium=email&utm_campaign=spring-offer-2026
Both open the same page. The second one just carries a name tag along with it.
Fill in the boxes. The finished link builds itself at the bottom. Nothing is saved or sent anywhere — this runs right in your browser.
email. Locked so it can't be typed wrong.
header-button, footer-link, version-a. Leave blank if you're not sure — you don't need it.
Three pieces of information, that's all:
| Box | What to put | Examples |
|---|---|---|
| Where should the link go? | The page you want the reader to land on | https://clientsite.com/spring-offer/ |
| Where are you sending from? | The name of the list, or the email tool | newsletter, promo-list, mailchimp |
| What's the email called? | A name for this specific send, with a date | spring-offer-2026, march-newsletter |
The button should open the spring offer page. You'd fill in: https://clientsite.com/spring-offer/, newsletter, spring-offer-2026. Out comes:
https://clientsite.com/spring-offer/?utm_source=newsletter&utm_medium=email&utm_campaign=spring-offer-2026
Paste that into the button's link field in your email tool.
https://clientsite.com/blog/summer-hvac-tips/?utm_source=newsletter&utm_medium=email&utm_campaign=march-newsletter&utm_content=article-1
The article-1 at the end is the optional box — it lets you see which of the newsletter's several links people actually clicked.
Same email, same campaign name, but the last part is different for each version:
Version A: …/tune-up/?utm_source=promo-list&utm_medium=email&utm_campaign=ac-tuneup-blast&utm_content=version-a
Version B: …/tune-up/?utm_source=promo-list&utm_medium=email&utm_campaign=ac-tuneup-blast&utm_content=version-b
Now Google Analytics can show you which version won.
Email, email, and EMAIL get counted as three different things in reports. The generator lowercases for you automatically.spring-offer-2026, not Spring Offer 2026. The generator converts spaces to dashes for you.newsletter this month, don't switch to news next month — Analytics will treat them as two separate sources and split your numbers in half.march-newsletter is better than just newsletter, so April's send doesn't get mixed in with March's.email. The first piece is the list you're mailing. The last piece is the name of that specific email. Get those three right and you're done.If you're tagging a whole newsletter's worth of links, doing them one at a time is slow. Use Google Sheets instead:
newsletter)march-newsletter)=A2&"?utm_source="&B2&"&utm_medium=email&utm_campaign="&C2
Drag it down the column — one finished link per row, ready to copy into the email.
After the email goes out and people start clicking, here's how to find the numbers in Google Analytics:
newsletter / email — that's your email traffic.spring-offer-2026) gets its own row with visits, engagement, and conversions.Only if they look at their browser's address bar after clicking. The link in the email looks completely normal — it's a button or blue text like always.
No. The page opens exactly the same way. If you ever want to check, just paste the finished link into your browser and confirm the right page loads.
Tag the ones that matter — the main button and any key links. If you tag several, use the optional box (utm_content) to tell them apart.
The generator handles that automatically — it'll join the tag on correctly with an & instead.
Don't. Add the month or year so each send gets its own row in the report.
Paid search works differently: you usually do NOT add UTMs by hand. Google Ads tags clicks automatically with a gclid, and Microsoft/Bing Ads does the same with an msclkid. Google Analytics reads those and pulls in richer detail (campaign, ad group, keyword) than a manual UTM ever could. Leave auto-tagging switched ON.
We hit this on a live client account: pasting a Google tracking template into Bing doesn't work. Bing doesn't recognize Google's placeholder names, so they pass through as literal text and the tracking records nothing. Use each platform's own:
| What you want | Google Ads | Bing Ads |
|---|---|---|
| Landing URL | {lpurl} | {lpurl} |
| Campaign | {campaignid} | {Campaign} |
| Ad group | {adgroupid} | {AdGroup} |
| Keyword | {keyword} | {keyword} |
| Click ID | {gclid} (automatic) | {msclkid} |
Also: set one tracking template at the account level, not at account and campaign level — stacked templates wrap the URL twice and break it.
Clean tag → Google Analytics sees the source → CallRail/CTM swaps in a campaign-specific phone number → the call and the booked job attribute in ServiceTitan → the report shows which campaign earned the revenue. Break any link in that chain and the ROI story breaks. (Note: Meta Lead Ads don't use link UTMs at all — those leads carry ad and campaign IDs instead.)
Internal — Breakthrough3x · All tutorials