UTM tags and UTM parameters explained: how to use them in GA4
UTM tags, also called UTM parameters or UTM codes, are short text parameters added to a URL so that Google Analytics 4 can record the source, medium and campaign of a visit. This guide explains what UTM stands for, every parameter GA4 recognises, how to build tagged links by hand and in ad platforms, case sensitivity and naming rules, where the data appears in GA4 and in the BigQuery export, and the mistakes that break reports.

UTM tags are short parameters added to the end of a URL that tell Google Analytics where a visit came from: which source, which medium, which campaign. They are also called UTM parameters or UTM codes; the three names mean the same thing. When someone clicks a tagged link, GA4 reads the parameters and reports the session under the names you chose.
A tagged URL looks like this:
https://www.example.com/
?utm_source=newsletter
&utm_medium=email
&utm_campaign=summer-sale
Everything after the question mark is the tagging. The page that opens is the same; only the reporting changes. This guide covers what each parameter means, how to build tagged links, the rules GA4 applies to them, where the data appears, and the mistakes that quietly ruin campaign reports.
What UTM stands for
UTM stands for Urchin Tracking Module. Urchin was a web analytics product that Google acquired in 2005 and turned into Google Analytics. The product is gone and the parameter format stayed. Today it is a convention that most analytics and advertising tools understand, not only Google’s.
What UTM tags are for
A browser tells your site very little about where a visitor came from, and often nothing. Links opened from an email client, a messenger, a mobile app or a PDF carry no referrer, so analytics tools count those visits as direct. Paid and organic clicks from the same social network look identical.
UTM tags put the answer into the URL itself, so it does not depend on the browser:
- which newsletter issue, post or ad brought the visit
- whether a click from Facebook was paid or organic
- which of two creatives in one campaign worked better
- what a campaign cost per session or per order, once spend is matched to it
How untagged links inflate direct traffic is covered in direct traffic in GA4.
OWOX Data Marts
See your first report built in real time. 15 minutes.
- Connect your data warehouse
- Pick your metrics
- Get a live Google Sheets report
In the time it takes to write a ticket. Then imagine never writing that ticket again.
Book a DemoWe'll use your actual use case
The UTM parameters and what each one means
The UTM parameters and what each one means
These are the parameters Google Analytics 4 reads (Collect campaign data with custom URLs, checked October 2026):
| Parameter | What it holds | Example |
|---|---|---|
utm_source |
The referrer: who sent the traffic | google, newsletter, facebook |
utm_medium |
The marketing medium | cpc, email, paid_social |
utm_campaign |
The campaign: product, slogan, promotion | summer-sale |
utm_id |
The campaign ID. Used to match imported cost data | abc123 |
utm_term |
The paid keyword | running+shoes |
utm_content |
What tells creatives or links apart | toplink, banner_blue |
utm_source_platform |
The platform that directs the traffic, such as a buying platform | Search Ads 360 |
utm_creative_format |
The type of creative | video, native |
utm_marketing_tactic |
The targeting applied | remarketing, prospecting |
Three notes on the table:
utm_source,utm_mediumandutm_campaignare the ones to always use. Google’s wording: “When you add parameters to a URL, you should always use utm_source, utm_medium, and utm_campaign.”utm_creative_formatandutm_marketing_tacticare not reported in GA4 yet. Google’s page says so. You can send them, and they will not appear in reports.utm_idmatters when you import ad costs. It lets GA4 match spend to sessions by ID instead of by a name that somebody may edit. More in what utm_id is and why to add it.
utm_source
The source answers “who sent this visitor”. Use the name of the site or sender: google, bing, facebook, linkedin, newsletter. Google’s best practice is one source value per platform, and a separate value per sub-platform if you want them apart, for example fb for Facebook and insta for Instagram.
utm_medium
The medium answers “what kind of traffic is this”. It is the parameter GA4 uses most when it assigns a channel, so the value is not a free choice. cpc, ppc, paid_social and other values starting with paid are read as paid traffic. email is Email. social is Organic Social. affiliate is Affiliates. A medium GA4 does not recognise, such as newsletter or fb_ads, sends the session to Unassigned. The full rules are in the guide to the GA4 default channel group.
utm_campaign
The campaign name groups everything that belongs to one marketing effort. Use the exact name from the ad platform where you can, so that reports from both tools line up.
utm_term and utm_content
utm_term holds the keyword of a paid search click. utm_content tells apart links that share source, medium and campaign: two buttons in one email, two creatives in one ad set.
How to create UTM tags
By hand
The syntax has three rules, from Google’s page:
- Separate the parameters from the URL with a question mark.
- Write each parameter and its value as a pair joined by an equals sign.
- Separate the pairs with an ampersand.
The order of the parameters does not matter. If the URL already has a question mark, add your parameters after an ampersand instead of a second question mark. If it has an anchor, the part after #, the parameters go before it.
With a URL builder
A builder is a form that assembles the URL so you cannot break the syntax. Google’s is the Campaign URL Builder; for Android app ads there is a separate Play Campaign URL Builder. Other options are compared in free UTM builders.
A builder fixes syntax. It does not fix naming. For that you need a shared sheet where every tagged link is recorded with its values, and a rule that nobody invents a new medium on their own.
In advertising platforms, with dynamic parameters
Typing campaign names into URLs by hand does not scale past a few ads, and it is where most mismatches come from. Ad platforms can fill the values in when the ad is served. Google recommends it for GA4: “Utilize dynamic UTMs in platforms that support them to automate tagging and eliminate manual entry errors.”
- Meta (Facebook and Instagram): enter the parameters in the URL parameters field of the ad, with values such as
{{campaign.name}}. Steps in how to track Facebook Ads in GA4. - Microsoft Advertising: turn on auto-tagging of UTM at account level. Steps in Microsoft Ads in GA4.
- Google Ads: see the next section.
UTM parameters for Google Ads
For Google Ads you usually do not need UTM tags at all. With auto-tagging on, Google Ads adds a click ID (gclid) to each ad URL, and a linked GA4 property reads the campaign, ad group and keyword from the Google Ads account.
Add UTM parameters to Google Ads when another tool has to read the URL, such as a CRM form that stores the campaign. To add them in bulk, do not edit each ad. Put them once into the Final URL suffix at account, campaign or ad group level, and use ValueTrack parameters, which Google Ads replaces with real values at click time (About ValueTrack parameters, checked October 2026):
| ValueTrack parameter | Replaced with |
|---|---|
{campaignid} |
The campaign ID |
{adgroupid} |
The ad group ID |
{keyword} |
The keyword that matched |
{matchtype} |
The match type of the keyword |
{network} |
Where the click came from: search, search partners, display |
{device} |
The device type |
{creative} |
The ad ID |
{placement} |
The site where the ad was shown |
A suffix for a search campaign could be:
utm_source=google&utm_medium=cpc
&utm_id={campaignid}&utm_term={keyword}
&utm_content={creative}
Are UTM parameters case sensitive in GA4
Are UTM parameters case sensitive in GA4
Yes. UTM parameter values are case sensitive. Google states it twice on the same page: “Parameter values are case sensitive, e.g. utm_source=google is different from utm_source=Google”, and “Keywords with different capitalization, such as Meta and meta, are treated as different values. Use lowercase as a standard practice.”
In a report this shows as two rows for one source, each with part of the sessions. It also breaks cost import, because GA4 joins imported spend to sessions on an exact match of source and medium. Write every value in lowercase and you never have to think about it again.
UTM best practices
Google’s own recommendations, condensed:
| Element | Rule |
|---|---|
| Source | One value per platform, the same in every campaign |
| Medium | One value per channel, from the values GA4 recognises |
| Campaign | The exact campaign name; SpringSale and Spring_Sale are two campaigns |
| Content | Unique to the creative or link |
| Term | Lowercase, one spelling per keyword |
| Case | Lowercase everywhere |
| Completeness | If you set one parameter, set source, medium and campaign, and utm_id where you can |
To these, add three that Google does not spell out:
- Keep a register. A spreadsheet of every tagged link, who created it and for what. Six months later it is the only way to know what
promo_b_v2was. - No personal data in parameters. URLs end up in logs, referrers and analytics tools. Never put an email address or a name into a UTM value.
- Test before sending. Open the tagged link, check that the page loads and that the parameters are still in the address bar after any redirect.
Where to see UTM data in Google Analytics 4
Where to see UTM data in Google Analytics 4
GA4 collects UTM parameters automatically. There is nothing to enable.
Open Reports, Acquisition, Traffic acquisition. Use the drop-down above the first column to choose Session source / medium, Session source, Session medium or Session campaign. Add a second dimension with the plus sign, for example Session manual ad content for utm_content or Session manual term for utm_term.
One detail that confuses people: UTM parameters are not shown in the dimensions Landing page + query string and Page path + query string. Google strips them there. To see the full URL with its tags, use the Page location dimension.
Common UTM mistakes
- Tagging internal links. UTM tags on a banner or menu link inside your own site replace the source that brought the visitor. The campaign that paid for the visit loses the credit. Use events for internal promotions, never UTM tags.
- Mixed case and spelling.
Facebook,facebookandfbare three sources. - A medium GA4 does not know. The traffic lands in Unassigned.
- Missing parameters. A link with a source and no medium or campaign produces (not set) in reports, as described in what (not set) means in GA4.
- Redirects that drop the query string. The visitor arrives, the tags do not.
- Tags copied with the link. Someone shares a tagged URL in a chat, and their friends are counted as email subscribers. This cannot be prevented, only kept in mind when a campaign has visits long after it ended.
- A broken URL. Two question marks, a space in a value, or parameters placed after the
#.
UTM values in the BigQuery export
UTM values in the BigQuery export
GA4’s reports show UTM data aggregated and, for long date ranges, sometimes sampled. The native BigQuery export keeps the values with the events. This query runs as written on Google’s public GA4 sample and lists the source, medium and campaign recorded on page views:
SELECT
(SELECT value.string_value
FROM UNNEST(event_params)
WHERE key = 'source') AS source,
(SELECT value.string_value
FROM UNNEST(event_params)
WHERE key = 'medium') AS medium,
(SELECT value.string_value
FROM UNNEST(event_params)
WHERE key = 'campaign') AS campaign,
COUNT(*) AS page_views
FROM
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20210101' AND '20210131'
AND event_name = 'page_view'
AND (SELECT value.string_value
FROM UNNEST(event_params)
WHERE key = 'campaign') IS NOT NULL
GROUP BY source, medium, campaign
ORDER BY page_views DESC
On the sample the first rows are google / organic with the campaign (organic) and (direct) / (none) with (direct): GA4 writes its own values where no tag was present. On your export, your UTM values appear in the same three columns. Run it once and sort by source: every spelling variant of the same platform is a row, which makes it a quick audit of your tagging. Linking a property is covered in connecting GA4 to BigQuery.
From tags to cost per campaign
From tags to cost per campaign
Clean UTM tags answer “where did the sessions come from”. The question a marketer is actually asked is the next one: what did each campaign cost, and what did it bring. That needs spend from the ad platforms matched to the sessions, and the match is made on the values in your tags. utm_id with the platform’s campaign ID is the most reliable key, because it does not change when a campaign is renamed.
There are two places to make the match. Inside GA4, through cost data import, at campaign level. Or in your warehouse, where it can go down to ad set and keyword and include orders from your shop system.
OWOX Data Marts supports the second. It loads spend from ad platforms such as Facebook Ads, Microsoft Ads, LinkedIn Ads and TikTok Ads into your warehouse, next to the GA4 export. An analyst writes the SQL that joins spend to sessions on the campaign ID and publishes it as a Data Mart, and the marketer reads the result in Google Sheets or Data Studio (the former Looker Studio).
OWOX Data Marts does not create or check your UTM tags, and the join is the analyst’s SQL. It works exactly as well as the tagging does, which is the practical reason to get the naming rules above right first. The steps are in blending GA4 conversions with ad spend.
Turn your data into decisions.
Governed data marts give you the clean foundation ML needs to actually work.
- No AI hallucinations
- Analyst-governed definitions
- Every number traces to SQL
Frequently Asked Questions
Are UTM parameters case sensitive in GA4?
Yes. Google states that parameter values are case sensitive: utm_source=google is different from utm_source=Google. Mixed case splits one source into several rows and breaks cost import, so use lowercase everywhere.
Where do I see UTM data in Google Analytics 4?
In Reports, Acquisition, Traffic acquisition. Switch the first column to Session source / medium or Session campaign. UTM parameters are not shown in Landing page + query string; use the Page location dimension to see the full tagged URL.
Which UTM parameters does Google Analytics 4 support?
utm_source, utm_medium, utm_campaign, utm_id, utm_term, utm_content and utm_source_platform. Google also lists utm_creative_format and utm_marketing_tactic, and notes that those two are not reported in GA4 yet. Always set source, medium and campaign.
What does UTM stand for?
UTM stands for Urchin Tracking Module. Urchin was the web analytics product Google acquired in 2005 and developed into Google Analytics. The parameter format kept the name.
How do I create UTM tags?
Add a question mark to the URL, then parameter and value pairs joined by equals signs and separated by ampersands, for example ?utm_source=newsletter&utm_medium=email&utm_campaign=summer-sale. Google's Campaign URL Builder assembles the URL for you, and ad platforms can fill in the values with dynamic parameters.
What are UTM tags?
UTM tags, also called UTM parameters or UTM codes, are parameters added to the end of a URL, such as utm_source, utm_medium and utm_campaign. When someone clicks the link, Google Analytics reads them and reports the visit under that source, medium and campaign.



