UTM Campaign Builder & Link QA
Build campaign links, inspect existing URLs, and catch tracking mistakes before you publish.
- Processed locally
- No account required
- Campaign QA built in
- 01Destination
- 02Campaign
- 03QA
- 04Generate
Campaign URL ready
Campaign QA
Campaign QA
| Source | Medium | Campaign | Content | Remove |
|---|
Your campaign data stays in your browser. Nothing is sent to SkyyCast.
What is a UTM parameter?
A UTM parameter is a short piece of text added to the end of a URL that tells an analytics tool where a visitor came from. Google Analytics 4 reads five standard parameters -- utm_source, utm_medium, utm_campaign, utm_term and utm_content -- plus utm_id and utm_source_platform, which Google recommends setting alongside the others, and two newer fields, utm_creative_format and utm_marketing_tactic.
How UTM tracking works in GA4
When someone clicks a tagged link, GA4 reads the UTM parameters from the URL and stores them against that session. Google's own guidance: "When you add parameters to a URL, you should always use utm_source, utm_medium, and utm_campaign." If a tagged link is missing these, GA4 reports show the traffic as (not set) instead of grouping it under your campaign. See Google's official URL builder documentation for the full parameter reference.
UTM naming convention
Google's documentation states plainly: "Parameter values are case sensitive," giving the example that utm_source=google is treated as different from utm_source=Google. Google does not mandate a specific separator or casing style -- that part is a widely-used convention, not an official rule. SkyyCast's default recommendation is lowercase with underscores (for example summer_launch_2026), because it is readable and avoids the most common source of split data. You can switch to hyphens or leave values as typed; the QA panel will tell you what it finds either way.
How to avoid broken campaign reporting
- Pick one casing and stick to it.
Emailandemailbecome two separate rows in your reports. - Pick one separator. Mixing
summer-saleandsummer_saleacross links splits the same campaign in two. - Always set the three core fields. A link missing
utm_source,utm_mediumorutm_campaignreports as(not set). - Don't double-tag. Adding new UTM parameters to a URL that already has them (without deciding to keep, replace or clean the old ones) can produce duplicate or conflicting values.
Source vs. medium vs. campaign
Source is where the traffic comes from (linkedin, newsletter, google). Medium is the general category of that channel (organic_social, email, cpc, referral). Campaign is the specific initiative the link belongs to (summer_launch_2026). Keeping these three distinct, instead of folding everything into one field, is what makes GA4 reports filterable by channel and by initiative independently.
How to inspect an existing UTM URL
Paste any already-tagged link into Inspect Existing URL above. The tool parses it into its individual parameters, runs the same QA checks used when building a new link, and lets you load the result back into the Build tab with one click to fix and regenerate it -- useful for auditing links you didn't create yourself.
Common UTM mistakes
- Leaving out
utm_mediumbecause "the source says enough" -- GA4 still needs it to group channels correctly. - Pasting a link into a tool that already has tracking parameters and tagging it again, producing duplicate
utm_sourcekeys. - Typing campaign names with spaces, which get encoded as
%20or+and are harder to read in reports. - Using a different spelling of the same source across campaigns (
igvsinstagram).
Why capitalization matters
GA4 does not normalize casing for you. Two links tagged utm_campaign=SummerSale and utm_campaign=summersale show up as two different campaigns in every report, chart and attribution model that reads that field. This is documented Google behavior, not a SkyyCast opinion -- see the case-sensitivity note in Google's URL builder documentation.
Privacy first
Every field you type, every URL you paste and every row you add in Bulk mode is read and processed by your own browser's JavaScript. Nothing is uploaded to SkyyCast, stored, or sent to any other service, and no account is needed. Closing or reloading the page discards everything.
More free tools
See all free SkyyCast tools. Publishing the campaign to Bluesky? Check the post first with the Bluesky Post Validator, or the image with the Bluesky Image Size Checker.
Ready to schedule the campaign post too?
SkyyCast helps you plan and schedule Bluesky content. The Free plan includes 15 published posts a month.
See how it works
SkyyCast