Back to Help Center
FormsFeature GuideForms

Configure URL Parameter Prefilling and Hidden Fields

What this guide solves When you already know something about the person you are inviting — their name, their email, their CRM record, the plan they are on, the ticket they just closed — there is no reason to make them ty

Last reviewed: August 11, 2026

What this guide solves

When you already know something about the person you are inviting — their name, their email, their CRM record, the plan they are on, the ticket they just closed — there is no reason to make them type it again. URL parameter mapping carries that context into the form through the link itself.

Two modes are available. Prefill fills a field in and lets the respondent correct it. Hidden stores the value invisibly. This guide covers both, plus personalising question text with the values you pass in.

If your goal is campaign attribution rather than filling in fields — knowing which channel or ad produced a response — read Track Campaign Sources with UTM Parameters in Video Forms instead. That happens automatically and needs no mapping at all.

Prefill or Hidden — pick one per field

Prefill Hidden
Respondent sees the value Yes, in the field No
Respondent can edit it Yes No
Saved with the response Yes Yes
Can personalise question text Yes No
Use it for Email, name, company — things the respondent should confirm Record IDs, plan codes, ticket numbers — things they shouldn’t have to think about

The deciding question is what happens if the value is wrong. A wrong visible value invites a correction, which is usually what you want for contact details. A wrong hidden value is silently stored, which is fine for internal identifiers but bad for anything a human should verify.

Map a parameter for the whole form

Use this when one parameter should always land in the same field, regardless of which question you are editing.

  1. Open the form in the builder and go to Settings.
  2. Open the Advanced tab and find the URL Parameters panel.
  3. Turn on Enable Parameter Mapping.
  4. Click Add Mapping and complete the three columns:
    • Param Name — exactly as it appears in the link, e.g. crm_id
    • Target Field — the question that receives the value
    • ModePrefill or Hidden
  5. Add one row per parameter, then save and republish the form.

Parameter names are matched exactly, including case. crm_id and CRM_ID are two different parameters.

Map a parameter on a single question

When only one question needs a value, configure it on the question itself rather than in form settings:

  1. Select the question in the builder.
  2. In the properties panel, switch on URL Parameters.
  3. Enter the Parameter Name.
  4. Choose a BehaviorHidden Field or Prefill Field.

Question-level mappings are easier to keep track of when a form has only one or two of them. Form-level mappings are easier to audit when you have five or more, because they sit in a single list.

Contact information blocks: one parameter per field

A contact information block holds several fields at once — name, email, phone, company — and each one can take its own parameter. This lets a single link fill an entire contact step:

https://share.recram.com/68a1f0c9e4b7?first_name=Ada&email=ada@example.com&company=Acme

Configure each field’s parameter separately inside the block’s settings. Mixing modes is allowed: prefill the email so it can be corrected, hide the internal account code in the same block.

The form_ prefix

Every mapped parameter is also matched with a form_ prefix, so both of these reach a mapping named email:

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

Reach for the prefixed version when the page hosting your link already uses a generic name like email, id or name for its own purposes, and you need one that cannot collide.

Personalise question text with @ piping

Any value you pass in can be dropped straight into a question’s title or description. Write @ followed by the parameter name:

Thanks for trying us out, @first_name — how did the setup go?

Opened with #first_name=Ada on the link, the respondent reads “Thanks for trying us out, Ada — how did the setup go?”

Three rules make this reliable:

  • Feed it with a hash parameter or a Prefill mapping. Hash-style values (#first_name=Ada) and Prefill mappings both become available to piping. Hidden mappings do not — the value is stored, but it will not appear in text.
  • Write sentences that survive a missing value. If the parameter is absent, @first_name is replaced with nothing rather than left on screen. “Thanks for trying us out, @first_name — how did the setup go?” degrades gracefully. “Hi @first_name!” turns into “Hi !”.
  • Use plain names. Only letters, digits and underscores are recognised after the @.

Piping also works with answers the respondent has already given earlier in the form, which is useful for echoing a choice back before asking a follow-up.

Build the link

Scenario Parameters Suggested mode
CRM outreach to a known contact ?first_name=Ada&email=ada@example.com&crm_id=48213 Prefill name and email, hide the ID
In-app prompt from a customer portal ?account_id=1187&plan=pro Hidden
Post-event follow-up ?event=summit_2026&session=keynote Hidden
Support ticket follow-up ?ticket=INC-4471&agent=marco Hidden
Personalised greeting #first_name=Ada Hash, for piping

Once any mapping is configured, the builder’s Publish → Share screen shows a second version of your form link labelled With Parameters, pre-populated with placeholder values. Copy it as the template and swap in real values when you generate links in bulk.

Where the value ends up

A mapped value is stored as a normal answer to the question you mapped it to. On the response it appears in that question’s place, and in webhook payloads it arrives inside the fields array like any other answer.

This is the practical difference from automatic UTM capture: parameters that are merely captured arrive in a separate hidden object, while parameters you have mapped become answers. If a value needs to sit in the same column as your questions — in an export, a CRM property, a spreadsheet — map it. If it only needs to be attached for reporting, let automatic capture handle it and skip the setup.

Keep personal data out of the link

Everything in a URL is visible to the respondent and to anyone they forward the link to. It is also stored in browser history, and it may be logged by any proxy or messaging app in between. Treat a form link as public.

  • Prefer opaque record identifiers over names, email addresses and phone numbers where you can.
  • Never put a password, API key, session token or payment detail in a link.
  • Assume any link you send to one person could be shared with another. If a hidden value would be damaging in the wrong hands, don’t pass it through the URL.
  • Generate personalised links per recipient at send time rather than publishing one link with someone’s details already baked in.

Test before you launch

  1. Open your parameterised link in a private or incognito window.
  2. Check every mapped question: Prefill fields should show the value, Hidden fields should look untouched.
  3. If you used @ piping, confirm the text reads correctly — and open the link once without the parameter to see how it degrades.
  4. Submit a test response and open it: mapped values should appear as answers.
  5. Repeat on a phone.

Troubleshooting

What you see Most likely cause Fix
No value appears anywhere Mapping is off, or the form was not republished after the change Re-check Enable Parameter Mapping and republish
Value appears for one question but not another Two mappings, one of them misspelled Compare the parameter names character by character — matching is case-sensitive
The field is filled but the respondent cannot edit it Mode is set to Hidden Switch that mapping to Prefill
@name shows nothing in the question text The value came from a Hidden mapping, which does not feed piping Pass it as a hash parameter (#name=…) or switch the mapping to Prefill
Works from your own link, fails from an email The email client truncated or rewrote the URL Shorten the link, or reduce the number of parameters
Works on desktop, fails in a chat app The app stripped the query string Use hash-style parameters instead

Related guides