One script tag captures first-touch, last-touch, and full-session UTMs for every form on your site.
Hidden-field UTM tracking is the duct tape of marketing analytics. It looks fine in a clean demo. In production, with real visitors clicking around your site, it breaks in five predictable ways.
Lead Source handles all of it. auto-detect, persist, attach, submit. With one script tag and zero per-form work.
The script captures UTMs at first touch, preserves them across the entire session, then attaches them to every form submission. Server-side, at the moment of submit.
Drop it into your site head or paste it into Google Tag Manager. Works on every CMS, every framework, every form tool. No backend integration.
First-touch UTMs stored. Last-touch updated on each new campaign click. The full UTM payload survives navigation, tab switches, and same-day return visits.
On submit, the full UTM payload. First touch, last touch, journey. Is sent server-side to your inbox, dashboard, webhook, or CRM. No hidden fields. No matching by email later.
5-min install. No card required.
Pick the model that matches your reporting. Or use all three. Every lead arrives with the full timeline attached.
The UTMs from the visitor’s very first session on your site. Stored from day one. Doesn’t get overwritten by later campaign clicks.
The UTMs from the session in which they submitted. Updates on every new campaign click. Maps to "what worked right before they converted."
The ordered sequence of every campaign click in the visitor’s history. Plug into multi-touch attribution. Or just look at what made the difference.
14-day free trial · 5-min install. No card required.
Most "UTM tracking" tools only capture what’s in the URL right now. Lead Source remembers the campaign that first found a visitor. And every campaign click since. Even if the form submission is days, weeks, or a hundred page views away.
Same lead. Three campaigns deserve credit. All three captured. Most tools would have shown this lead as "direct" or "(none)". Because the form fired on a session without a UTM in the URL.
We had a custom script our dev built two years ago to pass UTMs into Gravity Forms. Half the leads still came in as "direct." Swapped to Lead Source in an afternoon. first-touch and last-touch on every submission, no code on our end.
No plugin per platform, no per-form hidden fields. The script attaches to forms automatically, whatever tool they were built with.
If it’s a form on a web page, we attach to it. No per-form setup required.
"We already use hidden fields. Why switch?"
Hidden fields work for the leads who fill in the form on their first session, on the landing page, without navigating anywhere else. In reality that’s a minority of your leads. Lead Source captures the rest. The visitors who come back later, the ones who browse before submitting, the ones who clicked an email before filling a form on a different page. And you stop maintaining per-form fields forever.
"How is this different from Google Analytics?"
GA4 sees the click, not the lead. It tells you sessions and conversions in aggregate, but never connects a specific UTM payload to a specific submitted form. Lead Source does that. first.utm_* and last.utm_* attached to the actual lead record, ready for your CRM or warehouse.
"Does the visitor have to be cookied for this to work?"
No cookies. No client-side storage. No fingerprinting. UTM persistence is handled server-side. Means the script sits outside ePrivacy/PECR storage-and-access scope entirely. No cookie banner required for our snippet, and the data still works.
"How do UTMs get into HubSpot / Salesforce / our CRM?"
However you want them. Direct webhook into HubSpot or Salesforce, Zapier, Make, native CRM integrations, or just email + dashboard. The full payload. first.utm_source, last.utm_campaign, the journey array. Is available on every lead record.
One script tag, five minutes, every form on your site with every UTM and every visit captured. Free to start. No card required.
Start free