How to Connect Formidable Forms to Google Sheets
Send Formidable Forms entries to Google Sheets with a direct connection. No need for the $199/year Business plan, no Zapier, no per-entry fees.
TL;DR
Install SheetLink Forms, deploy a Google <a href="/docs/google-sheets-setup">Apps Script</a> webhook, connect it in SheetLink settings, map your Formidable Forms fields to Sheet columns, and test. Saves you the $199/yr Formidable Business plan required for the native Google Sheets integration.
Formidable Forms is one of the most powerful WordPress form builders - it goes far beyond simple contact forms into quiz logic, calculators, directories, application workflows, and front-end data display through Formidable Views. The core plugin is free, Plus is $99/year, and the Business plan is $199/year.
Formidable's native Google Sheets integration is Business-plan-only. That's a $100/year jump from Plus - a significant spend if Sheets is the only Business-tier feature you'd use. Zapier is the official alternative, but it charges per submission and routes data through a third-party cloud.
SheetLinkWP delivers Formidable entries directly to Google Sheets via Apps Script webhook. It works with Formidable Lite (free), Plus, and Business alike, and is especially useful for Formidable's power features: capturing repeater rows as multi-row Sheet writes, mirroring lookup field selections, preserving calculated field values, and feeding Formidable View data into secondary Sheets. This guide walks through the complete setup and the Formidable-specific patterns that matter.
Why Formidable Users Benefit From Google Sheets
Formidable Forms already stores entries in its own custom database tables (wp_frm_items and wp_frm_item_metas) and gives you a reasonable admin UI for browsing. For many sites that's enough. But Formidable's real power users - builders of applications, directories, and calculators - usually need something more: shareable data views, analytics dashboards, cross-tool integration, and long-term archiving independent of their WordPress install.
A Google Sheet covers all of those. Sort and filter thousands of entries in seconds, share with specific email addresses (view-only or edit), build Looker Studio dashboards on top of the data, and keep the Sheet as a permanent archive even if the WordPress site is retired.
For Formidable's structured features (repeater fields, lookup fields, calculations), SheetLinkWP handles the translation to spreadsheet format cleanly - one row per repeater row, calculated values pre-resolved, lookup labels written rather than raw IDs. No custom code, no ugly JSON blobs in cells.
How SheetLinkWP Extracts Formidable Data
SheetLinkWP uses Formidable's own entry API to read submissions - the same API Formidable's native integrations use. That means compound fields, repeaters, and calculated values are all read consistently:
- 1. Entry submitted and validated: Formidable runs its own validation (required fields, regex patterns, conditional field requirements) and saves the entry to
wp_frm_items/wp_frm_item_metas. - 2. frm_after_create_entry fires: SheetLinkWP listens on this hook, which runs after the entry is committed to the database and after payment processing (for forms with the Formidable Stripe/PayPal add-ons).
- 3. FrmEntry API reads entry data: SheetLinkWP uses
FrmEntry::getOne()to pull all field values, sub-field values, and metadata. Calculated fields, lookups, and repeater data are pre-resolved. - 4. Special field handling: Repeater fields expand into multiple rows (one per repetition) by default. Lookup fields write the selected label, not the raw entry ID. File uploads write the URL.
- 5. Enrichment data added: Entry timestamp, IP, user agent, user ID, form ID, form name, and page URL are added. UTM/click ID capture is optional.
- 6. Webhook POST with retry: Payload sent to Apps Script. Retry queue protects against transient Google outages.
What You Need
- A WordPress site with Formidable Forms installed (free or any paid tier)
- A Google account with access to Google Sheets
- SheetLink Forms plugin (free tier or any paid license)
Step-by-Step Setup
- 1
Create your Google Sheet
Open Google Sheets, create a new spreadsheet, and name it. Leave it blank for auto-generated headers.
- 2
Deploy the Apps Script webhook
In your Sheet, go to Extensions > Apps Script. Paste the SheetLinkWP receiver script, deploy as a Web app with "Anyone" access, and copy the URL.
- 3
Install SheetLink Forms
Download from sheetlinkwp.com or WordPress.org. Upload and activate.
- 4
Connect the webhook
In SheetLink > Settings, paste the URL and save.
- 5
Map Formidable fields
Go to SheetLink > Field Mapping, select "Formidable Forms", and choose your form. SheetLinkWP reads Formidable's field structure including repeater fields and calculated values. Map each field to a Sheet column.
- 6
Test the connection
Submit a test entry. Check your Google Sheet for the new row. Verify all mapped fields are correct.
Formidable Forms Field & Entry Meta Reference
Formidable assigns each field a numeric ID and a unique key (typically something like abc123). SheetLinkWP supports both, but mapping by key is recommended because keys persist across form imports and duplications while IDs change. Entry-level metadata - always available - can also be mapped directly:
| Field key / meta | Source | Notes |
|---|---|---|
abc123 (auto-generated key) | Any text, email, URL, number, date, phone field | Unique key assigned when the field is created. Visible in field settings > Options > Field Key. |
your_custom_key | Custom field key | You can override the auto-generated key with a human-readable one. Recommended for all production forms. |
name.first / name.last | Name field subfields | Formidable's name field splits into prefix, first, middle, last, suffix. Access subfields via key.first, key.last, etc. |
address.line1 | Address field subfields | Sub-keys: .line1, .line2, .city, .state, .zip, .country. |
lookup_field_key | Lookup field | Writes the selected entry's display value, not the raw entry ID. For multi-select lookups, values join with commas. |
repeater_key[] | Repeater field | By default, SheetLinkWP writes one Sheet row per repetition with parent fields duplicated. Toggle to "JSON blob" mode if you prefer a single row per submission. |
calculated_key | Calculated field | Writes the final computed value after Formidable evaluates the formula. Pair with the source fields so you can verify calculations in Sheet. |
file_key | File upload field | Writes the media URL. For multiple files, URLs join with newlines within the cell. |
id | Entry meta | Formidable entry ID. Permanent, unique - use as Sheet primary key. |
item_key | Entry meta | Formidable's entry key (UUID-like string). Useful for URL references to entries. |
form_id | Entry meta | Numeric form ID. |
form_key | Entry meta | Form's unique key string. |
created_at | Entry meta | Submission timestamp in site timezone (YYYY-MM-DD HH:MM:SS). |
updated_at | Entry meta | Last update timestamp. Changes if the entry is edited from the admin. |
user_id | Entry meta | WordPress user ID if the submitter was logged in. |
ip | Entry meta | Submitter IP. Empty if Formidable's IP logging is disabled. |
source_url | Entry meta | URL of the page containing the form. |
Real-World Use Cases
Directory submissions mirror to a Sheet-backed directory
You run a Formidable-powered business directory (listings submitted via frontend form, displayed via Formidable View). SheetLinkWP can mirror every new listing into a Google Sheet, giving you a live-updating master list you can share with partners or export to other directory platforms.
id, item_key, created_at. Keep the Formidable View for frontend display; the Sheet is your operations view. Calculator form with result archive
A mortgage calculator, shipping quote, or ROI calculator built in Formidable returns a computed result to the user. You also want to archive each calculation for conversion analysis. SheetLinkWP captures input fields AND the calculated result, giving you a clean dataset for optimization.
email (if collected) + created_at. Build a Sheet pivot to see which input ranges correlate with email submission. Job application with repeater-based work history
A Formidable job application uses a repeater for past employment (company, title, dates, duties). Each applicant submits one entry with 1-5 work history rows. SheetLinkWP's expand-mode writes one Sheet row per work history entry, with applicant info duplicated in each - perfect for HR tools that expect normalized data.
Scored quiz / assessment form
Formidable's conditional logic and calculated fields support quiz scoring. SheetLinkWP writes the final score plus per-question responses to a Sheet, enabling per-question performance analysis and automatic grading spreadsheets.
Advanced Tips
Always map by field key, not field ID
Formidable's numeric field IDs change if you import a form into another site or duplicate it. Field keys persist. Set readable keys (applicant_email, business_phone) in the field settings once and SheetLinkWP mappings survive every form migration.
Choose between repeater-per-row and repeater-per-cell
By default, SheetLinkWP writes one Sheet row per repeater repetition, with parent fields duplicated. This is usually what downstream tools want. But for quick scanning, you might prefer one row per submission with repeater data JSON-serialized into one cell. Toggle in SheetLink > Settings > Formidable > Repeater Mode.
Lookup fields write labels, not IDs
When a user selects an item via a Lookup field, Formidable internally stores the source entry ID. But in your Sheet, you almost always want the readable label (the business name, the product title, the category name). SheetLinkWP resolves lookup fields to their display values automatically - no post-processing needed.
Coexist with Formidable Views unchanged
Formidable Views display entries on the frontend - they don't need to be touched when you add SheetLinkWP. Your Views continue to render from the Formidable entry table while SheetLinkWP mirrors entries to Sheets in parallel. One source of truth, two access patterns.
Edit-synced rows for application workflows
Formidable supports editing entries from the admin (useful for job application review, lead qualification, etc.). Enable "Sync entry edits" in SheetLink > Settings to update the existing Sheet row whenever an entry is edited - instead of appending a new row. Row matching uses the Formidable entry ID.
Troubleshooting
Calculated fields show as zero or blank
Ensure the calculation runs before form submission (not on page load only). Formidable should include calculated values in the submitted data. Check the Delivery Log to see the raw payload.
Repeater field data is missing
Repeater fields submit multiple values. SheetLinkWP captures these as comma-separated values in a single cell. If you need each repetition in its own row, use <a href="/docs/conditional-routing">conditional routing</a> with a custom mapping.
Lookup field writes a number instead of the label
Lookup fields internally store the source entry ID. SheetLinkWP resolves this to the entry's display value by default. If you see raw IDs, enable "Resolve Lookup labels" in SheetLink > Settings. If the referenced entry has been deleted, SheetLinkWP falls back to writing the ID.
Edits to entries in the admin don't update the Sheet
By default, SheetLinkWP only writes new entries. Enable "Sync entry edits" in settings to update the existing Sheet row when an entry is edited. Row matching uses the Formidable entry ID, so make sure column A of your Sheet is <code>id</code>.
Field keys I set are showing as abc123 in the mapping UI
Formidable caches form field structure. After changing keys, either edit and re-save the form, or clear Formidable's transients (Formidable > Global Settings > Data > Clear cache). SheetLinkWP will re-read the new keys.
Formidable Forms to Google Sheets: Options
| Feature | Formidable Addon | Zapier | SheetLinkWP | |
|---|---|---|---|---|
| Price | $199/yr (Business) | $29.99+/mo | $39 one-time | |
| Works with Free/Plus | No | Yes | Yes | |
| Calculated fields | Yes | Yes | Yes | |
| UTM capture | No | Extra steps | Automatic | |
| Retry on failure | No info | Auto-retry | Built-in queue | |
| 3-year cost | $597 | $1,080+ | $39 |
Frequently Asked Questions
Does SheetLinkWP work with Formidable Forms Lite (free)?
Yes. SheetLinkWP works with the free version of Formidable Forms. No premium Formidable license required.
Can I capture Formidable's calculated field values?
Yes. SheetLinkWP receives the calculated value as submitted by Formidable Forms. The final computed result appears in your Sheet.
Does it work with Formidable Views?
SheetLinkWP captures form submissions, not View interactions. If a View includes a form, submissions from that form are captured.
What about Formidable's repeater fields?
Repeater field values are captured as comma-separated entries in a single cell. Each repetition's data is included.
Can SheetLinkWP write one Sheet row per repeater repetition?
Yes. In SheetLink > Settings > Formidable, switch Repeater Mode to "Expand to rows". Each repetition becomes its own Sheet row with parent fields duplicated. Ideal for HR systems and other tools that expect normalized data.
Does lookup field output write the label or the raw ID?
The label (display value) by default. SheetLinkWP resolves lookup references to their source entry's display value before writing. If the source entry has been deleted, it falls back to writing the raw ID.
Does it update Sheet rows when I edit a Formidable entry from the admin?
Optionally yes. Enable "Sync entry edits" in settings. Row matching uses the Formidable entry ID, so make sure that's mapped to a Sheet column.
Can I use this alongside Formidable Views?
Yes. Views read from Formidable's entry table and aren't affected by where SheetLinkWP writes data. You can keep your frontend Views unchanged while mirroring data to Sheets for reporting and archiving.
Related How-To Guides
Connect Formidable Forms to Google Sheets - Any License
Skip the $199/yr Business plan. Direct connection, one-time $39 payment.