Concepts
Conditional follow-ups
Show a question only when a previous answer matches a condition, with full nesting.
Any question can declare:
followUps— a nested array of questions that only appear once the parent has been answered.visibleWhen— a rule that gates the question on the answer to another question (typically its parent).
Combined, these let you build branching surveys that stay flat in storage but feel adaptive to the respondent.
Visibility rules
A visibleWhen rule has the shape:
{
operator: "eq" | "neq" | "lt" | "lte" | "gt" | "gte" | "contains" | "notContains",
value: string | number | boolean | string[]
}The rule is evaluated against the answer of the parent question (the question
this one is nested under via followUps).
| Operator | Use case |
|---|---|
eq, neq | Match an exact value (string, number, boolean) |
lt, lte | Numeric / scale answers below a threshold |
gt, gte | Numeric / scale answers above a threshold |
contains | Multi-select includes a value |
notContains | Multi-select excludes a value |
Example: NPS detractor follow-up
If the respondent gives a low NPS score, ask why.
{
"id": "nps",
"type": "scale",
"label": "How likely are you to recommend us?",
"scale": { "min": 0, "max": 10 },
"followUps": [
{
"id": "nps-reason",
"type": "text",
"label": "What was the main reason for that score?",
"visibleWhen": { "operator": "lte", "value": 6 }
}
]
}Flow
Follow-ups can themselves have follow-ups, with no depth limit imposed by the schema. The admin editor renders the full tree so you can preview branching behaviour before publishing.