SEO

UTM Builder: Tag Links in Bulk and See the GA4 Channel

UTM builder in your browser: tag one link or many, keep the rest of the address untouched, and see each link's GA4 channel. Nothing is uploaded.

Use the UTM Builder: Tag Links in Bulk and See the GA4 Channel

Several sources and mediums at once
Write an address and the campaign values

The link is made as you type. The rest of the address is left exactly as you wrote it, and the parameters are added in front of any fragment.

Everything runs in your browser. What you enter is never uploaded or stored.

A UTM link is an ordinary web address with a few parameters added to the end, which tell Google Analytics and other tools where a visit came from: the source, the medium, and the campaign. They are simple to add and easy to get wrong in ways that cost you for months. A capital letter makes a second source in your reports. A medium that is not one that Google knows leaves the visits unassigned. An address that already had a question mark gets a second one. A fragment ends up in the middle of the parameters, and they are lost.

This page adds the parameters and leaves the rest of the address as you wrote it. It can make one link, or one for every combination of addresses and sources, which is how a campaign across a newsletter, social posts, and ads is usually tagged. For each link it shows the channel that Google Analytics 4 will put the visit in, from the rules in Google's help page, so that you can see before you send the link whether the medium you chose is one that Google recognizes. Everything is done in your browser, and the code behind the page makes no network requests, so a campaign that is not public yet stays private.

How to use the UTM Builder: Tag Links in Bulk and See the GA4 Channel

  1. Write the address, or severalWrite the full address of the page that the link goes to, with https:// and the host. For several pages, write one address on each line. The address can already have parameters and a fragment, and they are kept as they are.
  2. Fill in the campaignGive the source, the medium, and the campaign, which Google says to always use together. The id, the term, and the content are optional. The link appears as you type, and the notes tell you about anything that will split your reports or be read in a way that you did not mean.
  3. Make many links at onceOpen Several sources and mediums, and write a pair on each line, such as newsletter, email and facebook, paid_social. Every address gets a link for every pair, and the table shows each with its channel. Copy all the links, or download them as a CSV file.
  4. Check the channelUnder the link, the page says which channel Google Analytics 4 will put the visit in. If the medium is not one that the rules look for, it tells you so. Use email, social, cpc, referral, or another medium that Google recognizes if you want the visits grouped in the channel that you expect.

The parameters, and which ones to use

Google's page for campaign data in Analytics lists nine: utm_id, utm_source, utm_medium, utm_campaign, utm_source_platform, utm_term, utm_content, utm_creative_format, and utm_marketing_tactic. It says that when you add parameters you should always use utm_source, utm_medium, and utm_campaign, and that if you set one it strongly recommends setting all the relevant ones, especially those three and utm_id and utm_source_platform. This page writes the six that are used in nearly every campaign: the three that Google says to always use, the id, the term, and the content.

The source says where the visit comes from, such as a newsletter, a site, or a social network. The medium says what kind of channel it is, such as email, social, or cpc. The campaign names what you are running, such as spring_sale. The term is the paid keyword, and the content tells two links in one campaign apart, such as a header link and a button.

Why capital letters split your reports

Google says that parameter values are case sensitive: utm_source=google is different from utm_source=Google. In a report they are two rows. If one person writes Facebook and another writes facebook, the visits from the same place are counted twice, and the totals of each are wrong. Google advises a strict, case-sensitive naming convention for all fields, and lowercase as a standard practice.

So the page writes the values in lowercase by default, and you can turn that off. If you do, it warns about capitals. It also turns a space into an underscore or a hyphen, because a space in an address is written as %20, which is hard to read in a report, and it warns about the characters that are part of how addresses are written, such as an ampersand, which are written as percent codes and come back in reports in their plain form.

How the address is changed, and what is left alone

The parameters go at the end of the query, which starts at the question mark, and before the fragment, which starts at the hash sign. An address that has a fragment, such as #pricing, keeps it at the very end. A parameter put after the fragment is part of the fragment, and a server never sees it, so the visit would not be tagged. An address that has no question mark gets one, and an address that has one gets an ampersand.

Everything else is kept exactly as written: the host, the path, the other parameters in their order, and their encoding. The page does not use the URL object of the browser to rewrite the address, because that would change things you did not ask to change, such as the case of the host and a slash after a bare domain. If an address already has utm_ parameters, the ones that you fill in replace them, in any case of the name, so that no address has two utm_source parameters, and the ones that you leave empty stay.

The channel that Google Analytics 4 uses

Google Analytics 4 puts every visit in a channel, by rules that Google publishes in its help page for the default channel group, and the rules read the source and the medium. Email is when the source or the medium is email, e-mail, e_mail, or e mail. Affiliates is the medium affiliate. Referral is the medium referral, app, or link. Audio is the medium audio, and SMS is the source or medium sms. Display is one of display, banner, expandable, interstitial, or cpm. Organic Search is the medium organic. Organic Social is one of social, social-network, social-media, sm, social network, or social media. A medium that matches cp anywhere, or is ppc or retargeting, or starts with paid, is a paid medium.

Some of the rules also use lists of sites that Google keeps, of search, social, video, and shopping sites. A paid medium is Paid Search if the source is on the list of search sites, Paid Social if it is on the list of social sites, and so on, and Paid Other if it is on none. Google says that the definitions are not case sensitive and cannot be edited. The page applies every rule that does not need the lists, and when a rule does need them it says so and shows the range of channels that the visit can land in. It does not guess which list your source is on.

Mediums that fall through

A medium that none of the rules look for, such as newsletter, social_media, or fb, does not make a channel by itself. If the source is a site that is on one of Google's lists, the visit is organic for that kind of site. If it is not, the visit is Unassigned, which is where the reports of many sites have a large row that nobody expected. The page names a medium like this, and says that a medium such as email or social would make the channel certain.

The page does not say that you must use these mediums. They are the ones that Google's own channel rules know. A team that has a naming convention of its own can keep it, and add a custom channel group in Analytics that uses it. The page shows what the default grouping will do, so that the choice is yours.

How it was tested

600 addresses were made at random, with the parts that make trouble: http and https, ports, an address with a user name, an IPv6 host, a host in punycode, paths with encoded characters and accents, a question mark with nothing after it, empty parameters and doubled ampersands, a parameter without a value, the same parameter twice, encoded addresses inside a parameter, brackets, existing utm_ parameters in capitals, and fragments that look like paths with a query of their own. Campaign values were made with spaces, capitals, ampersands, equals signs, hash signs, percent signs, plus signs, accents, Chinese text, and emoji, with every combination of the options.

Each address that the page gave was read by Python's urllib. In all 600, the protocol, the host, the path, and the fragment were the same as before, the other parameters were the same pairs in the same order, and the utm parameters were read back as the values that were meant. The channel rules were written from Google's help page and tested on written examples, and the page was not tested against a live Google Analytics property, so the channel that it shows is what the rules say and not a record of what a property did.

Limits and accuracy

  • The channel is worked out from the rules in Google's help page, which was read on 4 October 2026. Google can change them, and the lists of sites are Google's. When a rule needs a list, the page shows a range and not one channel.
  • The page writes six parameters. utm_source_platform, utm_creative_format, and utm_marketing_tactic are not written, and an address that already has them keeps them.
  • It does not check that the page exists, that the address redirects without losing the parameters, or that your analytics are installed on it. A redirect that drops the query string removes the tags, and the redirect has to be checked on the live address.
  • Parameters on a link that goes from one page of your own site to another can replace the real source of a visit in your reports. They are meant for links from outside. This is common advice, and Google's page does not address it.
  • Long addresses can be cut by some systems, and the page does not warn about a length.
  • At most 500 links are made at once. Nothing you type is saved, so copy the links or download the file before you close the page.

Frequently asked questions

What is a UTM builder?

It adds campaign parameters to a web address, so that Google Analytics and other tools can tell where a visit came from. This one also leaves the rest of the address alone, makes many links at once, and shows which Google Analytics 4 channel each one lands in.

Which UTM parameters are required?

Google says to always use utm_source, utm_medium, and utm_campaign. If you set one parameter, it strongly recommends setting all the relevant ones, especially those three and utm_id and utm_source_platform.

Does the case of a UTM value matter?

Yes. Google says that parameter values are case sensitive, so utm_source=Google and utm_source=google are different sources in reports. Use lowercase for everything. The page writes lowercase by default.

Why are my visits Unassigned in GA4?

Usually because the medium is not one that Google's channel rules look for, such as newsletter or social_media, and the source is not on one of Google's lists of sites. Use a medium such as email, social, cpc, or referral. The page shows the channel for the medium you chose.

Where does the fragment go?

At the very end, after the parameters. A parameter put after the hash sign is part of the fragment, and a server does not receive it, so the visit would not be tagged. The page keeps a fragment where it belongs.

Can I tag links inside my own site?

It is not what the parameters are for. On a link from one page of your site to another, they can replace the original source of the visit in your reports. Use them on links from outside, such as emails, ads, and posts.

How do I tag many links at once?

Write the addresses one to a line, then open Several sources and mediums and write a pair on each line. Every address gets a link for every pair, with the same campaign. Copy all of them, or download a CSV file.

Is anything uploaded?

No. The links are made in your browser, and the code behind the page makes no network requests. Nothing is saved.

Research and references

This page was written and checked against the sources below.

  1. Google Analytics Help: Collect campaign data with custom URLs
  2. Google Analytics Help: Default channel group
  3. RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
  4. WHATWG URL Standard
  5. Python documentation: urllib.parse