How do you capture UTM parameters in Gravity Forms?

To capture UTM parameters in Gravity Forms, add a Hidden field for each parameter, open its Advanced tab, tick "Allow field to be populated dynamically", and set the parameter name to utm_source, utm_medium and so on. Gravity Forms then fills each field from the page URL and saves it with the entry.

  1. Add a Hidden field per UTM parameter.
  2. Enable dynamic population.
  3. Set the parameter name.
  4. Store UTMs for visitors who browse first.
  5. Test with a tagged URL.

A tagged link opens the page with your Gravity form, the hidden fields are populated, and the entry reaches your CRM with its source.

Step 1: add hidden fields

In the form editor, add a Hidden field from Standard Fields. Label it utm_source. Repeat for medium, campaign, term and content.

Step 2: enable dynamic population

Open each field's Advanced tab, tick Allow field to be populated dynamically, and enter the parameter name:

Field labelParameter name
utm_sourceutm_source
utm_mediumutm_medium
utm_campaignutm_campaign
utm_termutm_term
utm_contentutm_content

Gravity Forms' dynamic population docs cover the current options, including the gform_field_value filter for PHP.

Step 3: keep values across pages

Dynamic population reads the current URL. If the visitor lands on a blog post and submits on the contact page, the fields stay empty. Store UTMs on arrival and fill the fields later, as explained in persisting UTM parameters across pages. Page caching can also serve stale values, so test with your cache plugin on.

Step 4: send entries to your CRM

Gravity Forms add-ons (HubSpot, Salesforce and others) and webhooks can map hidden fields to CRM properties. Create the properties first.

Step 5: test

Visit the form page with ?utm_source=test, submit, and check the entry. Then land on another page with the tag, browse to the form, and submit again.

That's the manual setup. To skip it, pre-register for Trakt and every Gravity Forms entry arrives with its source attached.

Why Gravity Forms UTM tracking breaks (and how Trakt helps)

Each new form needs the fields. Cache serves old pages. Multi-page forms and AJAX submissions add edge cases.

How Trakt closes the gap

The Gravity Forms integration adds auto-injected hidden UTM fields to every form, keeps the source in a first-party cookie, syncs source and revenue into your CRM, and sends new-lead alerts by email and Slack. The WordPress UTM tracking guide covers sites with several plugins.

Manual vs. Trakt, by requirement

RequirementDynamic populationTrakt
Setup per formFive fields eachOnce per site
UTMs from earlier pagesExtra codeFirst-party cookie
Source in CRMAdd-on mappingSynced
A form people finishSame either waySame either way

FAQ

Can Gravity Forms capture UTM parameters?

Yes. Hidden fields with dynamic population read UTM parameters from the URL and save them in the entry.

What parameter name do I use for Gravity Forms dynamic population?

Use the exact UTM name, such as utm_source. It must match the query string key in the URL.

Why are my Gravity Forms UTM fields empty?

The visitor probably reached the form page without tags in the URL, or a cached page was served. Store UTMs on arrival and test with caching on.

Can I capture GCLID in Gravity Forms?

Yes, the same way: a hidden field populated from the gclid parameter.

How do I send Gravity Forms UTMs to HubSpot?

Use the HubSpot add-on or a webhook and map each hidden field to a HubSpot property.

Is there a plugin-free way to track Gravity Forms sources?

Trakt adds auto-injected hidden UTM fields to Gravity Forms and carries the source across pages.

What to do first

Open your main Gravity form, add a utm_source hidden field with dynamic population, and submit it via ?utm_source=test. Then try it from another page.