Form Integrations

Per-plugin setup guides for all 12 core form builders, plus 5 more form builders and 3 commerce/LMS event sources (LearnDash, MemberPress.

Available on:Free - 12 Core Forms+ 5 more forms and 3 event sources with the Pro tierSee all integrations →

Overview

SheetLinkWP hooks into native WordPress form submission events - no extra configuration needed on the form side. Install the plugin, create a sync rule, select your form plugin - and that's it. Field mapping is optional (since v1.9.2): leave it empty and every form field syncs automatically in form order. Works the same way across all 12 core form plugins (plus the 5 added with the Pro tier).

Since v1.14.0 you do not create the sheet columns yourself: the first submission writes the header row from that form's own fields, preferring each field's label where the form plugin exposes one. Each integration listens for the form plugin's built-in submission action, captures all field data, and sends it to your connected Google Sheet in real time. Column headers are generated automatically from the form field keys; internal WordPress fields (nonces, referer, embed post id) are filtered out. Open the Field Mapping section on the rule only if you want to pin specific fields to specific columns, skip fields, or reorder. Smart Mapping (bundled in the free core) also suggests cleaner column names when your form uses generic IDs.

The core 12 are covered below. JetFormBuilder, Bricks Builder, MetForm, Kali Forms, and HappyForms live under the Pro form builders section at the end.

E Elementor Pro Forms

WordPress Hook

elementor_pro/forms/new_record

How it works

SheetLinkWP listens to Elementor's elementor_pro/forms/new_record action, which fires every time a visitor submits an Elementor Pro form. The plugin captures all submitted field values and writes them to your mapped Google Sheet instantly.

Available fields

  • All form fields are captured by their field ID
  • Custom field IDs set in Elementor's form widget are used as column names
  • Fields you add yourself get a generated ID such as field_d9587fa unless you set one. Elementor is the only supported form plugin that does not expose a label SheetLink can fall back on, so open the field's Advanced → ID and give it a name like phone before your first submission - that ID becomes the column heading.
  • Supports text, email, number, textarea, select, radio, checkbox, date, time, and file upload fields

An error message on the front end does not mean the row was lost. Form plugins usually report success only once ALL of their actions have finished, and the notification email is one of those actions - so on a site that cannot send mail, the visitor sees a failure while the submission itself was fine. SheetLink writes the row from the submission event itself, independently of what any other action does. Check your sheet before resubmitting: the row is usually already there, and resubmitting creates a duplicate. This affects Elementor most visibly, but the same is true of any form plugin whose success message waits on its own email.

i

Use short, descriptive Field IDs in Elementor (e.g., 'name', 'email', 'phone') - these become your Google Sheet column headers.

!

Requires Elementor Pro (the free version doesn't include forms).

CF7 Contact Form 7

WordPress Hook

wpcf7_mail_sent

How it works

SheetLinkWP hooks into wpcf7_mail_sent, which fires after CF7 has successfully processed a submission and dispatched its notification email. All submitted mail-tag values are captured and synced to your Google Sheet.

Available fields

  • All mail-tags (form fields) are captured automatically
  • Field names like your-name, your-email, your-message are used as column names
  • Supports text, email, URL, tel, textarea, select, checkbox, radio, date, and file fields
i

CF7 field names include hyphens by default (e.g., your-name). These work fine as Sheet column headers.

!

File upload fields are captured as file names, not file contents.

GF Gravity Forms

WordPress Hook

gform_after_submission

How it works

SheetLinkWP hooks into gform_after_submission, which fires after Gravity Forms processes and stores a new entry. All field values from the entry are captured and synced to your Google Sheet in real time.

Available fields

  • All form fields are captured using their field labels
  • Multi-part fields (name, address) are captured as dotted sub-fields (name.first, name.last) plus a combined column; checkboxes arrive comma-separated
  • Checkboxes are captured as comma-separated values
  • Multi-select fields are fully supported
  • File uploads are captured as URLs
i

Gravity Forms field labels become column headers. Keep them clean and descriptive.

!

Supports all field types including checkboxes (comma-separated values), multi-select, and file uploads (as URLs).

WP WPForms

WordPress Hook

wpforms_process_complete

How it works

SheetLinkWP hooks into wpforms_process_complete, which fires after WPForms finishes processing a submission. All field data is captured by field label and synced to your Google Sheet immediately.

Available fields

  • All form fields captured by field label
  • Supports all standard WPForms field types
  • Both WPForms Lite (free) and WPForms Pro are fully supported
i

Both WPForms Lite (free) and WPForms Pro work with SheetLinkWP. No premium license required for the Sheet sync.

FF Fluent Forms

WordPress Hook

fluentform/submission_inserted

How it works

SheetLinkWP hooks into fluentform/submission_inserted, which fires after Fluent Forms stores a new submission in the database. All field values are captured and synced to your connected Google Sheet.

Available fields

  • All form fields captured by their Fluent payload key (e.g. email, subject, message)
  • Supports text, email, number, textarea, select, radio, checkbox, file upload, and more
  • Composite fields (Fluent's "Name" with First/Middle/Last subfields) are auto-flattened: names.first_name and names.last_name become individually addressable columns; the flat names key is suppressed in auto-sync mode (would duplicate the children)
  • Auto-sync default (since v1.9.2) emits all fields without configuration; explicit field maps can address either the flat key or the dotted child key
i

Fluent Forms uses lowercase snake_case payload keys (email, subject, message) - not the human-readable labels you see in the form builder. With auto-sync (empty Field Mapping section) this is invisible. If you set explicit field maps, use the snake_case keys; for nested fields use dot notation: names.first_name.

FM Formidable Forms

WordPress Hook

frm_after_create_entry

How it works

SheetLinkWP hooks into frm_after_create_entry, which fires after Formidable Forms creates a new entry. All field values - including data from repeater fields and calculated fields - are captured and synced to your Google Sheet. Formidable identifies fields by a generated key (for example kzn0j), so since v1.14.0 SheetLink also sends the field's label and uses that for the sheet column heading.

Available fields

  • All form fields captured by field key; the label is used for the sheet column heading
  • Repeater fields are fully supported
  • Calculated fields are captured with their computed values
  • Supports all standard and advanced Formidable field types
i

Formidable's field names are used as column headers. Check Settings > Fields to see exact names.

NF Ninja Forms

WordPress Hook

ninja_forms_after_submission

How it works

SheetLinkWP hooks into ninja_forms_after_submission, which fires after Ninja Forms processes a submission. All field values are captured by their internal field key and synced to your Google Sheet. Since v1.14.0 the field's label is sent alongside it, so auto-created sheet columns read "Name" rather than a generated key like name_1512....

Available fields

  • All form fields captured by field key; the label is used for the sheet column heading
  • Supports text, email, number, textarea, select, radio, checkbox, and more
  • Field keys (not labels) are used as column headers
i

Ninja Forms uses field keys (not labels) internally. Check the field settings to see the key used for each field.

Need a different form plugin?

We're always adding new integrations. Let us know which form builder you'd like us to support next.

Contact support@sheetlinkwp.com

FR Forminator

WordPress Hook

forminator_custom_form_submit_before_set_fields

How it works

Forminator fires a custom action after every form, quiz, and poll submission. SheetLinkWP hooks into it, extracts the submitted field payload, and writes to your mapped Google Sheet. Works with contact forms, quizzes (including knowledge and personality quiz types), and polls.

Available fields

  • Form submissions captured by field name (set in the Forminator field editor)
  • Quiz answers + result categories are captured as separate columns
  • Poll responses captured with the option label as the value
  • Stripe and PayPal payment fields are captured as amount + status
  • File upload fields captured as public URLs
i

Forminator field names default to generic keys like name-1 and email-1. Rename them in the field editor (e.g. email, first_name) before mapping, so your Google Sheet columns are readable.

EV Everest Forms

WordPress Hook

everest_forms_process_complete

How it works

Everest Forms stores every submission in its own database table; SheetLinkWP listens for the save-complete action, copies the captured field values, and sends them to your sheet.

Available fields

  • All standard fields supported (text, email, number, textarea, radio, checkbox, select, date)
  • Fields are captured under their Meta Key (set in each field's Advanced options); the field label also works in explicit field maps
  • Multi-part form submissions delivered as one row with all steps combined
  • Conditional-logic fields are captured only if the user saw them
  • File upload fields sent as attachment URLs
i

Set custom field IDs in the Everest Forms field editor - the plugin uses the ID on the left side of your SheetLink mapping.

BB Beaver Builder Forms

WordPress Hook

fl_module_contact_form_after_send

How it works

The native Contact Form module inside Beaver Builder (and the richer form builder inside Beaver Themer) emits a submission action that SheetLinkWP reads. All field values set in the Beaver module are captured verbatim.

Available fields

  • Contact Form module fields captured under fixed keys: name, subject, email, phone, message (the module's built-in field set)
  • Beaver Themer forms supported via the same hook (richer field types: file upload, checkboxes, date, etc.)
  • Multi-step forms deliver a single combined row after the final step
!

The Contact Form module is part of Beaver Builder's premium plugin. The free Beaver Builder Lite does not include it.

DV Divi Contact Form

WordPress Hook

et_pb_contact_form_submit

How it works

Divi's built-in Contact Form module emits a submission action when the form validates successfully; SheetLinkWP captures the payload and writes to your sheet. No second form plugin is required.

Available fields

  • Divi form fields identified by the Field ID set in the module
  • Custom-labelled fields use the Field ID as the column name
  • Field labels also work as mapping keys in explicit field maps (lowercased, hyphenated - e.g. "Email Address" -> email-address); the Field ID is the canonical column name
  • Divi Theme Builder forms supported by the same hook
  • Upload fields captured as URLs
i

Divi's default Field IDs are numeric (field_1, field_2). Replace them with readable IDs like name or email in the module settings for cleaner sheet columns.

WS WS Form

WordPress Hook

wsf_submit_post_complete

How it works

WS Form is a developer-focused builder with a rich hook API. SheetLinkWP uses wsf_submit_post_complete to capture every submission with validated field data.

Available fields

  • All field types supported (text, email, number, textarea, repeater, calculated)
  • Repeater field rows captured as JSON in a single cell (by design)
  • Calculated fields captured with their final computed value
  • Fields are captured under their field_N keys (visible in each field's sidebar); field labels, lowercased and hyphenated, also work in explicit field maps
  • Multi-column layouts and multi-step forms deliver one combined row per submission
i

WS Form's strict HTML output means every field has a stable name attribute. Use that exact name on the left side of your SheetLink mapping.

+5 Pro Form Builders

Pro tier

Requires the Pro tier (or Agency) and the separate SheetLink Pro plugin installed next to the free one. See License Activation for the key.

Five more form builders

The Pro tier adds five additional form builders on top of the 12 core integrations:

  • JetFormBuilder - Gutenberg-native form engine from Crocoblock (hook: jet-form-builder/form-handler/after-send)
  • Bricks Builder Forms - native form element inside the Bricks site builder (hook: bricks/form/custom_action)
  • MetForm - Elementor-native form widget from Wpmet (hook: metform_after_store_form_data)
  • Kali Forms - drag-and-drop builder with a generous free tier (hook: kaliforms_after_form_process)
  • HappyForms - accessibility-first form plugin (hook: happyforms_submission_success)

Three commerce and LMS event sources

Beyond form builders, the Pro tier also turns non-form events into rows in your sheet:

  • LearnDash - fires on course completion (hook: learndash_course_completed). Captured fields: user_id, user_email, user_login, course_id, course_title, completed_at.
  • MemberPress - fires on a completed transaction (hook: mepr-txn-store, status=complete). Captured fields: transaction_id, user_id, user_email, product_id, amount, gateway, subscription_id, status.
  • Easy Digital Downloads - fires on completed purchase (hook: edd_complete_purchase). Captured fields: payment_id, email, first_name, last_name, total, currency, status, gateway, date, items.

Alternate destinations

Airtable and Notion mirror destinations are included in the free core - route submissions to an Airtable base or Notion database alongside a Google Sheet. Using Airtable or Notion as the sole destination requires the AI Pack's Primary Destinations feature. Configure per-destination API keys inside the SheetLink -> Features -> Extra Integrations page.

i

Once SheetLink Pro is installed and your license is active, the 5 extra form builders and 3 event sources auto-appear in the Sync Rules source dropdown. No separate setup per plugin.

Debugging

Verifying the hook fires

If submissions aren't reaching your sheet, the first step is confirming the form plugin's action hook is firing at all. Each integration above shows the exact WordPress action SheetLinkWP listens on. Drop this snippet in your theme's functions.php or a code-snippets plugin to log a message every time your form plugin fires:

add_action('ninja_forms_after_submission', function($data) {
  error_log('[debug] ninja_forms_after_submission fired: form ' . $data['form_id']);
}, 5);

Replace ninja_forms_after_submission with the hook from the plugin card above, then submit a test form and check wp-content/debug.log. Priority 5 runs before SheetLinkWP's default priority 10, so you'll see the log line even if SheetLinkWP later throws.

If the log line does not appear: the form plugin itself is not firing the action - check the form plugin's own configuration, server error log, and plugin version. If the log line appears but no row lands in your sheet: the issue is downstream - check SheetLink -> Log in the admin for a Delivery Log entry and the Troubleshooting guide for common errors.

Ready to Get Started?

Install SheetLink Forms and connect your first form in under 10 minutes.