How do Typeform hidden fields capture UTM parameters?
Typeform hidden fields are invisible variables you declare on a form, then fill by adding values to the form's link or embed code. Declare utm_source, utm_medium and utm_campaign as hidden fields, pass the values in, and every response stores the campaign that sent the respondent.
- Add hidden fields in the form's settings.
- Pass values in the link or embed.
- Carry UTMs from your landing page into the embed.
- Map the fields into your CRM or sheet.
- Test with a tagged URL.
A tagged ad brings the visitor to the landing page, the Typeform embed receives the UTMs, hidden fields store them on the response, and the response reaches your CRM.
How to add Typeform hidden fields for UTMs
- Open the form in Typeform and find Hidden fields (in the form's logic or settings area; the menu moves, so check Typeform's hidden fields guide).
- Add one field per parameter:
utm_source,utm_medium,utm_campaign,utm_term,utm_content. Lowercase, no spaces. - Save and publish.
The URL format Typeform expects
For a shared Typeform link, hidden field values go after a #, not a ?:
https://yourname.typeform.com/to/FORMID#utm_source=newsletter&utm_medium=email&utm_campaign=october
That works when you link straight to the form. Most people don't. They send traffic to a landing page that embeds the form, and that's where values go missing.
Pass UTMs through a Typeform embed
The embed has to receive the landing page's UTMs. Typeform's embed library has an option to pass the host page's query parameters into hidden fields. Check the current attribute name in Typeform's embed docs, as it has changed between versions. A common pattern:
<div data-tf-widget="FORMID"
data-tf-transitive-search-params="utm_source,utm_medium,utm_campaign,utm_term,utm_content">
</div>
This reads the parameters from the current page URL only. If the visitor landed on your homepage and then browsed to the page with the form, the UTMs aren't in the URL anymore. You need to store them on arrival and hand them to the embed, as in capturing UTM parameters in hidden fields.
Send the hidden fields to your CRM
Typeform's native integrations, Zapier and webhooks can all carry hidden field values. In each one, map utm_source to a matching CRM property, and so on. Create the CRM properties first. Keep them from being overwritten on later submissions.
Once it works, you can stop maintaining it: pre-register for Trakt and each Typeform response is recorded with the visitor's source.
Test it
Open your landing page with ?utm_source=test&utm_campaign=typeform-check, click to another page if your form lives elsewhere, submit, then open the response in Typeform. Both values should appear. Check the CRM record too.
Why Typeform hidden fields break in practice (and how Trakt helps)
The # format confuses people, the embed attribute changes, and anything that isn't on the current URL is lost. Each new form needs the setup again.
How Trakt closes the gap
Trakt connects to Typeform through a webhook and records each response with the source stored in the visitor's browser, so the campaign survives page changes. See the Typeform integration. Trakt keeps the first touch, links visits across devices, syncs source and revenue into your CRM, and alerts you to new leads by email and Slack.
Manual vs. Trakt, by requirement
| Requirement | Manual hidden fields | Trakt |
|---|---|---|
| Declare fields per form | Yes, every form | Not needed |
| UTMs from an earlier page | Your own script | Kept in a first-party cookie |
| Into the CRM | Map each field | Synced |
| New-lead alerts | Typeform notifications | Email and Slack, with the source |
| Writing a form people finish | Same either way | Same either way |
FAQ
How do I add hidden fields in Typeform?
Open the form, go to the hidden fields setting, and add a field for each value you want to capture, such as utm_source and utm_campaign. Then pass values in the form link after a #, or through the embed code.
Why aren't my Typeform hidden fields capturing UTMs?
The most common reason is that the UTMs aren't on the page where the form is embedded, because the visitor arrived on another page. Also check that you used # for direct links and that field names match exactly.
Can a Typeform embed read UTM parameters from the page URL?
Yes, the embed library can pass the host page's query parameters into hidden fields. It only sees the current URL, so values from an earlier page need to be stored and passed in separately.
How do I send Typeform UTM data to HubSpot or another CRM?
Create matching properties in the CRM, then map each hidden field to its property in Typeform's integration, Zapier or your webhook handler. Test with a tagged submission and check the CRM record.
Is there an easier way to track where Typeform leads come from?
Yes. Trakt records each Typeform response with the source from the visitor's browser through a webhook, so you don't need to declare hidden fields on every form or carry UTMs through embeds yourself.
What to do first
Submit your own Typeform from a tagged ad URL, through the page real visitors use. If the response shows no utm_source, the embed isn't getting it. Fix that before you touch the CRM mapping.



