Logo

MonoCalc

/

UTM Link Parser

Social Media

Nothing is sent anywhere. Each address is taken apart by your own browser's URL parser and never visited.

Paste a link to take it apart

Every parameter is listed with the key as written, the raw value and the decoded value side by side, followed by what is worth checking. Switch to Batch audit to compare a whole campaign's links at once.

A shortened address such as a bit.ly link cannot be expanded here: finding out where it forwards to means asking the shortener's server, which is a network request this tool never makes. What you see is what the address itself carries.

This describes what the URL contains. What an analytics platform does with these parameters — how it ingests, attributes, deduplicates or lowercases them — cannot be observed from a link, so it is not stated here. Check that platform's own documentation.

About This Tool

UTM Link Parser – Read What a Campaign Link Actually Says

A tagged link is a sentence written in a syntax nobody proofreads. It gets pasted into a scheduler, forwarded through a shortener, copied out of a spreadsheet and typed again by hand, and by the time it is live the UTM parameters on it may not say what anyone intended. This UTM link parser is the reading half of campaign tagging: paste one URL or a whole batch, and each address is taken apart into the parameters it really carries, with the raw value and the decoded value side by side. It is the inverse of a campaign URL builder — nothing here writes, rewrites or cleans a link. Everything runs in your browser, and the tool makes no network request of any kind.

The anatomy strip: where a tag lives decides whether it exists

The first thing you see is the URL drawn as labelled segments — scheme, host, path, query string, fragment — with every key=value pair inside the query rendered as its own chip. Recognised UTM keys, unknown keys and problem keys each carry a word as well as a colour, so the picture reads the same in monochrome. The segment that catches people out is the last one: anything after the # is a fragment, it never reaches a query parser, and a tag stranded there is simply not on the link as far as query-string reading goes. Seeing that once tends to fix it permanently.

Decoding, where naive parsers go wrong

A query string is application/x-www-form-urlencoded, the encoding URLSearchParams implements, and in it a + means a space. So utm_campaign=summer+sale is the value summer sale. Run the same text through decodeURIComponent instead and the plus survives as a literal plus — the two functions are not interchangeable, and this tool never mixes them. A fragment is not form-encoded at all, so a + there is genuinely ambiguous and both readings are shown rather than one being chosen for you. Malformed escapes such as %zz are caught instead of being allowed to break the parse, and a repeated key like ?utm_source=a&utm_source=b is listed as two rows, because repetition is legal in a URL.

Raw and decoded are always both shown
Even when a value needs no decoding, both columns stay on screen. The comparison is the point: summer+sale and summer%20sale decode identically, but the two links are not byte-identical, and that difference is invisible if you only ever see the decoded form.

Batch audit: one campaign, several spellings

Paste a list and the consistency panel groups every distinct value found for each parameter, with counts and proportional bars. Values that differ only by letter case, by surrounding whitespace, or by a hyphen where another link used an underscore are pulled together under a collision marker — Summer_Sale on twelve links sitting directly above summer-sale on three is the single most useful thing a report like this can show you, and it is far more legible than a sentence describing it. A per-URL table sits underneath, any row opens into the full single-link view, and the whole thing exports to CSV with spreadsheet formula characters neutralised so a campaign value starting with = cannot execute when the file is opened.

What this tool will not tell you

It describes URLs, and only URLs. How any analytics product ingests, attributes, deduplicates or lowercases these parameters is behaviour inside that product, which cannot be observed from a link, so no claim about it appears anywhere here. A shortened address cannot be expanded either — that needs a request to the shortener — so a short link is parsed exactly as given. A misspelled key is suggested a correction and never silently given one; what the link says is what you see.

Frequently Asked Questions

Is the UTM Link Parser free?

Yes, UTM Link Parser is totally free :)

Can I use the UTM Link Parser offline?

Yes, you can install the webapp as PWA.

Is it safe to use UTM Link Parser?

Yes, any data related to UTM Link Parser only stored in your browser (if storage required). You can simply clear browser cache to clear all the stored data. We do not store any data on server.

How does this UTM link parser work?

Paste one link, or one per line, and each address is handed to your browser's own URL parser. The query string is read under form-encoding rules, the same ones URLSearchParams applies, so every parameter is listed with the key exactly as written, the raw value as it appears in the address and the decoded value side by side. UTM keys are recognised against the same key list the UTM Campaign Link Builder writes from, everything else is listed as an ordinary parameter, and the findings underneath name the key each one is about. Nothing is sent anywhere — the tool makes no network request of any kind.

Why does utm_campaign=summer+sale show as summer sale?

Because a query string is application/x-www-form-urlencoded, and in that encoding a plus sign means a space. That is what URLSearchParams implements, so summer+sale and summer%20sale decode to the same thing. Running the same value through decodeURIComponent instead leaves the plus as a literal plus, which is why the two are not interchangeable and this tool does not mix them. A fragment is different: the part after the # is not form-encoded, so when a plus appears there both readings are shown and the ambiguity is labelled rather than resolved silently.

Can it tell me where a bit.ly or t.co link actually goes?

No. Expanding a shortened address means asking the shortener's server where it forwards to, and that is a network request this tool never makes. A short link is parsed exactly as given: its own parameters are read and reported, and whatever the destination carries stays invisible until you open it. A redirect wrapper is a different case — when the destination is carried inside the address as a parameter value, that inner URL is detected and reported as a nested tagged link you can parse on its own.

What does the collision marker in the batch audit mean?

It means two or more spellings of the same value are sitting in the same batch. Values that differ only by letter case, by surrounding whitespace, or by a hyphen where another link used an underscore are grouped together with their counts, so Summer_Sale on twelve links and summer-sale on three appear next to each other instead of as two unrelated rows. A separate encoding-inconsistency marker catches the narrower case where one value was written both ways in the URL, such as summer+sale and summer%20sale: those decode identically, but the links are not byte-identical.

Does a warning here mean my campaign reporting is broken?

It means the URL contains something worth looking at, and no more than that. This tool reads addresses; it cannot observe what any analytics platform does with them, including how it ingests, attributes, deduplicates or lowercases a parameter, because that would take a network request and a look inside that product. So a finding describes the link — a key that is not byte-identical to the canonical one, a value that is empty, tags stranded after the # where a query parser never sees them — and leaves what follows from that to the documentation of whatever tool you send the traffic to.

Is it safe to paste links that contain customer or campaign data?

The parsing happens entirely in your browser and no address leaves the page, so nothing is uploaded or logged. Two smaller protections are worth knowing about: a pasted address is only ever turned into a clickable link when it passes an http or https check, so a javascript: or data: address is shown as plain text and never becomes live; and the CSV export neutralises any cell starting with =, +, - or @ so a campaign value cannot run as a formula when the file is opened in a spreadsheet.