Free tool, built into Admaxxer.

URL Builder — UTM-tagged campaign URLs in 60 seconds

Build UTM-tagged URLs for Meta, Google, TikTok, Klaviyo, Pinterest, Snapchat, Reddit, and Amazon. Platform-correct macros, copyable templates, and a deep-link button from every campaign row inside /marketing-acquisition.

Open the URL Builder Read the UTM playbook

Free on every plan. No row limit. No watermark on generated URLs.

What is a UTM, and why does it matter?

A UTM (Urchin Tracking Module) parameter is a query-string tag appended to a URL — utm_source, utm_medium, utm_campaign, utm_content, and utm_term — that lets your analytics tool attribute the click to a specific ad, email, or post. The five-parameter convention has been industry-standard since 2005 and is the universal layer that lets Admaxxer (and every other analytics tool) attribute clicks without depending on platform-specific tags like gclid or fbclid.

Admaxxer’s first-party pixel reads UTMs on every pageview and joins them to spend pulled directly from the Meta Marketing API and Google Ads API. The result: blended ROAS, MER, and cohort LTV broken out by campaign, ad set, and creative — without depending on platform-reported numbers. Without UTMs, paid clicks land in the (direct) bucket on /marketing-acquisition and your channel breakdown silently misattributes 30–60% of revenue.

The URL Builder exists so this never happens. Pick a platform, fill three fields, copy the URL. Done.

Platform-by-platform templates

Every platform has a different macro convention — Meta uses {{campaign.name}}, Google uses {campaignid}, TikTok uses __CAMPAIGN_NAME__, Snapchat uses {{campaignName}}, Reddit uses {{CAMPAIGN_NAME}}. Get the syntax wrong and the macro renders literally as part of your URL, which silently breaks attribution. The table below is the canonical mapping. Copy a row, paste it into the destination platform, replace yourstore.com with your storefront domain.

Platform-by-platform UTM templates — copy, paste, ship
Platform utm_source utm_medium Campaign macro Full template How to install
Meta (Facebook + Instagram) facebook cpc {{campaign.name}} https://yourstore.com/?utm_source=facebook&utm_medium=cpc&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}} Paste into the Website URL field at the ad level. Meta resolves macros server-side at impression time, so every click reports the campaign, ad set, and ad name verbatim.
Google Ads google cpc {campaignid} https://yourstore.com/?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_content={creative}&utm_term={keyword} Set as the Final URL suffix at the account level. Use lowercase ValueTrack parameters. Disable auto-tagging only if you cannot route gclid into BigQuery — otherwise leave both on.
TikTok Ads tiktok cpc __CAMPAIGN_NAME__ https://yourstore.com/?utm_source=tiktok&utm_medium=cpc&utm_campaign=__CAMPAIGN_NAME__&utm_content=__AID_NAME__&utm_term=__CID_NAME__ TikTok dynamic parameters use double underscores. Set on the ad-level URL field. TikTok Pixel CAPI also forwards these to your first-party pixel.
Klaviyo klaviyo email {{ campaign.name }} https://yourstore.com/?utm_source=klaviyo&utm_medium=email&utm_campaign={{ campaign.name }}&utm_content={{ message.id }}&utm_term={{ list.name }} Set in Account Settings → UTM Tracking. Klaviyo auto-applies these tags to every link in every campaign + flow email when enabled. Avoid manual UTMs in individual templates — they double-tag.
Pinterest Ads pinterest cpc {campaignname} https://yourstore.com/?utm_source=pinterest&utm_medium=cpc&utm_campaign={campaignname}&utm_content={adid}&utm_term={adgroupname} Pinterest URL parameters render at click time. Add at the ad level — the Pin destination URL accepts query string macros directly.
Snapchat Ads snapchat cpc {{campaignName}} https://yourstore.com/?utm_source=snapchat&utm_medium=cpc&utm_campaign={{campaignName}}&utm_content={{adName}}&utm_term={{adSquadName}} Snapchat uses double-curly camelCase macros. Set on the ad's Swipe Up URL or Web View URL. Test in the preview pane before publishing — invalid macro names render literal.
Reddit Ads reddit cpc {{CAMPAIGN_NAME}} https://yourstore.com/?utm_source=reddit&utm_medium=cpc&utm_campaign={{CAMPAIGN_NAME}}&utm_content={{AD_NAME}}&utm_term={{AD_GROUP_NAME}} Reddit uses double-curly UPPER_SNAKE_CASE macros. Set at the ad level. The Reddit Pixel forwards click_id alongside UTMs to first-party pixels.
Amazon Ads (Sponsored Brands / DSP) amazon cpc (manual campaign label) https://yourstore.com/?utm_source=amazon&utm_medium=cpc&utm_campaign=campaign_label_here&utm_content=ad_label_here Amazon Ads has limited macro support outside the Amazon-store-redirect funnel. For off-Amazon landing pages (Sponsored Brands → custom URL), use a static campaign label and rotate it per launch.

How the URL Builder fits with the rest of Admaxxer

Best practices the URL Builder enforces

  1. Lowercase utm_source and utm_medium. Analytics tools are case-sensitive. Facebook and facebook show up as two separate channels and split your reporting.
  2. No spaces. Use hyphens or underscores. Spaces become %20 on the wire and can break downstream regexes.
  3. Use platform macros for campaign + ad names. Don’t hand-type the campaign name — use {{campaign.name}} (Meta), {campaignid} (Google), or the platform’s equivalent. If you rename the campaign, the URLs auto-update without re-tagging.
  4. Always tag utm_medium as cpc for paid social/search. Even though Meta is technically paid_social and Google is cpc, using cpc across both is the cleanest convention — it lines up with the GA4 default channel grouping and Admaxxer’s blended-MER math.
  5. Enable Klaviyo’s account-level UTM tagging. Don’t hand-tag individual emails — turn on the account-wide setting in Klaviyo Settings → UTM Tracking and let it apply to every campaign + flow email automatically.

The deeper playbook lives at /documentation/utm-best-practices, including the full taxonomy guide, the recommended utm_campaign naming pattern, and the “why Google auto-tagging doesn’t replace UTMs” explainer.

Frequently asked

What is a UTM?
A UTM (Urchin Tracking Module) parameter is a query-string tag appended to a URL — utm_source, utm_medium, utm_campaign, utm_content, and utm_term — that lets your analytics tool attribute the click to a specific ad, email, or post. UTMs were originally introduced by Urchin (the company Google bought in 2005 to build Google Analytics), and the five-parameter convention is now industry-wide. Admaxxer's first-party pixel reads UTMs on every pageview and joins them to ad-platform spend so you can see blended ROAS by campaign, ad set, and creative without depending on platform-reported numbers.
How do I tag a Meta campaign?
Paste this template into the Website URL field at the AD level (not the campaign or ad-set level): https://yourstore.com/?utm_source=facebook&utm_medium=cpc&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}. Meta resolves the {{campaign.name}}, {{adset.name}}, and {{ad.name}} macros at impression time, so every click reports the live name verbatim. If you rename the campaign mid-flight, all subsequent clicks pick up the new name without you re-editing the URL. The Admaxxer URL Builder generates this template with your store domain pre-filled.
Does Google auto-tagging replace UTMs?
No — they're complementary. Google Ads auto-tagging appends a gclid parameter that maps clicks back to the underlying campaign/ad inside the Google Ads UI, but gclid is invisible to non-Google analytics tools. UTMs are the universal layer: they let Admaxxer (and any other analytics tool) attribute the click without needing Google Ads API access. The recommended setup is auto-tagging ON (so Google Ads' own reporting works) and a Final URL suffix with utm_source=google&utm_medium=cpc&utm_campaign={campaignid} (so cross-platform tools see the click). They don't conflict — they're different layers of the same attribution stack.
How do I avoid (direct) in /marketing-acquisition?
(direct) appears in the channel breakdown when a click lands without a referrer AND without UTMs — typically a hand-typed URL, a click from a native app that strips referrers, or an ad-platform link without proper tagging. The fix is two-fold. First, tag every paid link with the templates above — every Meta, Google, TikTok, Klaviyo, Pinterest, Snapchat, Reddit, and Amazon link should carry utm_source + utm_medium + utm_campaign at minimum. Second, enable Klaviyo's automatic UTM tagging at the account level so transactional + flow emails are covered. After 7 days of fully tagged campaigns, the (direct) bucket on /marketing-acquisition typically drops below 5% of total sessions — anything above that is a tagging gap worth chasing.

Related

Start tagging campaigns Read the playbook