Dataopi
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).

OperatorUse case
eq, neqMatch an exact value (string, number, boolean)
lt, lteNumeric / scale answers below a threshold
gt, gteNumeric / scale answers above a threshold
containsMulti-select includes a value
notContainsMulti-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.

On this page