Every form has a Form Style. NueForm style shows one question at a time. Questionnaire style shows every question on a single page: respondents answer in any order, can change any answer until they're done, and send everything with one Submit button. Instead of logic jumps, a questionnaire shows or hides questions with visibility conditions, set in the Visibility & Actions dialog.
Switching a Form to Questionnaire Style
- Open the form in the builder and go to Settings.
- Under Form Style, choose Questionnaire.
A form that contains a Change Language step can't be switched: the builder shows Forms containing language switch nodes cannot use questionnaire mode. Remove that step first.
If the form has logic jumps, the Switch to Questionnaire Style dialog warns that they will be removed — questionnaires use visibility conditions instead — and that the switch can't be undone. If the form has email steps or data nodes, the dialog also lists them and explains how they will run: email steps send when the form is submitted, and data nodes run either when the answers they use change or on submit.
These steps don't block the switch and aren't moved: they stay where they are, and each data node gets a When to run setting (see Data Nodes). Check each one after switching.
What Respondents See
Before Submitting
- Nothing is final until the respondent clicks Submit — any answer can still be changed.
- Answers are saved automatically as the respondent works, as an unfinished (partial) response. A partial response isn't a submission: it doesn't fire webhooks, send notification emails or count toward your response quota.
- Submit is always shown at the bottom of the page. It checks the answers first: if a required question is empty or an answer is invalid, the Some answers need fixing dialog lists them and nothing is submitted.
After Submitting
Submit completes the response. That is when webhooks fire, notification emails go out, email steps send, data nodes set to run on submit run, and the response counts toward your quota. While it's being submitted, the page is locked. If a data node set to Keep up to date is still waiting or running, Submit first waits for it — for up to 10 seconds. If the node's new response changes the page, nothing is submitted yet. When a list no longer offers the option the respondent picked, the list clears it and shows Updated based on your earlier answer. When the response reveals a question, that question appears. Either way, the page scrolls to the question, and the respondent checks it and clicks Submit again. A question the new response hides doesn't stop the submission — its answer is left out, as for any hidden question.
The respondent then sees the form's end screen, with a Submit another response button that opens a fresh, empty form. It's the first end screen their answers reach — or, in a quiz mode, the one their score or outcome earns (see Form Modes). If their answers reach no end screen, they see Your responses have been submitted instead. End screens never appear on the page before Submit. The button is hidden when Limit to one response per visitor is on.
In the builder preview's design mode, the end screens the preview's answers reach are shown below Submit, so you can select one and edit it without submitting first.
A submitted response can't be edited — not from the confirmation, and not by opening the link again. If it was saved to the respondent's My Responses page (see Require Respondent Login), they can still review it there, read-only.
Coming Back Later
| Situation | What the respondent sees |
|---|---|
| Already submitted, Limit to one response per visitor off | A fresh, empty form. |
| Already submitted, Limit to one response per visitor on | The You've already submitted a response screen — the same one NueForm-style forms show. |
| Left without submitting, Allow Resume on | The Continue where you left off? prompt: Continue restores their answers, Start fresh discards them. With Auto-resume on, the answers come back without asking. |
| Left without submitting, Allow Resume off | A fresh, empty form. |
Resume works exactly as it does in NueForm-style forms — see Allow Resume and Custom Visitor ID.
How Steps Run
In a NueForm-style form, an email step or data node runs the moment the respondent reaches it. A questionnaire has no such moment — every question is on the page at once — so steps run at set points instead.
Email Steps
An email step sends once per response, when the respondent clicks Submit — and only if its visibility conditions are true for the submitted answers. It sends from our servers after the submission, so the respondent never waits for it, and Resend if revisited doesn't apply. In the builder, the step shows Sends on submit. It can use the answers, the responses of Keep up to date data nodes (sent along with the submission) and the responses of Once, on submit data nodes placed before it.
Data Nodes
Each data node gets a When to run setting, shown only in Questionnaire style:
| Option | What it does | Use it for |
|---|---|---|
| Keep up to date | Runs when the answers it uses change. | Lookups — for example, loading the breeds for the animal the respondent picked. |
| Once, on submit | Runs one time when the form is submitted. | Sending data — for example, creating a lead in your CRM. |
Keep up to date in detail:
- The node runs once every answer variable its URL, headers and body use (such as
{animal}) has a value, every earlier data node whose response it uses has returned one, and its own visibility conditions are true. Those conditions only decide whether the node runs: the questions they check don't have to be answered. Other selected with nothing typed in doesn't count as an answer yet. A node that uses no answers runs when the form opens. - When one of those answers changes, the node runs again. Choices trigger it as soon as they're selected; text and number answers — and text typed into a choice's Other box — once the respondent leaves the field or stops typing for 800 ms.
- If the node can no longer run — an answer it uses is cleared, or its visibility conditions stop being true — its response variable is cleared too, so nothing keeps using an answer the respondent took back.
- Only the newest request counts: a new request cancels the one still running, and late results are ignored.
- Successful results are reused within a page load: switching from Cat to Dog and back to Cat makes two requests, not three.
- Each page load allows up to 20 requests per data node; reused results don't count. After that, the node sends no more requests on that page load, and its response is empty for answers it hasn't already looked up.
- Requests go through NueForm's servers: the respondent's browser never receives the node's URL, headers, body or connection secrets — only the names of the variables the request uses.
Once, on submit runs on our servers, once per response, after the respondent clicks Submit. The form is finished by then, so no question or choice list can use the node's response — choose Keep up to date for a node whose response feeds one. The steps that run on submit can use it, though: email steps and Once, on submit data nodes placed after it, which run in form order. Each submission runs at most 10 email steps and 10 Once, on submit data nodes; any beyond that are skipped. Email steps also follow the per-visitor, per-form and per-IP sending limits every email step on a web form has — see Email Steps.
Those steps also get the latest responses of the Keep up to date data nodes, which the browser sends along with the submission. Like the answers, these values come from the respondent's browser, so don't rely on them for anything a respondent must not be able to change.
The default. When you add a data node to a questionnaire, or switch a form to Questionnaire style, When to run is set for you: Keep up to date if something later in the form uses the node's response variable while the form is being filled — a question (its title, description, choice list or conditions) or another data node that is itself set to Keep up to date — otherwise Once, on submit. Email steps and Once, on submit data nodes don't count, since they run on submit, when the node's response reaches them anyway; neither do questions that are disabled, hidden or turned off for web forms. A data node you've just added has no response variable yet, so it starts as Once, on submit: switch it to Keep up to date once a later question uses its response — the builder warns you if you don't (see below). A data node created through the API or MCP without this setting runs the way this rule resolves it, and the builder shows that option as selected.
Requests that change data. If you choose Keep up to date for a POST, PUT, PATCH or DELETE request, the builder shows a warning: This request may create or change data every time it runs. If it sends data rather than looking something up, choose "Once, on submit". It's only a hint — the choice is yours.
A response needed while filling. If a node is set to Once, on submit but a later question or list uses its response while the form is being filled, the builder warns: A later question or list uses this node's response while the form is being filled, but the node only runs on submit, so the response will be empty there. Choose "Keep up to date" instead.
Settings only NueForm style uses. A questionnaire runs its data nodes in the background or after the response is complete, so in Questionnaire style the builder hides a node's Silent Mode, Debug Mode, Use as Validation and Loading Text, with this note: "Silent Mode", "Debug Mode", "Use as Validation" and "Loading Text" apply only to NueForm style. In Questionnaire style, a failed request never blocks submission. The request's timeout still applies. The hidden settings keep their values, so switching the form back to NueForm style restores them. If an answer has to pass a check in your own system, check it when you process the response.
Builder Chips
Each step's card in the builder shows when it runs:
| Chip | Meaning |
|---|---|
| Runs when answered: followed by question names | Keep up to date — runs once those questions are answered, and again when the answers change. |
| Runs when the form opens | Keep up to date, for a node that uses no answers. |
| Runs on submit | Once, on submit. |
| Sends on submit | An email step. |
Phone Calls
Nothing changes on NueVoice phone calls. A call still asks one question at a time, and email steps and data nodes run when the call reaches them, in form order. When to run only applies to the web form.
Example: Breeds for the Chosen Animal
- Add a Multiple Choice question "Which animal?" with the choices Cat and Dog, and set its Answer variable name to
animal. - Add a data node that calls
https://api.example.com/breeds?animal={animal}, set its Response variable tobreeds, and set When to run to Keep up to date. Its card shows Runs when answered: with the animal question. - Add a Dropdown "Favorite breed", set Choice source to From a variable and enter
{breeds}— see Choices from a Variable. - Add an email step that thanks the respondent. It sends when they click Submit.
When a respondent picks Cat, the dropdown shows Loading options… and then the cat breeds. Switching to Dog loads the dog breeds; if the breed they had picked is no longer offered, it's cleared with the note Updated based on your earlier answer. Switching back to Cat reuses the first result.
Choice Answers in Variables
In the example above, {animal} holds the label of the option the respondent picked — Cat, not the option's ID — exactly as in NueForm style. On a translated form, the label is in the language the respondent is filling in the form in: for someone answering in French, {animal} is Chat, so the breeds request goes out with animal=Chat, and email steps and text that use {animal} get Chat too. To show a question or run a step for one option only, put the condition on the question itself — Which animal? is Cat: it compares the option, whatever the language. A condition that compares the variable with a label (animal equals Cat) stops matching for respondents who answer in another language. For a list loaded from a variable, the variable holds the item's label as loaded — it isn't translated.