Search documentation

Search docs pages by title or description

Join the waitlist
Browse documentation

Questionnaires

A questionnaire is a form your app usersdesign: the question list lives in a JSON field on a "templates" table, the answers live in a JSON field on a "submissions" table, and every submission keeps a frozen copy of the template it was answered against. Nothing is copied row by row, and editing a template later never changes existing submissions.

Setting it up (builder)

  1. 1

    Two tables, three fields

    A Templates table with a name and a JSONfield (say "Questions"), and a Submissions table with a reference to Templates ("Template") plus a JSON field ("Answers").
  2. 2

    Display as

    Open each JSON field's settings. Set "Questions" to Questionnaire template; set "Answers" to Questionnaire answers and pick the Template reference and the Questions field. Publish checks the pair resolves.
  3. 3

    Put them on screens

    Make "Questions" editable in the Templates record page (that is the authoring screen) and "Answers" editable in the Submissions record page or a form. That's it — the controls replace the raw JSON box.

Authoring questions (app users)

  • Question types: short and long text, number, yes/no, date, date & time, single and multiple choice, photo, file, signature, and record (pick a row from any table).
  • Sections, pages and text organise long lists; pages become steps with Back / Next when filling out.
  • Show only ifrules hide a question or a whole section until an earlier answer matches ("Damage? = Yes") or the viewer has a given role. A rule that points at a deleted question is ignored — nothing hides by accident.
  • Validation: required, min/max, max length, and email / web address / phone / digits formats.
  • Import pastes a spreadsheet (one question per line: question, type, options separated by |, required); Preview shows the filled-out form; Duplicate template copies it into a new row.

Filling out

Answers autosave as a draft while typing (safe to close the phone mid-way). Submitvalidates every visible question; afterwards the record shows a read-only answer list with "Edit answers". The first save freezes the template into the submission, and the server takes that snapshot from the real template row — never from the client.

Using answers elsewhere

JSON columns are not usable in formulas directly; read a value out with JSONGET([Answers], "answers.<question id>") — in a formula field, a filter, a style rule or a workflow condition. JSONGET([Answers], "status") is draft or submitted. Question ids are visible in the template editor's detail panel.

SettingWhat it does
Questions per templateOptions per choice question ≤ 100; a template or an answers value ≤ 200 KB.
Hidden answersFlipping a controlling answer back restores what was typed; hidden questions are never required.
Changing the template referenceA submission keeps its snapshot; clear the answers to start over against another template.

Phone first

Filling out is designed for phones: sticky Back / Next / Submit, a progress bar and a "Next unanswered" jump. Author on a desktop, where the question grid and the detail panel sit side by side.