M
Margin Tools · Internal
marginpricing.com →

UTM Builder

Generates conformant tracking URLs for paid campaigns, personal outreach, and organic distribution. Everything is local — nothing leaves your browser.

Defaults to homepage. Change for landing pages.
Format: {quarter}_{audience}_{angle}
Creative ID. {format}{n}_{description}
Leave blank for paid social / personal.
History — last 50, stored in this browser
Tips, tricks & gotchas
  • Personal outreach pattern. Use utm_source=personal, utm_medium=referral, a stable quarterly utm_campaign like 2026q2_founders_outreach, and the recipient slug in utm_content. Lets you see in PostHog "which friend converted" without polluting your campaign axis.
  • Recipient slug guidance. First-name + last-initial (jane-d) is short, recognizable to you, and not super-googleable. Avoid full last names if the link might be forwarded.
  • Sensitive contacts. Use a short hash (?utm_content=ab12cd) and keep the mapping in a private Google Sheet — out of the URL entirely.
  • Never tag internal links. Internal navigation on marginpricing.com should never carry UTMs — they reset attribution on every click and corrupt the funnel data.
  • Link shorteners are fine. PostHog reads UTMs after the redirect. bit.ly, short.io, or a Cloudflare Pages function at /r/{slug} all work.
  • Email-client previewers may strip UTMs from preview URLs but keep them on click — verify by clicking the link from your inbox, not by hovering.
  • Test before sending. Paste the URL in an incognito window (so you don't trigger your own ph_optout), then check the PostHog Activity feed for the event with the right utm_* properties.
  • First-touch vs last-touch. PostHog captures both. First touch lives in $initial_utm_* person properties. Last touch is on the event itself. Both views are available on every dashboard.
  • One stable campaign per quarter for outreach is better than many tiny ones. Slice the data by utm_content instead.