Free UTM builder with bulk matrix, platform presets, live GA4 linter, QR codes, and saved history. All nine UTM params including GA4-native utm_id, utm_source_platform, utm_creative_format.
A marketer-grade UTM campaign URL builder that bundles features normally paywalled behind $10–500/month SaaS tools. Supports all five classic UTMs (<code>utm_source</code>, <code>utm_medium</code>, <code>utm_campaign</code>, <code>utm_term</code>, <code>utm_content</code>) plus the four GA4-native parameters — <code>utm_id</code> (required for cost-data import from Meta, TikTok, LinkedIn), <code>utm_source_platform</code>, <code>utm_creative_format</code>, <code>utm_marketing_tactic</code>. The <strong>Bulk Matrix</strong> tags one campaign across 10+ platforms in one shot with optional A/B variants. The <strong>live linter</strong> flags uppercase letters, spaces, special characters, missing required fields, and URLs that already contain UTMs that would be overwritten — the same kinds of mistakes that fragment rows in GA4 reports and cost marketers days of data cleanup. History is saved to your browser, exports as JSON or CSV (compatible with Google Sheets team workflows), and every form config can be shared with a teammate via URL hash. Zero signup, zero server — everything runs client-side.
There are now nine UTM parameters Google Analytics 4 recognises. The first five are the classics from the original Urchin Tracking Module; the last four were added for GA4 and are still missing from most free builders.
| Parameter | Required? | What it answers | Example |
|---|---|---|---|
utm_source | Yes (GA4) | Which site or publisher sent the traffic? | google, facebook, newsletter |
utm_medium | Yes (GA4) | What channel? Ad, email, social, referral? | cpc, email, social |
utm_campaign | Yes (GA4) | Which specific campaign or promotion? | spring_launch_2026 |
utm_term | Optional | Paid search keyword | running+shoes |
utm_content | Optional | Which ad variant or link in the email? | header_banner, variant_a |
utm_id | GA4 import | Campaign ID for GA4 ad-cost import join | ad_12345 |
utm_source_platform | Optional | Which buying platform? (DV360, SA360, Meta) | meta_ads |
utm_creative_format | Optional | Creative type (GA4 stores, doesn't yet report) | video, display |
utm_marketing_tactic | Optional | Funnel stage — prospecting vs retargeting | remarketing |
For most campaigns you only need the first three, optionally plus utm_content for A/B creatives. Enable the GA4-native block when you are doing cross-platform ROI reporting and need the ad-platform cost data in the same dashboard as your GA4 traffic — utm_id is the join key without which the import silently drops the rows.
UTM parameters are deceptively simple strings. That simplicity is exactly why they go wrong so often. In a survey of GA4 implementations, roughly 70% of properties have at least one of these four issues:
Facebook, facebook, and FACEBOOK are three different values in GA4. One careless teammate with a copied campaign URL creates a permanently split audience row. The built-in linter flags any uppercase letter instantly, and the normaliser can force lowercase on build.Spring Launch 2026 in utm_campaign becomes Spring%20Launch%202026 in some browsers, Spring+Launch+2026 in others. GA4 sees them as different rows. The fix: convert spaces to _ (snake_case) or - (kebab-case) on build — the normaliser has one-click presets for both.utm_source=x&utm_source=y, and GA4 keeps only one of them (implementation-dependent). The linter detects this and warns you before the tagged URL hits your copy-paste buffer.utm_medium blank produces (not set) in GA4 reports. Many builders accept empty values; this one refuses to let you save a link with any of the three required fields missing.Fix these four and your campaign data becomes comparable across months for the first time. That is the actual value of a good UTM builder — not generating URLs, but preventing mistakes.
A typical launch announcement goes to eight places: organic Facebook, Instagram Stories, LinkedIn, X/Twitter, a paid Meta boost, the weekly newsletter, a WhatsApp broadcast, and the affiliate network. Each needs its own tagged URL with the same utm_campaign but a different utm_source and utm_medium.
With Google's URL Builder, that is eight trips through the same form. Copy, paste, retype the campaign name, hope you spelt it identically every time (you did not — see case fragmentation above). With the Bulk Matrix, you type the URL and campaign name once, tick the platforms you want, and every tagged URL appears at once — already passed through the normaliser, already validated, already ready to copy into your publishing tools.
Add the A/B variant toggle and you double every URL with utm_content=a and =b so you can split-test creatives on every platform from the same matrix. Hit "Save all to history" to dump the full set into your saved library, or "Download CSV" if you need them in a spreadsheet for the team to distribute. This single view replaces what normally takes a 40-row Google Sheet with VLOOKUPs — and the sheet is where half of the typos creep in.
Everything in this tool runs client-side. The URL you tag, the history you save, the QR codes you download, the JSON you export — none of it is transmitted to a server. The history lives in localStorage, which is tied to this browser on this device: it persists across tabs and restarts but does not sync to a different browser or a different computer. Use Export JSON to back up, or email yourself the file, or commit it to your team's shared drive if you want everyone using the same library.
Deliberate limitations — things this builder does not do, and why:
yourco.link/abc) need DNS, a hosted redirector, and per-user plans. Use Bitly, Rebrandly, or your own Cloudflare Worker on top of the generated URL if you need branded short links.If you need any of the above, this tool slots cleanly underneath them — build clean, validated tagged URLs here, then feed them into whatever governance layer your team already uses.
Google's tool resets after every URL — no history, no bulk, no templates, no QR, no validation. This builder adds all of that plus the four GA4-native parameters (utm_id, utm_source_platform, utm_creative_format, utm_marketing_tactic) that Google's own tool oddly hides behind a dropdown. A/B variant pairing, platform presets, and the live linter are the three features that save marketers the most time.
GA4 is case-sensitive — "Facebook", "facebook", and "FACEBOOK" show up as three separate rows in every report. This is the single biggest cause of dirty campaign data. The built-in normaliser auto-lowercases and converts spaces to underscores or hyphens, so your team cannot accidentally fragment data. Toggle it off if you have a reason to keep original casing.
utm_id is the campaign ID parameter added for GA4. You only need it if you plan to import cost data from Meta Ads, TikTok Ads, LinkedIn Ads, or another platform into GA4 for unified ROI reporting — the import uses utm_id as the join key. For regular click tracking, source + medium + campaign are enough. The linter will nudge you if you add utm_source_platform or utm_marketing_tactic without an utm_id, since those three travel together in the GA4 import flow.
No — it lives in this browser's localStorage, so it persists across tab closes and browser restarts on the same device but is not visible on a different browser or device. Use Export JSON to back up or move to another device, then Import JSON on the new device to restore. Cross-device sync with a free account is planned for a future update.
Yes — export your Google Sheet as CSV, then use the JSON format described in the exported file (Export once to see the schema) to import. Direct CSV import is on the roadmap; for now the JSON round-trip works.
No. Existing query parameters (like <code>?variant=blue</code>) are preserved. If the URL already contains a UTM parameter, the builder will overwrite just that one UTM and leave everything else alone — and the linter will warn you before it does.
Tick the A/B toggle in Bulk Matrix and provide two utm_content values (default "a" and "b"). For each platform you select, the builder generates a matched pair: one URL with utm_content=a and one with utm_content=b. Use them for split-testing creatives on the same platform — GA4 will attribute clicks to each variant separately.
Not yet — deep-link support for custom schemes (e.g. <code>myapp://</code>) and Android App Links / iOS Universal Links is planned. For now, append UTMs to a web URL that hands off to your app via the usual deep-link infrastructure.
Related: utm builder, utm link builder, utm generator, campaign url builder, utm parameters generator, google analytics url builder, ga4 utm builder, bulk utm builder, utm matrix, utm tracking link generator, free utm builder no signup, utm builder with qr code, utm link generator with history, utm_id generator, utm_source_platform, utm a/b test link generator, utm linter validator