UTM Link Builder
Build one tagged campaign URL, or bulk-generate many at once with channel presets, then copy all or export a CSV.
- Free, no account
- No watermark
- No usage limit
About the UTM Builder
Most UTM builders tag one link and stop. That's fine when you have one link, but a real campaign never has just one. You push the same landing page out through email, a Facebook ad, an Instagram story, and a LinkedIn post, and each one needs its own source and medium so your analytics can tell them apart later. Tagging those by hand, one at a time, retyping paid-social on every pass and hoping you spelled it the same way twice, and that is the slow, error-prone part. This builder takes that busywork off you. Paste your landing pages, pick your channels from presets, and it generates every tagged URL in one pass, then hands you a copy-all button and a CSV.
You still get the classic single-link builder when that's all you need. It builds the URL live as you type, encodes the awkward characters so nothing breaks, and works out whether to join your tags with a ? or an &. All of it happens in your browser, so nothing you paste is uploaded anywhere, which matters when the landing page is an unreleased promo.
How to use
- Pick a mode. Single link for one URL, or Bulk when you're tagging a set. Both sit at the top, one tap apart.
- Single link: paste the landing page, fill Source, Medium, and Campaign (Term and Content are optional), then copy the tagged URL that builds below. If a required field is empty you get a short hint instead of a broken link.
- Bulk: paste your landing page URLs, one per line. You can also drag a .txt or .csv file onto the box or click Add from file. A CSV just needs the URL in the first column.
- Name the campaign once. In bulk it applies to every link, so a spring push stays one campaign no matter how many channels carry it. Add a Term if you run paid search.
- Add your channels. Tap a preset like Google Ads or Email newsletter and it drops in the matching source and medium, or type your own. Each channel becomes one tagged link per URL.
- Grab the results. Copy a single link, copy all of them at once, or download the whole set as a CSV with a column for every field. Leave Clean values on and every value comes out lowercase with spaces turned into underscores.
Tagging a whole campaign in one pass
Say you're promoting three landing pages across six channels. That's eighteen tagged URLs, and eighteen chances to fat-finger the medium and quietly break a row in your report. Doing it by hand is slow and it's exactly where the mistakes creep in. Paste the three URLs, add the six channels, and you get all eighteen at once, spelled consistently because the presets spell them for you.
The bulk output stays live. Change a channel's medium and every affected link updates with it. Each row shows the finished URL plus the source and medium behind it, so you can scan for anything that looks wrong before you ship a single one. Copy them all as a newline list to drop into a spreadsheet, or export the CSV with landing_url, source, medium, campaign, term, content, and the final tagged_url as separate columns. That CSV lines up with the bulk-upload format most ad platforms and email tools already want, so you skip a second round of reformatting.
If a line isn't a real http or https address, the tool leaves it out and tells you how many it dropped, rather than generating junk you have to fish out later. A big set stays responsive as well, since it draws the first few hundred rows on screen while still copying and exporting every link you generated.
Channel presets and the bug that splits your data
The presets aren't only a shortcut, they're a consistency guard. Analytics tools read UTM values as case-sensitive text, so Email, email, and EMAIL come through as three different mediums. One channel, three rows, none of them looking like much, and you walk away with the wrong idea about what worked. It's the most common UTM mistake going, and it stays invisible right up until the report is already a mess.
Two things here stop it. The presets always write the same spelling, so paid-social is paid-social on every Facebook and Instagram link you ever make. And Clean values lowercases everything and swaps spaces for underscores while the link is built, so a stray capital or a typed space can't sneak into the data. Switch it off if you have a real reason to keep exact casing, but for most people leaving it on is the safer call.
Presets cover the channels campaigns actually use: Google Ads on cpc, Facebook, Instagram, and TikTok on paid-social, LinkedIn, X, and Reddit on social, an email newsletter, YouTube on video, and a generic affiliate partner. Tap what you need, drop what you don't, and edit any of them after they land.
What the five UTM parameters do
Three tags belong on nearly every campaign link. Source (utm_source) is the specific place a click comes from, like google or newsletter. Medium (utm_medium) is the kind of channel, like email, cpc, or social, and it's the value that decides how your traffic gets grouped, so it deserves more care than people give it. Campaign (utm_campaign) names the promotion, something like spring_sale_2026 that still reads clearly to you six months out.
The last two are refinements. Term (utm_term) records a paid-search keyword. Content (utm_content) separates two links that are otherwise identical, the header button versus the footer link in the same email, or creative A against B in one ad set. In bulk mode content lives on each channel, so you can label variants without touching anything else. Source and medium are the pair people flip most. Source names the specific place a click came from, while medium is the broader category it falls under. A Facebook ad is source facebook, medium paid-social, and swapping them scatters your channel report into one-off values instead of clean groups.
Where bulk tagging pays off
Email sequences are the obvious case. A five-email drip all pointing at the same offer wants five content values so you can see which send actually drove the signups, and typing that set once beats five trips through a single-link form. Multi-channel launches are the other big one. A product going out on paid social, search, and a newsletter the same week needs matching campaign names with distinct sources, and doing it on one screen keeps the naming honest. Agencies tagging links for several clients, affiliate managers giving each partner a source, anyone printing QR codes for different placements, it's the same shape every time.
Frequently asked questions
How does bulk mode decide how many links to make?
It multiplies your valid landing pages by your channels. Four URLs and five channels give you twenty links, one for each pairing, and the campaign and term you set carry across all of them. Any line that isn't a working web address is left out of the count and flagged, so the number you see is only real links.
Can I import my landing pages from a file?
Yes. Drag a .txt or .csv onto the URL box, or use Add from file. For a spreadsheet export it reads the first column of each row as the URL and ignores the rest, so a raw CSV works without cleaning it first. Pasting a plain list is fine too.
What columns are in the CSV export?
Seven of them: the landing URL, the four UTM values plus the campaign, and the finished tagged link, one row per generated URL. It opens in any spreadsheet and matches the bulk-upload shape most ad and email platforms expect, so you rarely have to reshape it.
Why do my values come out lowercase?
Because Clean values runs by default, lowercasing text and replacing spaces with underscores as each link builds. That's on purpose, since case-sensitive reporting would otherwise file Facebook and facebook as two separate sources. Uncheck it if you genuinely need to preserve casing.
Do I have to fill in every field?
No. Source and medium are what make a channel useful, and campaign is strongly recommended so your links roll up together, but term and content are optional and simply omitted when blank. Single-link mode does require the three core fields before it hands you a URL.
Will the tags change what my visitors see?
They won't. UTM parameters ride along in the address purely for your analytics to read, and the page that loads is the same one either way. If your landing page already carries a query string, the tool joins the tags with an & so it never adds a second ?.
Is anything I paste sent to a server?
No. The whole tool runs locally in your browser, so your URLs, campaign names, and the links it builds never leave your machine. Press Share and those values ride after the #, the part of an address no browser ever transmits, so an unreleased landing page still stays out of everyone's logs. The Embed code leaves them out entirely, because an embed gets pasted onto a public page where every visitor can read the frame's address.