Skip to main content

Free UTM Campaign Link Builder

Build trackable campaign URLs with UTM parameters for Google Analytics and other tools. Live preview, presets, and one-click copy.

Works offline once loaded

Quick presets

Where the traffic comes from (referrer).

The marketing channel/medium.

The specific campaign or promotion.

Paid keywords (optional, for paid search).

Distinguishes similar links/ads (optional, for A/B tests).

Enter a website URL above to build your tracking link

πŸ’‘ UTM parameters let Google Analytics, Plausible, and other tools attribute traffic to specific campaigns. Keep naming consistent (e.g. always 'email', never sometimes 'Email') β€” analytics treats them as case-sensitive and will split your data otherwise.

Common uses

  • UTM Links for Email CampaignsTrack which newsletter or email drove traffic and conversions in your analytics.
  • UTM Links for Social MediaMeasure traffic from each social platform and post accurately.
  • UTM Links for Paid Ad CampaignsAttribute conversions to specific ads, keywords, and creatives.
  • UTM Links for Print & QR CodesTrack offline campaigns β€” flyers, posters, business cards β€” via QR codes.
  • UTM Links for Influencer PartnershipsGive each influencer a unique tracked link to measure who drives results.

How It Works

The UTM builder assembles tracking URLs entirely in the browser using the standard URL and URLSearchParams APIs β€” no server, no upload. As you type, a live useMemo hook parses your base URL, validates the hostname, and appends only the UTM parameters you have filled in.

  1. 1
    URL parsing and validation
    Your base URL is fed into the browser's built-in URL constructor. The tool auto-prepends https:// if no scheme is present, then checks that the hostname contains at least one dot (or is localhost) β€” rejecting freeform prose before it can corrupt the output.
  2. 2
    UTM parameters appended via URLSearchParams
    Each filled-in field (source, medium, campaign, term, content) is written to the URL's search-params object with URLSearchParams.set(). If the lowercase toggle is on, values are lowercased at this point, which prevents mismatched attribution caused by capitalisation inconsistencies.
  3. 3
    QR code rendered by the qrcode library
    Whenever the final URL changes, the qrcode library renders a 256-px data-URL for the inline preview and simultaneously draws a 1024-px version onto an off-screen canvas. The canvas is then serialised to a PNG Blob via canvas.toBlob() so the download button can save it synchronously β€” required on iOS, where async Blob creation inside a click handler is blocked.
  4. 4
    Shareable template via the page hash
    The form state (base URL plus any UTM values) is continuously encoded into the page's URL fragment using window.history.replaceState. Anyone who opens that hash-bearing URL gets the form pre-filled, so you can save or share a campaign template without any server-side storage.

Related Tools

Frequently Asked Questions