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
- Open the form builder for your form.
- Drag Group from the field palette onto the canvas, or click it to append it at the bottom.
- 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.
- 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 }
]
}
]
}
]
}