Your first client is free.

What is the difference between utm_source and utm_medium?

utm_source names where the traffic came from. utm_medium names what kind of traffic it was. Meta is a place, so it is the source. Paid social is a category of traffic, so it is the medium.

One click from a Meta ad

utm_source=meta&utm_medium=paid_social

Why they are two fields and not one

You buy on many platforms and each platform sells more than one kind of traffic. Meta sells paid social. Google sells paid search, shopping and display. Your newsletter provider sends email. Collapsing that into one field would force a choice between knowing the platform and knowing the channel, and reporting needs both.

Source answers “who sent this person?” Medium answers “what were we doing to make that happen?” Keep asking those two questions and the split stays obvious even for cases the table below does not cover.

A mapping for the platforms you actually buy on

Source and medium by traffic type
Trafficutm_sourceutm_medium
Meta Adsmetapaid_social
Google paid searchgooglecpc
Google Shoppinggoogleshopping
LinkedIn Adslinkedinpaid_social
TikTok Adstiktokpaid_social
Email newsletternewsletteremail
Affiliate partnerpartner_nameaffiliate
Organic social postinstagramsocial

This is a convention that reports cleanly, not a specification. Google does not publish a list of permitted values, and any of these could reasonably be set differently. What matters far more than which column you pick is that everyone buying media picks the same one.

Valid, versus consistent

Almost every UTM argument confuses two different questions. Technically valid means the platform accepts the value and analytics records it: nearly anything qualifies, including Facebook, FB and fb-ads. Recommended for consistent reporting means everyone on the team produces the same string for the same thing.

Only the second one affects whether your numbers are right. A tag can be perfectly valid and still ruin a report, because analytics groups by exact string.

Fragmented

  • source=facebook / medium=paid-social
  • source=Meta / medium=Paid_Social
  • source=fb / medium=social
  • source=meta_ads / medium=cpc

Consistent

  • source=meta / medium=paid_social

Every row on the left records traffic correctly. Together they split one platform across four channel rows, and the only way back is a spreadsheet and someone's memory of what they meant in March.

The mistakes worth naming

facebook or meta?

Either works. Pick one and write it down. meta matches what the company is called now and covers Instagram inventory bought through the same account; facebook is what a lot of historical data already says. Switching mid-year splits your own reporting, so if you change, change on a clean date boundary.

paid_social or paid-social?

Both are valid and they are different strings, which is the whole problem. Underscores are the more common convention in UTM values and avoid confusion with hyphenated slugs elsewhere in a URL. Choose once, for every parameter.

Does capitalisation matter?

Treat it as if it does. Values are recorded as typed and tools differ in whether they normalise case, so relying on a platform to fix Meta for you is how one source becomes two rows. Lowercase everywhere removes the question entirely.

What about cpc versus paid_search?

cpc is long-established and is recognised by GA4’s default channel grouping rules, which is a real argument for keeping it on search. paid_search reads better to humans. Consistency beats elegance here, so if your reports already use cpc, leave it.

Deciding it once

The fix is not a stricter rule, it is a shorter list. Write down the approved source values and the approved medium values, keep the list somewhere people building links will actually see it, and treat anything not on the list as a change that needs a decision rather than a typo someone made at 6pm.

The UTM naming convention template is a starting list you can copy and edit rather than invent from scratch.

Approved values, not remembered ones

UTMConfig holds the source and medium list for your workspace and builds tracking URLs from it, so a new starter cannot invent a fifth spelling of the same platform.

Create your workspaceFree for one client. No card required.