URL Parameters & UTM Tracking
Two common questions: "How do I know which campaign a contact came from?" and "How do I save my own custom value — like an affiliate ID — together with a form submission?"
Short version:
- UTM parameters are captured automatically, everywhere. Any visitor who arrives with
utm_source,utm_medium,utm_campaign,utm_content,utm_term, orutm_idon the URL — plus their referrer and landing page — has those values saved to the contact record when they convert. This works on every entry point (hosted forms, embedded forms, booking pages and widgets, the website chat widget, contract signing) and does not require the click-tracking system. - Custom values ride along in two ways: a hidden field on a form (saved with the submission, and optionally to a contact field), or a token slot on a tracking link (saved on the click record).
UTM capture — how it works
When a visitor first lands on a page in a browsing session, Votel remembers that session's UTM parameters, referrer, and landing page. When the visitor converts — submits a form, books an appointment, starts a chat, signs a contract, or signs up — those values are saved onto the contact:
- First touch wins. A contact's UTM fields are set once, by their first attributed conversion. Later visits don't overwrite them.
- Works embedded and cross-domain. Embedded forms, booking widgets, and the chat widget on your own website capture the page's URL parameters exactly like our hosted pages do.
- Works with or without click tracking. No tracking link or pixel needed. If you do use tracking links or the tracking pixel, the UTMs recorded at ad-click time take precedence — the ad click is the origin of truth — and you additionally get click-level reporting, conversions, and token slots.
Where you see it: on the contact record (UTM fields, referrer, landing page — filterable in the CRM), and, when click tracking is active, also in the Click Log and Reports.
Passing custom values into a form (hidden fields)
Use a hidden field when you want your own value — an affiliate code, partner tag, A/B variant — captured from the URL and saved.
Classic forms
- In the form builder, drag the Hidden field (Advanced section) into your form. It shows as a card in the builder and is invisible to visitors.
- Set its URL Parameter Key — e.g.
ref— and optionally a Default Value. - Optionally pick a Save to Contact Field — any standard contact property or one of your custom fields. With this set, the value lands on the contact record itself, not just the submission.
- Send traffic to the form with the parameter appended:
https://yourdomain.com/f/apply?ref=partner42
Works on the hosted URL and on all six embed types — parameters on your page's URL are passed through to the embedded form automatically.
Conversational forms
Conversational forms configure hidden fields in the Hidden Fields & Variables panel (key + default value, and now also an optional Save to Contact Field). See Hidden Fields & Variables. Values are stored with the submission as __hidden__<key> and, when mapped, on the contact.
Where hidden values end up
| Configuration | Stored on the submission | Stored on the contact |
|---|---|---|
| Hidden field, no contact mapping | ✅ | — |
| Hidden field with Save to Contact Field | ✅ | ✅ (that field, incl. custom fields) |
Affiliate & sub-ID tracking
Pick per use case (they compose):
- Save the affiliate ID on the contact: hidden field with key
ref(or whatever your links use), mapped to a custom field like "Affiliate". Every contact created by that form carries the value. - Click-level affiliate reporting: send traffic through a tracking link and map the incoming parameter (e.g.
aff_id) to a token slot in your Source. Every click stores it, reports group by it, and it's available as{v1}-style URL tokens for postbacks to affiliate networks.
https://click.yourdomain.com/c/spring-promo?aff_id=partner42&utm_source=partner42&utm_medium=affiliate
Token slots (v1–v20) are part of click tracking: they're recorded on the click record and shown in click reports, but they are not copied onto the contact record. To get a custom value onto the contact itself, use a hidden field with Save to Contact Field. UTM parameters, by contrast, are saved to the contact automatically everywhere.
Bookings, chat & contracts
These entry points capture UTMs, referrer, and landing page automatically — nothing to configure, embedded or hosted, with or without click tracking. They don't have hidden fields; to attach a custom value to contacts arriving through them, either encode it in a UTM parameter (e.g. utm_content=partner42) or use a tracking link with token slots.
Prefilling visible fields
Plain URL parameters can't prefill visible fields like Name or Email — only hidden-field keys are read from the URL. Visible contact fields prefill through safer channels: returning visitors are prefilled automatically from their browser, and personalized links generated for known contacts carry a secure token that prefills and locks their details server-side without exposing the values in the URL. If you need an arbitrary value to travel with the visitor, model it as a hidden field.
Where each value ends up
| You pass | Stored on the contact | Stored elsewhere |
|---|---|---|
utm_source … utm_id (any entry point) | ✅ first-touch UTM fields | Click record too, if click tracking active |
| Referrer / landing page | ✅ | Click record too |
gclid, fbclid, other ad click IDs | ✅ (platform click IDs) | Click record; conversion matching |
| Hidden-field param (form) | ✅ if Save to Contact Field set | Always on the submission |
| Custom param mapped to a Source token slot | — | Click record ({v1}–{v20}), reports, postbacks |
| Anything else on the URL | — | Not stored |
Next Steps
- Hidden Fields & Variables — conversational hidden fields & variables
- Publish & Embed — hosted URL vs the six embed types
- Tracking Links and Sources — token slots & click-level reporting
- URL Tokens Reference — reuse captured values in lander/offer/postback URLs