Repeater for Gravity Forms – Repeater Field Add-on

Repeater for Gravity Forms at a Glance

Repeater for Gravity Forms is a Gravity Forms add-on that adds repeatable field groups to Gravity Forms, right inside the form builder. Mark where a group starts and ends, set minimum and maximum counts, and let visitors add or remove sections on the fly – perfect for forms that need to capture an unknown number of items like additional tenants, team members, or line items.

  • Builder-native – configure repeaters where you already edit your forms, no custom code.
  • Multiple repeaters per form – use more than one repeatable section in a single form.
  • Customizable controls – keep the +/− icons or add labels like “Add Tenant” and “Remove Resource”.
  • Wide field support – works with text, email, phone, address, date, time, dropdowns, and more.
  • Production-tested – built and hardened on real client projects and compatible with modern Gravity Forms releases.

👋 Works with the latest Gravity Forms 3.1+ and WordPress 7.1+!


FeatureRepeater for Gravity Forms (getButterfly)Nested Forms (Gravity Wiz)Native Repeater (GF core, beta)Repeater Fields (add-ons.org)
Price€29/yearFrom $59/yr (Basic: 1 perk, 1 site) to $299/yr (Pro)Included with GFFree; Pro $39/yr to $299 lifetime
Set up in form editor, no codeYesYes, but needs a separate child formPartly: GF 3.0+ has an editor UI, switched on with a one-line filter. Before 3.0: PHP onlyYes
Repeats inline (no popup)YesNo: modal + summary tableYesYes
Multiple repeaters per formYesYes†YesYes†
Nested repeatersNoNoYesNot documented
Min / max countYes (plus start count)YesMax onlyYes
Custom add/remove labelsYes, text + HTMLPartly: button text only through a filterYesAdd button only (remove†)
Conditional logic in groupYes: per row, and fields outside can use repeater valuesYesNoYes (Pro)
Calculations / totalsYes: per-row calculations, sums outside the repeater, and products counted in Total and paymentsYes (:sum=, :count, :total)NoPayment fields (Pro)
File uploadsSingle-file onlyYesNoPro only†
Multi-page formsNo (also no AJAX, no Save & Continue)YesYes (a repeater can’t span pages)Likely†
RequiresWP 6.5+, PHP 7.4+, GF 2.7+ (tested with WP 7.1, GF 3.1.2)GF + Gravity PerksGF 2.4+; GF 3.0+ for the editor UIWP 3.9+, PHP 5.2+
Best forInline “add another” groups, including priced line itemsComplex parent/child data + reportingDevelopersBudget sites (3.4★ from only 5 ratings)
† Not confirmed in the vendor’s documentation. Prices and features checked September 2026.

If there is one feature missing from Gravity Forms, that is a field repeater section. A way to set a starting and ending point and adding fields inside a repeater. Turns out this functionality exists in Gravity Forms, but in a beta state.

👋 Hey! Did you see my Gravity Forms Date/Time Picker plugin?

Building a Better Repeater for Gravity Forms

I ship a lot of Gravity Forms projects for clients who expect flexible, repeatable field groups. For years that meant shipping my own repeater because Gravity Forms lacked one. When the official Repeater field finally arrived – in beta and still incomplete – I already had battle-tested code in production, and an inbox full of edge cases.

History

I needed a repeater for a client project, and I needed it to work with the latest release of Gravity Forms, 2.5. A great release with an overhauled UI. Still, the repeater functionality is not there. As I had one week to implement his functionality, I started my coding adventure. Based on several tutorials, some code snippets and an old WordPress plugin, I cobbled together a fully working* plugin. As seen in the screenshots below, I have styled the repeater fields differently, in order to make them stand out. For a long and complex form, it might get confusing pretty quickly.

* For my specific scenario.

.gform_wrapper.gravity-theme div.gf_repeater2_child_field,
.gform_wrapper.gravity-theme fieldset.gf_repeater2_child_field {
    margin: 0 64px;
    padding: 16px 64px;
    border-left: 3px solid #ff002b;
    background-color: rgba(0, 0, 0, 0.05);
}

Supported Repeater Fields

  • Address
  • Checkboxes
  • Date
  • Drop Down
  • Email
  • Hidden
  • HTML
  • MultiSelect
  • Name
  • Number
  • Paragraph Text
  • Phone
  • Radio
  • Section
  • Single Line Text
  • Time
  • Website

Repeater Features

  • Repeat groups of fields multiple times
  • Use multiple repeaters on the same form
  • Use shortcodes to display data to the user
  • Use JavaScript to manipulate the repeater
  • Customize the add and remove button’s HTML
  • Use Gravity Forms pre-populate hooks and filters like normal
  • Supports conditional logic

Versioned Fixes and Lessons Learned

Building a repeater field is more than cloning DOM nodes. The last few releases were driven by real support tickets and production logs, and every fix made the plugin more resilient.

JavaScript Stability

Early adopters hit JavaScript errors whenever a child field was missing metadata. I hardened the setup routine to validate every object before accessing it, bootstrapping sane defaults and logging parse errors instead of crashing the form. This refactoring removed the dreaded “Cannot read properties of undefined” error and made the repeater recover gracefully when editors drag unsupported fields into the group.

Tenancy Application Form: A Real-World Stress Test

I built a full tenancy application form to hammer the edge cases. The structure looks like this:

  • A primary applicant section outside the repeater
  • A repeater that captures 1–5 additional occupants
  • Nested fields for employment status, income, references, and uploads
  • Conditional logic to show or hide follow-up questions

Testing that flow uncovered everything from date picker reinitialization to multi-field validation. Because editors configure the repeater right in the form builder, they can change copy, tweak field requirements, and export the form like any other Gravity Forms project. No PHP edits required.

Implementation Notes for Your Projects

If you plan to ship repeaters today, here are the practices I follow:

  • Clamp the counts: Always set sensible min and max values in the repeater settings, so validation rules stay predictable.
  • Audit child fields: Avoid unsupported field types until you’ve tested them in staged environments. Repeater for Gravity Forms covers the common ones – address, date, time, uploads, conditional sections – but I still smoke-test anything exotic from third-party add-ons.
  • Disable AJAX intentionally: Repeater for Gravity Forms does this for you, but if you switch to the official field, remember it still needs non-AJAX submissions for now.
  • Keep notifications simple: Use the repeater merge tags that Gravity Forms provides. Repeater for Gravity Forms formats the payload for you, but I still log representative entries to confirm email templates match client expectations.
  • Version everything: Each fix in this plugin bumped the version in repeater2-for-gravity-forms.php. Keep changelogs so you can explain upgrades to maintainers and customers.

What’s New (Latest Updates)

  • Compatibility improvements for modern Gravity Forms 2.9.x workflows.
  • Hardened repeater child mapping and form editor save behavior.
  • Better frontend stability for dynamic cloned fields.
  • Improved entry and merge-tag output formatting.
  • Improved time value formatting in repeater outputs.
  • Improved file-upload display handling in repeated groups.
  • Add/Remove controls can now include optional label text:
  • Add Button Text
  • Remove Button Text
  • Add/Remove controls now render as real <button type="button"> elements.
  • Additional CSS hardening for Gravity Forms theme reset behavior.

Changelog

View Changelog
= 2.2.5 =
* Fixed: the repeater only showed its "Begin/End Repeater" placeholder when the form was loaded through admin-ajax.php (e.g. NitroPack's Gravity Forms integration).

= 2.2.4 =
* Added: per-row calculations inside a repeater; formulas outside the repeater receive the sum of all rows.
* Added: pricing fields inside a repeater count towards the Total field (and its validation), order summaries and payment add-ons, one line per row.
* Added: conditional logic outside the repeater can use fields inside it.
* Fixed: International (formatted) Phone fields now work in added rows and show the formatted number in entries.
* Fixed: Enhanced UI drop-downs now work in every row.
* Fixed: fields hidden by conditional logic in a row were still validated and saved.
* Fixed: conditional logic inside rows stopped working correctly after removing a row.
* Fixed: conditional logic inside rows compared checkbox and radio labels instead of their values.
* Fixed: fields with similar ids were mixed up in added rows (for example checkbox choice 1 and choice 10).
* Updated: uses `get_value_save_input()` on Gravity Forms 3.0+, as `get_value_save_entry()` is deprecated.
* Tested with WordPress 7.1 and Gravity Forms 3.1.2.
* Fixed: adding a row threw a JavaScript error on Gravity Forms 3.x when the repeater contains a Date field with a datepicker.
* Fixed: the datepicker calendar did not open in added rows on Gravity Forms 3.x.
* Fixed: input masks were applied twice in the first row and used the wrong digit rule in added rows.
* Fixed: single-file uploads are now validated and saved to the Gravity Forms upload folder (previously the file was discarded and a broken link was stored).
* Fixed: required File Upload fields inside a repeater always failed validation.
* Fixed: repeater values are now escaped on the entry detail screen.
* Fixed: layout spacers in the form editor caused a JavaScript error when saving the form.
* Fixed: fields with "Hidden" visibility inside a repeater became visible after a failed validation.

= 2.2.3 =
* Fixed: Time fields now save the hour, minute and AM/PM of each row separately instead of merging rows.
* Fixed: multi-file upload fields in added rows now get their own uploader, so the Browse button works.

= 2.2.2 =
* Raised the requirements to WordPress 6.5 and PHP 7.4.
* Fixed the plugin's Update URI.

= 2.2.1 =
* Security hardening: direct file access guards, escaped output, sanitized request data and WordPress Coding Standards clean-up across all PHP files.
* Refactored the form editor script.
* Updated the button styles.

= 2.2.0 =
* Added "Add Button Text" and "Remove Button Text" settings to the Repeater End field.
* Restyled the add and remove buttons.
* Added the bundled jQuery Mask plugin for input masks in repeated rows.
* Added automatic updates from getButterfly.com.
* The form editor now saves repeater settings through the `gform_pre_form_editor_save` filter instead of rewriting the Update button.
* Fixed repeater detection in the form editor when a form has more than one repeater.
* Removed the debug mode.
* Tested with WordPress 7.0.

= 2.1.6 =
* Covers the unreleased 2.1.2 to 2.1.5 builds.
* Repeater data is now stored as JSON (WordPress 6.8 compatibility); older serialized entries are still read.
* Added File Upload field support in repeated rows.
* Time fields are shown as HH:MM in entries and notifications.
* Improved datepicker and time field re-initialisation in added rows.
* Fixed JavaScript errors caused by missing or malformed repeater data.
* Raised the minimum Gravity Forms version to 2.7.

= 2.1.1 =
* Removed unused CSS and the SCSS source.

= 2.1.0 =
* WordPress Coding Standards clean-up (added phpcs.xml).
* Removed the legacy 1.0.5 entry upgrade routine and the debug mode.
* Raised the minimum Gravity Forms version to 2.5.
* Tested with WordPress 6.1.

= 2.0.6 =
* Fixed checkboxes and radio buttons in repeated rows being ticked regardless of their value when restored or pre-populated (thanks @Kaaly).

= 2.0.5 =
* Fixed a PHP warning when reading conditional logic data (thanks @webaware).

= 2.0.4 =
* Fixed the repeater initialising more than once when a form is rendered again (thanks @jeslenbucci).

= 2.0.3 =
* Added conditional logic to the Repeater and Repeater End fields (thanks @Kcharle).

= 2.0.2 =
* The plugin is now maintained by getButterfly; updated the plugin, author and GitHub URIs.

= 2.0.1 =
* Added the licence header and reformatted the main plugin file.

= 2.0.0 =
* First release of this fork of Kodie Grantham's Gravity Forms Repeater Add-On.

FAQ

Can I use multiple repeaters in one form?

Yes.

Can I nest repeaters?

No.

Can I customize + and – controls?

Yes. You can customize:

  • Add HTML
  • Remove HTML
  • Add Button Text
  • Remove Button Text

Is it useful for long forms?

Yes. It reduces clutter and keeps repeated data organized.

Is this suitable for client projects?

Yes. It is designed for practical deployment, not just demos.

Requirements

  • WordPress 7.1+
  • Gravity Forms 3.1+
  • PHP 8.0+

Tested against the current releases of Gravity Forms 3.1 and WordPress 7.1.

Installation

  1. Upload the plugin folder to /wp-content/plugins/.
  2. Activate the plugin in WordPress.
  3. In the Gravity Forms editor, add:
  • Repeater (start)
  • your child fields
  • Repeater End

Related

€29.00 /year

Version: 2.2.5
Version history

Billed once per year until cancelled

Support and extension updates for the duration of the subscription license.

Prices include VAT and are billed annually. If you let an annual license expire then you can keep using the plugin but won’t receive any more updates, new features or support. You can cancel at any time.