Back to Help Center
FormsFeature GuideForms

Track Campaign Sources with UTM Parameters in Video Forms

What this guide covers Every RecRam video form records the URL parameters that were on its link when the respondent opened it. That means you can tell which channel, campaign, ad variant or partner produced each video re

Last reviewed: August 11, 2026

What this guide covers

Every RecRam video form records the URL parameters that were on its link when the respondent opened it. That means you can tell which channel, campaign, ad variant or partner produced each video response — without adding a single question to your form.

This guide covers both halves of the feature: automatic capture, which needs no setup at all, and parameter mapping, which writes a URL value straight into a form field. It ends with link naming conventions, a full worked example, a pre-launch test checklist, and the one thing that trips people up on embedded forms.

Two ways to use URL parameters

These are separate mechanisms and they are easy to confuse. Most teams only need the first one.

Automatic capture Parameter mapping
What it does Stores every URL parameter alongside the response Writes a parameter’s value into a specific question
Setup required None — always on Form settings or the question panel
Respondent sees it Never Only in Prefill mode
Best for Campaign attribution (utm_*), partner IDs, A/B variants CRM record IDs, known email addresses, personalising the form

Part 1 — Automatic UTM capture (no setup required)

Add parameters to your published form link and they are stored with whatever the respondent submits. Nothing to switch on.

https://share.recram.com/68a1f0c9e4b7?utm_source=instagram&utm_medium=bio_link&utm_campaign=spring_testimonials

The five recognised UTM parameters

Parameter Answers the question Example value
utm_source Which platform sent them? instagram, newsletter, google
utm_medium What kind of placement was it? email, cpc, qr, bio_link
utm_campaign Which initiative is this? spring_testimonials, q3_nps
utm_content Which creative or variant? video_a, banner_blue
utm_term Which paid keyword? video_survey_tool

These five are flagged as campaign data and shown in blue on the response. Everything else you put in the link is captured too, just labelled as a custom parameter:

https://share.recram.com/68a1f0c9e4b7?partner=acme&plan=pro&crm_id=48213

There is no list to maintain and no field to declare in advance — invent the parameter name you need and it will be there on the response.

Hash-style links work as well

Some platforms strip or rewrite query strings. If that happens, use a hash instead — RecRam reads both:

https://share.recram.com/68a1f0c9e4b7#utm_source=newsletter&subscriber=48213

Capture happens per visit

Parameters are read the moment the form opens, and they travel with whatever that visit submits. Three consequences worth planning around:

  • Attribution belongs to the visit, not to the person. Someone who opens your tagged link, leaves without submitting, and later returns through a plain untagged link will submit without campaign values.
  • Reloading with the tagged link still in the address bar is fine — the values are simply read again.
  • Starting on a phone and finishing on a laptop counts as two separate visits.

The practical rule: the tagged link should be the only link that audience ever receives. Circulating an untagged copy of the same form alongside it is the most common reason attribution goes missing.

Part 2 — Map a URL parameter into a form field

Use this when the value has to behave like an answer — appear as a column next to your questions, feed conditional logic, or be shown back to the respondent for confirmation.

Form-level mapping

  1. Open the form in the builder and go to Settings.
  2. Select the Advanced tab and find the URL Parameters panel.
  3. Turn on Enable Parameter Mapping.
  4. Click Add Mapping and fill in three columns:
    • Param Name — the name as it appears in the link, e.g. utm_source
    • Target Field — the question that should receive the value
    • ModeHidden or Prefill
  5. Save the form and republish.

Add one row per parameter. A single form can map utm_source, utm_campaign and a CRM ID at the same time.

Question-level mapping

If only one question needs a value, set it on the question itself: select the question in the builder, open its properties panel, switch on URL Parameters, then fill in Parameter Name and choose a BehaviorHidden Field or Prefill Field.

Contact information blocks go one level deeper: each field inside the block (name, email, phone, company) can take its own parameter, so a single link can prefill an entire contact step.

Hidden vs Prefill

Hidden Prefill
Respondent sees the value No Yes
Respondent can change it No Yes
Stored with the response Yes Yes
Typical use Campaign source, CRM ID, partner code Email or name you already know, so they don’t retype it

Rule of thumb: if a wrong value would be embarrassing to show, use Hidden. If saving the respondent a few seconds of typing is the point, use Prefill.

The form_ prefix

Every mapped parameter is also matched with a form_ prefix. A mapping for email picks up either of these:

?email=ada@example.com
?form_email=ada@example.com

Useful when the page carrying the link already uses a generic name like email or id for something else, and you need an unambiguous one.

Decide your link naming before you launch

Attribution is only as good as your discipline with names. Instagram, instagram and IG will show up as three unrelated sources and no report will put them back together.

  • Lowercase everything.
  • Use underscores instead of spaces — spring_testimonials, not Spring%20Testimonials.
  • Keep the roles straight: source is the platform, medium is the format, campaign is the initiative.
  • Write the convention down somewhere your whole team can see before the first link goes out.

Ready-made examples by channel

Channel Parameters to append
Instagram bio link ?utm_source=instagram&utm_medium=bio_link&utm_campaign=q3_testimonials
Email newsletter ?utm_source=newsletter&utm_medium=email&utm_campaign=july_nps
Google Ads ?utm_source=google&utm_medium=cpc&utm_campaign=brand_search&utm_term=video_survey_tool
LinkedIn job posting ?utm_source=linkedin&utm_medium=job_post&utm_campaign=backend_hiring_2026
QR code on a printed flyer ?utm_source=flyer&utm_medium=qr&utm_campaign=expo_hall_b
Partner or affiliate ?utm_source=acme&utm_medium=partner&utm_campaign=co_marketing&partner_id=1187
A/B testing two creatives ?utm_source=facebook&utm_medium=paid_social&utm_campaign=launch&utm_content=video_a

Once you have configured any mapping, the builder’s Publish → Share screen shows a second, longer version of your form link labelled With Parameters. It is filled with placeholder values — copy it as the template for your real links.

Where the captured data shows up

On each response

Open Responses and select a response. The captured parameters appear as small chips just under the tags at the top: blue chips for the five UTM parameters, grey chips for everything custom. Each chip shows the parameter name and its value, so a response might read utm_source instagram alongside partner acme.

In webhooks and integrations

Captured parameters travel with the webhook payload in a hidden object:

{
  "event": "response.completed",
  "data": {
    "response_id": "6b31c0f4d9a2",
    "form_name": "Customer testimonials",
    "fields": [ ... ],
    "hidden": {
      "utm_source": "instagram",
      "utm_campaign": "spring_testimonials",
      "partner": "acme"
    }
  }
}

Destinations that expect a flat structure — Zapier, Make and similar — receive the same values as prefixed keys, ready to map straight onto spreadsheet columns or CRM fields:

hidden_utm_source     = instagram
hidden_utm_campaign   = spring_testimonials
hidden_partner        = acme

Worked example: one form, three channels

You are collecting customer testimonials and promoting the same form on Instagram, in a monthly email, and through a partner’s website. You want to know which one actually produces usable videos.

  1. Build and publish once. One form, one form ID — do not duplicate the form per channel.
  2. Create three links from the same base URL:
    https://share.recram.com/68a1f0c9e4b7?utm_source=instagram&utm_medium=bio_link&utm_campaign=spring_testimonials
    https://share.recram.com/68a1f0c9e4b7?utm_source=newsletter&utm_medium=email&utm_campaign=spring_testimonials
    https://share.recram.com/68a1f0c9e4b7?utm_source=acme&utm_medium=partner&utm_campaign=spring_testimonials&partner_id=1187
  3. Optional — make the source a field. In Settings → Advanced → URL Parameters, map utm_source to a short text question called “Source” in Hidden mode. The channel now behaves like an answer and can drive conditional logic — for example, routing partner respondents to a different closing screen.
  4. Send the links, each one only through its own channel.
  5. Read the results. Open any response and the chips tell you where it came from. For a channel-by-channel view, connect a webhook to a spreadsheet and use hidden_utm_source as the grouping column.

The same shape works for recruitment (one job form, a link per board), events (one form, a QR per hall), and partner programmes (one form, a link per partner with their partner_id attached).

Test before you launch

  1. Open your tagged link in a private or incognito window.
  2. Complete the form with a short throwaway answer.
  3. Open that response and confirm the chips show the values you expect.
  4. If you configured a mapping, check the mapped question: the value should be stored invisibly in Hidden mode, or visible in the field in Prefill mode.
  5. If you use a webhook, send a test and confirm the hidden object arrives.
  6. Repeat once on a phone — most video responses come from mobile.

Testing in a normal browser window can mislead you, because parameters captured on an earlier visit are still held for that form.

Embedded forms: put the tags in the embed URL

This is the most common surprise. When a form is embedded in one of your pages, the parameters on the host page’s address are not passed into the form automatically. The form only sees what is in its own URL.

For a fixed placement, tag the embed target directly:

<div data-recram="https://share.recram.com/68a1f0c9e4b7?utm_source=website&utm_medium=pricing_page"></div>

If the host page’s own campaign tags need to flow through — a landing page that receives ad traffic, for instance — copy them onto the embed target before the embed script initialises. Place this immediately after the embed container:

<script>
  var qs = window.location.search.slice(1);
  if (qs) {
    document.querySelectorAll('[data-recram]').forEach(function (el) {
      var url = el.getAttribute('data-recram');
      el.setAttribute('data-recram', url + (url.indexOf('?') > -1 ? '&' : '?') + qs);
    });
  }
</script>

Common mistakes

  • Duplicating the form per channel. One form with several tagged links keeps your responses, logic and AI analysis in one place. Duplicates fragment everything.
  • Inconsistent capitalisation. Email and email are different parameters. Pick lowercase and stay there.
  • Prefilling something you are not certain about. A wrong name shown back to a respondent costs more trust than an empty field. When in doubt, use Hidden.
  • Leaving personal data in a shareable link. Anything in the URL is visible to the respondent and to anyone they forward the link to. Use record IDs, not names, email addresses or phone numbers.
  • Testing in the same browser repeatedly. Earlier parameters are still held for that form, so a “successful” test can be showing you yesterday’s values.
  • Forgetting the embed case. Host-page tags do not reach an embedded form on their own.

Good to know

  • Capture is per response, not per session — a visitor who never submits leaves no record.
  • There is no limit on how many custom parameters a link can carry, but long URLs are fragile in print and in QR codes. Three to five parameters is a practical ceiling.
  • Campaign values are visible on each individual response today. For channel-level totals, route responses to a spreadsheet or BI tool through a webhook and group by hidden_utm_source.

Related guides