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.

  1. Add hidden fields in the form's settings.
  2. Pass values in the link or embed.
  3. Carry UTMs from your landing page into the embed.
  4. Map the fields into your CRM or sheet.
  5. 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

  1. 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).
  2. Add one field per parameter: utm_source, utm_medium, utm_campaign, utm_term, utm_content. Lowercase, no spaces.
  3. 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

RequirementManual hidden fieldsTrakt
Declare fields per formYes, every formNot needed
UTMs from an earlier pageYour own scriptKept in a first-party cookie
Into the CRMMap each fieldSynced
New-lead alertsTypeform notificationsEmail and Slack, with the source
Writing a form people finishSame either waySame 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.