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
- Open the form in the builder and go to Settings.
- Select the Advanced tab and find the URL Parameters panel.
- Turn on Enable Parameter Mapping.
- 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
- Mode — Hidden or Prefill
- Param Name — the name as it appears in the link, e.g.
- 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 Behavior — Hidden 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, notSpring%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.
- Build and publish once. One form, one form ID — do not duplicate the form per channel.
- 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
- Optional — make the source a field. In Settings → Advanced → URL Parameters, map
utm_sourceto 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. - Send the links, each one only through its own channel.
- 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_sourceas 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
- Open your tagged link in a private or incognito window.
- Complete the form with a short throwaway answer.
- Open that response and confirm the chips show the values you expect.
- 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.
- If you use a webhook, send a test and confirm the
hiddenobject arrives. - 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.
Emailandemailare 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
- Configure URL Parameter Prefilling and Hidden Fields — the other half of this feature, in depth
- Map Form Fields to CRM Properties Safely
- Create a Customer Testimonial Collection Form
- Troubleshooting: Webhook Not Triggering