Sections, repeatables and subforms
Three ways to group fields. They look similar in the builder and behave very differently in the data.
Section
A heading with fields under it. Purely visual: the fields inside a section are ordinary fields on the form, stored under their own keys. Use it to break a long form into parts a person can find their way around.
Home Inspection uses two: Exterior (roof, walls, gutters) and Interior (kitchen, bathrooms, flooring).
Repeatable section
A group the person can add rows of. Timecards has a Daily entries section with a date, cost code, start, finish and hours in each row; a week is five rows.
The rows live inside this record, as a list under the section’s key. In an
export the section is one column holding the rows; in a script,
rows('entries') returns them; in a calculated field,
ROWSUM({entries.hours}) adds them up.
Set a minimum and maximum number of rows in the section’s properties.

Subform
Rows that are real records on another form, each linked to this one as its parent. Home Inspection has a Defects found subform pointing at the Property Defects form: every defect entered during an inspection becomes its own Property Defects record.
That is the difference from a repeatable section, and it is the reason to choose one over the other:
| Repeatable section | Subform | |
|---|---|---|
| Where the rows live | inside this record | as records on another form |
| Own permissions | no — part of this record | yes — the child form’s grants |
| Own status and history | no | yes — each row is approved, edited and audited on its own |
| Can be opened separately | no | yes — a repair crew opens a defect without the inspection |
| Appear in the child form’s records table | — | yes |
Use a repeatable section when the rows only make sense as part of this record (hours in a week). Use a subform when a row has a life of its own afterwards (a defect somebody else fixes).

Setting one up
- Build the child form first (Property Defects), and publish it.
- On the parent, add a Subform field and choose the child form.
- Optionally set which of the child’s fields are shown in the row list, and a minimum and maximum number of entries.
Somebody filling in the parent can add subform entries even without a Collect grant on the child form. A subform entry is part of the record they are already permitted to create.