Hidden Fields: Silent Data Passing for IntakeBots
Hidden fields let you attach data to an IntakeBot submission without the respondent seeing or answering anything. The field exists in the schema, its value gets saved, and it can drive conditional logic, routing rules, and contact mapping. It just never shows up in the conversation.
This is useful when your system already knows something about the person (a CRM ID, a campaign source, an account tier) and you want that data to travel with the submission automatically.
Hidden fields require a Pro or Business plan.
How it works
Section titled “How it works”Any field in your IntakeBot can be marked as hidden. When you do, three things change:
- The field disappears from the respondent’s view
- A violet badge appears in the editor so you can tell it’s hidden
- The publish panel and embed code update to show hidden field parameters
The field still functions like any other field. It validates, maps to contacts, triggers conditional logic, and shows up in submission data. The only difference is that nobody fills it in manually.
Value sources
Section titled “Value sources”Hidden fields get their values from one of three places. If multiple sources provide a value for the same field, embed attributes take priority over URL parameters, which take priority over static defaults.
Embed attributes
Section titled “Embed attributes”Set values directly in your embed code using the data-fields attribute. This works with inline, popup, and widget embed modes.
<div data-iozen-bot="your-bot-id" data-fields='{"campaign":"spring2026","source":"landing-page"}'></div>If you’re embedding from a dynamic app (React, Next.js, etc.), you can build the data-fields object from your application state.
URL parameters
Section titled “URL parameters”Append ?f.key=value to any IntakeBot direct link. This works well for email campaigns, ad links, and anywhere you control the URL.
https://app.iozen.ai/b/your-bot-id?f.source=google&f.ref=abc123&f.campaign=summerMultiple parameters stack with &. Values are URL-decoded automatically.
Static defaults
Section titled “Static defaults”Set a default value in the field editor that applies to every submission. Good for values that don’t change between respondents, like a department name or a region code.
Static defaults act as fallbacks. If an embed attribute or URL parameter provides a value, the default is ignored.
Use cases
Section titled “Use cases”CRM record linking
Section titled “CRM record linking”Pass a record ID from your app into the IntakeBot so each submission links back to the right record. No manual lookup, no copy-paste errors.
<div data-iozen-bot="your-bot-id" data-fields='{"crm_record_id":"rec_8xK2mP"}'></div>UTM and attribution forwarding
Section titled “UTM and attribution forwarding”Carry UTM parameters from your landing page into the submission. Combined with attribution tracking, this gives you end-to-end visibility from ad click to submission.
https://app.iozen.ai/b/your-bot-id?f.utm_source=google&f.utm_medium=cpc&f.utm_campaign=brandA/B testing
Section titled “A/B testing”Set a variant identifier as a hidden field and branch your IntakeBot’s conditional logic based on it. Different variants see different questions, content blocks, or CTAs.
<!-- Variant A --><div data-iozen-bot="your-bot-id" data-fields='{"variant":"A"}'></div>
<!-- Variant B --><div data-iozen-bot="your-bot-id" data-fields='{"variant":"B"}'></div>Then add conditional logic: show field X when variant equals A, show field Y when variant equals B.
Referral tracking
Section titled “Referral tracking”Record where a respondent came from without asking them. Useful for partner programs, internal routing, or multi-channel intake.
https://app.iozen.ai/b/your-bot-id?f.referrer=partner-acme&f.channel=slackPre-population from your app
Section titled “Pre-population from your app”When you already know things about the user (their account tier, their region, their assigned rep), pass those as hidden fields. The submission arrives complete without the respondent having to re-enter information your system already has.
Setting up a hidden field
Section titled “Setting up a hidden field”- Open your IntakeBot in the editor
- Select the field you want to hide (or create a new one)
- Click the visibility toggle in the field settings panel
- The field switches to hidden and shows a violet badge
- Optionally set a static default value in the field settings
- Publish the IntakeBot and grab the updated embed code or direct link
The publish panel shows all hidden fields and their parameter names so you can build your embed code or URL correctly.
Conditional logic with hidden fields
Section titled “Conditional logic with hidden fields”Hidden fields work with conditional logic the same way visible fields do. You can:
- Show or hide other fields based on a hidden field’s value
- Show different content blocks depending on a variant or source
- Route submissions through different workflow stages based on hidden data
This is particularly useful for A/B testing and multi-channel intake where the same IntakeBot serves different audiences.
Plan enforcement
Section titled “Plan enforcement”Hidden fields are gated at both the client and server level:
- Client side: The visibility toggle, publish panel, and embed code generation require Pro or Business. Free plan users see the option but can’t activate it.
- Server side: Submissions from free plans have hidden field values stripped before saving. Upgrading to Pro or Business restores full hidden field functionality.
Next steps
Section titled “Next steps”- IntakeBots guide: Full overview of IntakeBot features
- Marketing attribution: Track conversions end-to-end
- Workflow routing: Route submissions based on field values
- API Documentation: Embed code implementation details