Quick Start
Create Your First Repeater Group
Step 1: Add the Repeater Start field
- Open any form in the Gravity Forms editor
- Under Advanced Fields, click Repeater Group
- A Start marker and an End marker are automatically added
Step 2: Add fields between the markers
Drag any fields between the Start and End markers. These fields will be repeated when the user clicks “Add Row.”
Supported field types:
- Text, Paragraph, Number, Email, Phone, Website
- Drop Down, Radio Buttons, Checkboxes, Multi Select
- Name, Address, Date, Time, Consent
- Hidden, Section Break
- File Upload (Pro)
Step 3: Configure the group
Click the Start marker and open the settings sidebar:
- Group Name — a unique identifier (auto-generated, editable)
- Max Rows — maximum rows (default: 3, up to 50 in Pro)
- Min Rows — minimum required rows (Pro)
- Add/Remove Button Labels — customize button text (Pro)
Step 4: Preview and test
Click Preview in the form editor. You’ll see your fields with an Add Row button. Click it to add rows, fill in data, and submit.
What Happens on Submission
- Row 0 (the original row) is saved by Gravity Forms natively
- Extra rows are saved as entry meta and appear in:
- The entry detail view in the admin
- Email notifications (automatically appended)
- Merge tags using
{gfr_rows:groupname} - CSV exports (Pro)
- REST API responses (Pro)
Data Structure
Row data is stored as entry meta with labeled keys:
// Entry meta key: gfr_rows_passengers
[
1 => [ 'Name' => 'Jane', 'Email' => 'jane@example.com' ],
2 => [ 'Name' => 'Bob', 'Email' => 'bob@example.com' ],
]
Row 0 is stored natively by Gravity Forms in the entry’s field values.
POST Key Naming Convention
- Row 0:
input_N/input_N.M(standard GF format) - Row 1+:
gfr_rowX_N/gfr_rowX_N.M
Where X is the row index, N is the field ID, and M is the sub-input index for compound fields.
Retrieving Rows Programmatically
$form = GFAPI::get_form( $form_id );
$rows = gfr_get_all_rows( $entry_id, $form );
// Returns: [ 'passengers' => [ 0 => [...], 1 => [...], 2 => [...] ] ]