The inquiry form is the front door to your CRM. Every family that hits "Inquire" on your public profile goes through it. What you put on the form shapes the quality of the conversations that follow — the right questions qualify the family before you spend time on a reply; the wrong questions abandon them at the form.
This article covers the 5 custom-question types, the operational mechanics (reorder, duplicate, translate), the 4-question cap and why it exists, and what the inquiry form deliberately doesn't do.
What the form is for
The inquiry form is a first-touch sales conversation. Its job is to capture enough about the family to (a) reply with something useful, and (b) qualify them before booking your team's time.
It is not an application form. If you find yourself wanting 12 questions, file uploads, conditional branching, and a multi-step wizard, you want the Admissions module instead — see The admission form builder.
Treat the two surfaces differently:
- Inquiry form — 6-8 fields total, 1 minute to complete, goal: capture lead + qualify
- Admissions application — 20+ fields, structured intake, goal: collect everything for a decision
The default fields (configurable, no custom question needed)
Before you add a single custom question, the form already has:
- Name — required, always on
- Email — required, always on, validated
- Message — required, free-text
- Phone — optional or required (configurable, default optional)
- Student name + age — optional or required (configurable)
- Intake timeline — optional or required (configurable)
The phone / child / timeline toggles live in Settings → Inquiry form → Default fields. Most schools enable all three as optional; boarding schools often make student age required because age drives which boarding house can accept the student.
You can ship a perfectly working inquiry form with zero custom questions — the defaults cover ~80% of schools. Custom questions are for the school-specific qualifier you want on top.
The 4-question cap and why it exists
You can add a maximum of 4 active custom questions to your inquiry form. This is a hard limit enforced at the database level, not just a recommendation.
The reason: forms with more than 8 fields total (defaults + custom) see >50% abandonment in our data, and the marginal value of each extra question diminishes fast. Schools that have tried to extract 15-question intake from the inquiry form universally report the same outcome: fewer inquiries, no better qualification.
If you need more than 4 custom questions, the right surface is the Admissions module. The split is deliberate — light form for the front of the funnel, structured form for the application step.
The 5 question types
The inquiry form supports five question types. Each has a typed configuration form that opens after you pick the type.
Text
Free-text answer. Configure:
- Response length — short (single line, capped at ~120 chars) or long (multi-line, capped at ~500 chars)
- Placeholder — example text shown in the empty input
- Max length — hard cap if you want stricter than the default
Use for: "Anything specific about your child we should know?", "How did you hear about us?", "What's the most important thing in a school for your family?"
Options
Single or multi-select from a list you define. Configure:
- Selection type — single (radio buttons) or multiple (checkboxes)
- Options list — add options one at a time; Enter to add a row
Use for: "Current year level" (single from Y1-Y13), "Programs interested in" (multi from IB / Swiss Matura / A-Levels), "Boarding or day" (single from Boarding / Day / Open to both).
The most-used question type by far. Single-select with 5-8 options is the sweet spot — long lists feel like work.
Number
Numeric input. Configure:
- Min / max — bounds
- Step — increment (1 for whole numbers, 0.5 for half-points)
- Unit — label shown next to the input (CHF, years, hours)
Use for: "Annual budget range" (with CHF unit, min 30000), "Number of siblings also applying" (min 0, max 5), "Years they've studied French".
Date
Date picker. Configure:
- Min / max date — bounds
- Disable past — true if you only want future dates (e.g. start date)
- Disable future — true if you only want past dates (e.g. last school attended end date)
Use for: "Desired start date" (disable past), "Date you'd like a tour" (disable past, narrow window), "Date child stopped attending their previous school" (disable future).
Conditions
A special type for displaying terms / conditions / disclaimers with optional signature capture. Configure:
- Content type — text (paragraph displayed inline) or link (link to a URL)
- Conditions text / URL — the body
- Collect signature — if true, requires the family to type their name to confirm
Use for: GDPR consent, photography release, late-application acknowledgement, scholarship-eligibility confirmation. The collect-signature toggle creates a soft audit trail (typed name + timestamp on the inquiry).
Not for: long legal text. If your terms are 4+ paragraphs, link to a separate page rather than embedding inline.
Adding a question — walkthrough
Settings → Inquiry form → Add question.
Stage 1 — type picker:
- A grid of the 5 types with a short description of each. Pick one
- The modal advances to the typed configuration form
Stage 2 — typed config:
- Question text — what the family sees as the label
- Helper text (optional) — small grey text under the input explaining the question (use for non-obvious questions)
- Required toggle — whether the family must answer to submit
- Type-specific fields — options for
options, min/max fornumber, etc. - Save
The question lands at the bottom of your question list, active by default. It appears on your public form immediately.
Concrete example
Adding a "Current year level" question:
- Click Add question, pick Options
- Question text: "What year is your child currently in?"
- Selection type: Single
- Options list: type "Year 1" → Enter, "Year 2" → Enter, ... through Year 13
- Required: Yes
- Helper text: "We use this to route your inquiry to the right admissions team member"
- Save
The form now asks the family to pick a year before submitting.
Reordering questions
Drag the grip handle on the left of each question row to reorder. The new order is saved immediately — no separate save button.
Best practice ordering:
- Short / quick questions first (single-select dropdowns, year level)
- Free-text / longer questions in the middle
- Conditions / consents last
Front-loading short questions reduces abandonment — the family feels momentum building, gets to the longer question already committed to finishing.
Editing vs. duplicating
Each question row has Edit and Duplicate actions:
- Edit preserves the question's UUID. Past inquiry answers stay linked to the (edited) question. Use when you're just adjusting wording or fixing a typo.
- Duplicate creates a new question with a new UUID. Use when you want a fresh variant for A/B comparison, or when the change is large enough that historical answers don't really apply to the new question.
The trade-off: edit keeps your history clean (one question per concept across time). Duplicate keeps the wording history clean (you can see exactly what was asked when). Most schools use Edit 99% of the time.
Deleting
Delete soft-deletes the question. Past inquiries' answers remain in the database — you can still see them in the inquiry detail view. The question just stops appearing on the form for new submissions.
Translating questions
If your school has auto-translate on (Settings → School profile → Languages), questions you create in your source language are auto-fanned out to French / German / Italian via DeepL on save.
For sensitive questions (consents, legal-adjacent), use manual translation: each question's translation tab lets you write per- locale text yourself. The status of each locale is tracked (draft / translated / approved) so you can see what's been reviewed.
A family viewing the form in French sees the question in French. The answer they submit is stored as-is — no translation on the answer side.
Smoke test after every change
Every time you change the inquiry form, run this:
- Open your public profile in an incognito tab
- Click Inquire
- Verify the form looks right — order, defaults, custom questions, translations if applicable
- Submit a test inquiry from your own email
- Confirm it landed in your dashboard with the custom answers visible
- Delete the test inquiry
This catches 80% of "the form is broken" support tickets. It takes 3 minutes; do it.
Where answers land
When a family submits the form, custom-question answers store on
inquiries.custom_answers as a JSONB blob keyed by question_id.
In the dashboard, the answers display in the inquiry detail view, labeled with the question text as it appeared at submission time. If you later edit the question wording, old answers still show the old wording — they're a snapshot of the conversation that happened, not a live view.
What the form CAN'T do (and why)
Things schools sometimes want that aren't shipped:
- Conditional branching ("only show question 3 if answer to question 2 was X") — not in the schema. The inquiry form is meant to be linear and short. If you need branching, use the Admissions module.
- File uploads — explicitly blocked at the DB level. File questions exist only on Admissions. If your inquiry form needs files, you've crossed the line into application territory.
- Live preview before save — not built. Use the incognito-tab smoke test instead (above).
- Required-only-if-other-field-is-filled — same answer as conditional branching. Not supported here; available on Admissions via the question editor.
- More than 4 custom questions — hard cap. See the cap section above for the why.
None of these are bugs. They're deliberate scope decisions to keep the inquiry form short and the abandonment rate low. If something here genuinely doesn't fit your workflow, email us and we'll discuss.
Common mistakes
- Building a 15-question form. Forms with 8+ fields abandon at >50%. Fewer better-chosen questions outperform many weak ones.
- Using the inquiry form for application-style intake. Wrong surface. Move to Admissions.
- Forgetting to translate options. Auto-translate handles
question text but not always option lists for the
optionstype. Click into the translation tabs and verify French / German / Italian options read correctly before going live. - Long helper text. Helper text is for one short clarifying sentence, not paragraphs. If you need a paragraph, the question itself is unclear — rewrite it.
- Required everything. Marking every field required reduces inquiries. Make the qualifier required (year level, budget), the rest optional.
When to escalate to us
Email admin@swissprivate-schools.ch if:
- A custom question isn't displaying correctly on the public form (after the smoke test) — we can check the rendering pipeline
- You need a question type that doesn't exist yet and you've evaluated Admissions as the alternative — let us know what you need; we track these requests
- You want to bulk-create questions across multiple schools you manage (Bespoke / multi-school operators) — we have an API for this
We respond within 2 business days.