Repeating groups

A repeating group is a named container of fields that respondents can fill in multiple times. Use them when you need to collect a variable number of similar entries — for example, "Add another facility" or "Add another contact person".

Creating a group

  1. Open the form builder for your form.
  2. Drag Group from the field palette onto the canvas, or click it to append it at the bottom.
  3. Click the group label to rename it (e.g. Facility). This label appears as the section heading in the form and on the "Add another…" button shown to respondents.
  4. Toggle Repeatable on if respondents should be able to add multiple entries. Leave it off to group fields visually without allowing repetition.

Adding fields to a group

Add fields inside a group in any of these ways:

  • Click the + icon in the group header to open a field-type picker and select a type.
  • Drag a field type from the palette and drop it inside the group area.
  • Click the group header to focus the group, then click a type in the palette.

Rows inside groups

Groups support Row blocks, which place two or more fields side-by-side. Drag Row (2 col) from the palette into the group, or click + Add field in a row header that is already inside the group. Each row header inside a group also has:

  • An optional Row label input — shown above the row when non-empty, useful for labelling a set of related fields.
  • A Repeatable checkbox — lets respondents add multiple instances of just that row within the group.

How it looks to respondents

Each group is rendered as a clearly labelled section. When a group is repeatable, a button labelled "Add another [Group name]" appears below the last entry. Respondents can remove any entry except the first.

How responses are stored

Each instance of a repeating group is stored as a separate set of answers linked by a group-instance ID. When you export to CSV, each group instance becomes its own row, merged with the top-level answers for that response.

Defining groups in the JSON editor

In the JSON view of the builder, groups appear as items of type GROUP inside the top-level fields array. Their nested fields (including rows) are under a fields key on the group object:

{
  "title": "Facility Survey",
  "fields": [
    {
      "type": "GROUP",
      "label": "Facility",
      "repeatable": true,
      "order": 1,
      "fields": [
        { "type": "SHORT_TEXT", "label": "Facility name", "required": true, "order": 1 },
        {
          "type": "ROWS",
          "label": "",
          "order": 2,
          "rows": [
            { "type": "SHORT_TEXT", "label": "City", "order": 1 },
            { "type": "COORDINATES", "label": "Location", "order": 2 }
          ]
        }
      ]
    }
  ]
}