Capturing UTM parameters in HubSpot sounds simple and usually isn’t, not because HubSpot can’t do it, but because the data has to survive a chain of hops that most setups break somewhere along the way. Here’s the full path, and where to reinforce it.
Step 1 — Preserve the parameters across pages
A visitor rarely fills out a form on the page they land on. They read a post, click to another page, then convert, and by then the original UTM parameters are gone from the URL unless you preserve them. A lightweight script that reads the parameters on first page load and writes them to browser storage keeps the original source available across the whole visit.
Step 2 — Hidden form fields
Add five hidden fields to every HubSpot form, mapped to contact properties for utm_source, utm_medium, utm_campaign, utm_content, and utm_term. On submission, the preserved values pass into the CRM alongside the name and email. Add a sixth field for the Google Click ID (gclid) if you run Google Ads, plus a self-reported “How did you hear about us?” field to catch the channels no script can see.
Step 3 — Map to the deal (the step most teams skip)
In HubSpot, UTM values on a contact are accessible from associated deals natively, but they have to be explicitly added to deal views, pipelines, and reports, or they stay invisible exactly where they matter most. This is the most commonly broken step in the whole chain. Configure it, and you can finally report revenue by channel instead of leads by channel.
Frequently asked questions
See where your revenue is leaking
The Rapid Alignment Audit maps exactly where your marketing-to-sales handoff breaks — and hands you a prioritized fix you keep either way.
Book the Audit →