UTM Generator
- Runs on your device
- Nothing uploaded
- Free, no sign-up
How campaign URLs are assembled
This builder starts from your base URL (with or without an existing query string), then sets the five standard campaign keys: utm_source, utm_medium, utm_campaign, plus optional utm_term and utm_content. Values are percent-encoded so spaces, ampersands, and non-ASCII characters do not break the link. A fragment (#section) on the base URL is preserved at the end.
Think of source as the platform (newsletter, linkedin), medium as the mechanism (email, cpc, social), and campaign as the initiative name you will filter on in analytics. Term is classic for paid keyword; content distinguishes creatives or CTAs in the same campaign.
Worked example
Base https://toolpetal.com/seo-tools, source newsletter, medium email, campaign oct-tips, content header-cta becomes:
https://toolpetal.com/seo-tools?utm_source=newsletter&utm_medium=email&utm_campaign=oct-tips&utm_content=header-cta
If the base already had ?ref=home, that parameter stays and the UTM keys are merged afterward. Filling source again overwrites a previous utm_source on the same URL.
Limits and naming hygiene
This page does not talk to Google Analytics, Ads, or any server. It will not invent naming conventions for you. Treat Source and source as different if your analytics tool is case-sensitive. Prefer lowercase and hyphens so one campaign does not split into three rows in reports.
Do not paste passwords, signed session URLs, or one-time magic links into the base field on a shared screen. UTMs are for public marketing attribution, not for secrets.
FAQ
Which UTM parameters are required?
utm_source, utm_medium, and utm_campaign are the usual trio. utm_term and utm_content are optional and useful for ads or A/B tests. This tool encodes values safely.
Should I use lowercase UTM values?
Yes if your analytics tool treats Source and source as different channels. Lowercase plus hyphens keeps reports from splitting the same campaign.
What if the URL already has a query string?
Existing parameters are kept. UTM keys you fill in overwrite the same keys on the URL. Fragments (#) stay at the end.
Is this the same as Google's Campaign URL Builder?
It covers the same five parameters and runs locally. Nothing is stored or sent to Google or to ToolPetal.