Build a Form
TL;DR — On a campaign's Workflow tab, click Build Form on a Form stage. Drag question types from the toolbox on the left, configure each question in the property grid on the right, then click Save to Database to publish your changes. Every edit auto-saves a local draft, but candidates only see what you've saved to the database.
Before you start
- Requires: Admin role.
- You'll need: a Form stage on a campaign workflow. See Design a Workflow if you haven't created one yet.
Open the form builder
- Open the campaign and switch to the Workflow tab.
- Find the Form stage card and click Build Form.
- The form builder opens full-screen on a new page.
If you previously left the builder with unsaved work, you'll see a "Loaded draft from local storage" toast — your local draft has been restored. Click Save to Database when you're ready to commit it, or keep editing.
Tour of the builder
The form builder has four areas:
| Area | What it's for |
|---|---|
| Top bar | Form type badge (when applicable), form ID, save status indicator (e.g. Draft saved), and the Save button on the right |
| Toolbox (left rail) | Drag-and-drop palette of question types — text, choices, file upload, etc. |
| Canvas (center) | Live preview of the form. Click a question to select it. Drag questions to reorder. |
| Property grid (right rail) | Properties of the selected question or page — title, description, validation, scoring, and dozens more |
Three tabs run along the top of the canvas:
- Designer — the default. Build the form here.
- Preview — try the form as a candidate would see it.
- Translation (when enabled) — provide localized strings for multi-language candidates.
Add and configure questions
- From the Toolbox on the left, drag a question type onto the canvas.
- Click the question to select it. The property grid on the right populates with its settings.
- Set the basics:
- Title — what the candidate reads. Keep it short and direct.
- Description — optional hint text shown under the title.
- Required — toggle on if the candidate must answer to advance.
The Name field is locked — it's auto-generated as q_<id> so candidate submissions stay traceable across edits. Don't try to rename it.
Question types reference
The toolbox includes the full SurveyJS catalog plus two custom types tailored for admissions. Most-used types:
| Type | Use for |
|---|---|
| Single-line input (text) | Short text answers — name, ID number, URL |
| Long text (comment) | Open-ended responses (motivation letter, essay). Supports a Max Words limit |
| Radio group / Checkboxes | Single-choice / multi-choice questions |
| Dropdown | Long single-select lists where a radio group would be too tall |
| Rating | 1–5 or 1–10 scales |
| File upload | Documents — transcripts, ID, PDF portfolio. Set accepted file types in the property grid |
| Boolean | Yes / No |
| Country (custom) | Country dropdown — populates from a network endpoint at runtime |
| Phone (custom) | International phone field with a country-code selector and as-you-type formatting |
Specialized types also in the toolbox: Matrix, Multiple text, Ranking, Image picker, Signature pad, Expression (computed value), and HTML (free-form layout). Open the toolbox to see them all.
Conditional logic and validation
For any selected question, the property grid exposes:
- Visible If — show or hide a question based on another answer (e.g. show "Other - specify" only when Other is picked).
- Required If — make a question conditionally required.
- Validators — built-in checks (email format, numeric range, regex, expression, text length).
- Default value and Calculated value — pre-fill answers or compute them from other fields.
These properties live under Logic and Validation sections in the property grid — scroll the right rail to find them. The Logic tab on the canvas (when enabled) provides a higher-level rule editor for complex conditions.
Save your work
There are two layers of saving — make sure you understand the difference:
| Layer | When it happens | Where it lives | Visible to candidates |
|---|---|---|---|
| Draft auto-save | Every change | Your browser's local storage | No |
| Save to Database | When you click the button | The CRM database | Yes, immediately |
The save status in the top bar tells you which layer fired most recently:
- Draft saved (info color) — local-only.
- Saved successfully (success color) — committed to the database.
- Save failed (red) — something went wrong; retry or check connectivity.
The save button label changes based on context:
- Create & Link Form — first save of a brand-new form bound to a stage.
- Save to Database — subsequent saves of an existing form.
- Save Form — when building a standalone form template.
Closing the tab without clicking Save to Database keeps your work in local storage but candidates won't see it. The next time you open the builder, the "Loaded draft from local storage" toast restores it — but only on the same browser and same device.
Quiz mode
If the stage's Form Type is Quiz (set on the stage, not in the builder), the builder shows a Quiz badge in the top bar and two extra question properties appear in the property grid:
- Score — the points this question is worth. Default
1. Set higher for weighted questions. - Manually Graded — flag for open-ended questions that need a human reviewer. Manually-graded questions don't contribute to the auto-graded score until reviewed.
For auto-graded question types (radio group, checkbox, dropdown, boolean), set the Correct Answer in the property grid. SurveyJS surfaces this option once the question is in a quiz form.
The quiz-wide settings — Time Limit, Passing Score, Show results immediately, Allow backtracking — are configured on the stage itself, not in the form builder. See Design a Workflow → Form stages.
Math equations (LaTeX)
The builder supports LaTeX in question titles and descriptions. Wrap inline math in single dollar signs and block equations in double dollar signs:
Inline: $E = mc^2$
Block: $$\int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}$$
Useful for STEM admissions assessments. Equations render in both the builder preview and on the candidate's screen.
Reusable form templates
If you need the same form across multiple campaigns, build it once as a template instead of copy-pasting:
- Form templates are managed from Settings → Templates (organization-level).
- When you add a Form stage, the Use Existing Form as Template picker copies a template's questions into the stage. The stage's form is then a copy — editing it doesn't change the template.
- Quiz templates carry their quiz settings (time limit, passing score, etc.) into the stage automatically.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Build Form button missing on the stage card | You're signed in as Campaign Manager or Member | Ask an Admin to build the form |
| Changes vanish after closing the tab | You only saved a Draft (local), never clicked Save to Database | Always click Save to Database before closing the tab |
| "Loaded draft from local storage" toast on revisit | Local draft from a previous session was restored | Continue editing, then click Save to Database. If you don't want the draft, refresh and clear browser storage |
| Save button says "Save failed" | Network or permission issue | Check connectivity. If the network is fine, the form size may exceed limits — split into multiple pages |
| Question Name field is read-only | Names are auto-generated to keep submissions traceable across edits | Don't rename — use Title for the candidate-facing label instead |
| Quiz badge missing | The stage's Form Type is set to Question Form, not Quiz | Open the stage settings and switch Form Type to Quiz |
| Score / Manually Graded properties missing on questions | Same as above — Form Type isn't set to Quiz | Switch the stage's Form Type to Quiz |
| Country dropdown shows no options | Browser can't reach the network endpoint that supplies the country list | Check that the browser allows network requests to SurveyJS's countries endpoint, or replace it with a static dropdown |
LaTeX equations show as raw $E = mc^2$ text | The question is in a field that doesn't render markdown/HTML | Move the equation to Title or Description, both of which render LaTeX |
