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.

Last updated: 2026-07-246 min read

TL;DR

Install SheetLink Forms, click Connect Google, pick or create a Sheet in the Google file picker, map your Formidable Forms fields to Sheet columns, and test. The classic Apps Script webhook remains available for self-hosted setups. 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 - connect with one click, or use the classic Apps Script webhook for a self-hosted setup. 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. 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. 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. 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. 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. 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. 6. Delivery with retry: The row is delivered to Google Sheets - Sheets API on one-click connections, Apps Script on the classic method. The 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

Field mapping tip: Formidable Forms uses field IDs and keys. SheetLinkWP displays both the field label and key in the mapping interface. Calculated fields, lookup fields, and repeater fields are all captured as their final values.
  1. 1

    Install SheetLinkWP

    Download from sheetlinkwp.com or WordPress.org. Upload and activate.

  2. 2

    Connect Google Sheets (one click)

    In your WordPress admin, go to SheetLink > Google Sheets (OAuth) - or use the setup wizard's "Connect Google (one click)" card. Click Connect Google and approve the standard Google consent screen. SheetLink uses Google's drive.file permission, so it can only see and write to the spreadsheets you pick or create - never the rest of your Drive. The whole connection takes about a minute.

  3. 3

    Pick or create your destination spreadsheet

    After you connect, the Google file picker opens. Pick an existing spreadsheet or create a new one on the spot - name it something you'll recognize, like "Formidable Entries". On new sheets, SheetLink seeds the header row automatically, and when a column header matches a form field name, that field is matched to the column for you.

  4. 4

    Alternative: deploy the classic Apps Script webhook

    Prefer a fully self-hosted setup with no OAuth? The classic Apps Script webhook method still works and is fully supported. Create a Google Sheet, go to Extensions > Apps Script, paste the SheetLinkWP receiver script (from SheetLink > Settings > Setup Guide), deploy it as a Web app with "Anyone" access, then paste the deployment URL into the "Webhook URL" field in SheetLink > Settings. Data flows WordPress -> your own Apps Script -> your sheet, with no SheetLink-hosted service in the auth path. Skip this step if you used one-click connect.

  5. 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. 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 / metaSourceNotes
abc123 (auto-generated key)Any text, email, URL, number, date, phone fieldUnique key assigned when the field is created. Visible in field settings > Options > Field Key.
your_custom_keyCustom field keyYou can override the auto-generated key with a human-readable one. Recommended for all production forms.
name.first / name.lastName field subfieldsFormidable's name field splits into prefix, first, middle, last, suffix. Access subfields via key.first, key.last, etc.
address.line1Address field subfieldsSub-keys: .line1, .line2, .city, .state, .zip, .country.
lookup_field_keyLookup fieldWrites the selected entry's display value, not the raw entry ID. For multi-select lookups, values join with commas.
repeater_key[]Repeater fieldBy 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_keyCalculated fieldWrites the final computed value after Formidable evaluates the formula. Pair with the source fields so you can verify calculations in Sheet.
file_keyFile upload fieldWrites the media URL. For multiple files, URLs join with newlines within the cell.
idEntry metaFormidable entry ID. Permanent, unique - use as Sheet primary key.
item_keyEntry metaFormidable's entry key (UUID-like string). Useful for URL references to entries.
form_idEntry metaNumeric form ID.
form_keyEntry metaForm's unique key string.
created_atEntry metaSubmission timestamp in site timezone (YYYY-MM-DD HH:MM:SS).
updated_atEntry metaLast update timestamp. Changes if the entry is edited from the admin.
user_idEntry metaWordPress user ID if the submitter was logged in.
ipEntry metaSubmitter IP. Empty if Formidable's IP logging is disabled.
source_urlEntry metaURL 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.

Field mapping: Business name, category, location, description, website, phone + 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.

Field mapping: All input fields + calculated result field + 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.

Field mapping: Parent fields (applicant name, email, role_applied_for) + repeater subfields (company, title, start_date, end_date, duties). Enable "Expand repeaters to rows" in SheetLink > Settings > Formidable.

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.

Field mapping: All question fields individually + calculated score field + category scores if applicable. Add Sheet conditional formatting to highlight high/low scorers.

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 conditional routing 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 id.

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

FeatureFormidable AddonZapierSheetLinkWP
Price$199/yr (Business)$29.99+/moFree
Works with Free/PlusNoYesYes
Calculated fieldsYesYesYes
UTM captureNoExtra stepsAutomatic
Retry on failureNo infoAuto-retryBuilt-in queue
3-year cost$597$1,080+$0

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, free plugin.