Checks a list of campaign links, and optionally a GA4 source / medium export, for inconsistent, missing and misspelled UTM parameters and for pairs GA4 can't put in a channel, and gives each problem with its exact fix. For anyone who launches campaigns across several channels.
How to use it
Export the links from your ad platforms, newsletters and social scheduler, paste them together (one per line), and run the check before a campaign goes live. Fix critical findings first: they change how your reports count traffic.
- Paste every link of the campaign, including the ones you think are fine. Inconsistencies only show up side by side.
- Optional: add a GA4 export with source and medium (for example Traffic acquisition, "Session source / medium"). It is read in your browser.
- Press Run check, or Ctrl/⌘ + Enter.
- Work from the top: each finding names the lines, shows the evidence and gives the exact fix.
- Edit the links in your tools, paste them again and check until nothing critical is left.
How Reavlo tests this
Each link is parsed locally, in your browser. Lines that aren't http:// or https:// addresses are skipped and listed, and never counted in the score.
For every link, Reavlo reads utm_source, utm_medium and utm_campaign from the query string and applies the rules below. Values are compared case-insensitively and without punctuation to find spellings of the same value (Facebook, facebook, face-book). A few common short forms of sources are grouped too: fb (facebook), ig and insta (instagram), li (linkedin), yt (youtube), tw (twitter). They are only grouped, never renamed.
Channels come from the ga4-channel-rules dataset: the rules of the GA4 default channel group for manual traffic, in Google's order, plus Google's published list of search, social, shopping and video sources. Every value is compared in lowercase and the first rule that matches decides, as in GA4. A medium that no rule can match at all is a non-standard medium (UTM-07); a source and medium pair that lands in Unassigned is UTM-12; a source from Google's search, social, video or shopping list that lands in a channel of another kind is UTM-13. Rules that depend on Google Ads, DV360, CM360, SA360 or Merchant Center fields can't be evaluated from a link, so they are not applied.
GA4 exports. An export is read as CSV (comment lines starting with # are skipped). The pairs in it are classified with the same rules: pairs that land in Unassigned are UTM-14, and spellings of the same source or medium that GA4 reports as separate rows are UTM-15. Export findings are listed by the line of the file and do not change the score, which measures the links you pasted.
| Rule | Severity | What fails it |
|---|---|---|
utm.tags.in-fragment | Critical | utm_ parameters appear after # instead of in the query string |
utm.source.missing | Critical | A tagged link has no utm_source, or it is empty |
utm.source.inconsistent | Critical | The same source is written differently (case, punctuation or a common short form like fb) |
utm.medium.inconsistent | Critical | The same medium is written differently (case or punctuation) |
utm.tags.missing | Warning | A link has no utm_ parameters at all |
utm.medium.missing | Warning | A tagged link has no utm_medium, or it is empty |
utm.medium.nonstandard | Warning | utm_medium matches none of the medium conditions of the GA4 default channel group |
utm.campaign.missing | Warning | A tagged link has no utm_campaign, or it is empty |
utm.campaign.inconsistent | Warning | The same campaign is written differently (case, spaces or punctuation) |
utm.value.not-lowercase | Info | A source, medium or campaign contains capital letters |
utm.value.spaces | Info | A source, medium or campaign contains a space |
utm.channel.unassigned | Warning | The source, medium and campaign of a link match none of the rules of the GA4 default channel group |
utm.channel.source-mismatch | Warning | The source is on Google's search, social, video or shopping list, but the link lands in a channel of another kind |
utm.export.unassigned | Warning | A source / medium pair in the GA4 export matches none of the rules of the default channel group |
utm.export.inconsistent | Warning | The same source or medium appears in the export with different case, punctuation or a common short form |
The score (links only) starts at 100. Each link carries a penalty for the worst finding that touches it: critical 0.6, warning 0.3, info 0.1. For spelling findings, only the links that differ from the suggested value are touched; links that already use it pass. The score is 100 × (1 − average penalty per link), rounded. Below 60 is Needs work, 60–84 Solid, 85 and above Strong. A result always shows its engine version, so two checks are only compared when their versions match.
Limits. The check reads the links and the export you give it. It doesn't open links, and it can't see redirects, tags added later by an ad platform, custom channel groups in your GA4 property, or traffic that Google Ads and the other Google platforms label themselves. The rules were read from Google's documentation on the date shown under the tool; Google can change them.
Questions
Does Reavlo see my links?
No. The check runs in your browser and nothing you paste is sent to a server or stored. If Google Analytics is enabled on this site, it only records that the tool ran, never your links.
Why is “Facebook” different from “facebook”?
Analytics reports show values exactly as they were written. Two spellings become two rows, and the traffic from one source ends up split between them.
Why does my traffic show as Unassigned in GA4?
GA4 assigns a channel with a fixed list of rules. When the source, medium and campaign of a visit match none of them, the visit is Unassigned. UTM-12 and UTM-14 list the pairs that do this, so you can change the medium before the next campaign.
Does Reavlo upload my GA4 export?
No. The file is read and checked in your browser. It is never uploaded or stored.
Which UTM tags do I need?
At least utm_source, utm_medium and utm_campaign. utm_term and utm_content are optional and aren't scored.
Is the score a benchmark against other sites?
No. It only measures the consistency of the links you pasted, with the rules above. The method and its version are published so the number means the same thing every time.