How to Connect Fluent Forms to Google Sheets
Connect Fluent Forms to Google Sheets with a direct plugin - no need for Fluent Forms Pro, no Zapier tasks, no monthly fees. Works with the free version.
TL;DR
Install SheetLink Forms, deploy a Google <a href="/docs/google-sheets-setup">Apps Script</a> webhook, connect it in settings, map your Fluent Forms fields, and test. Works with Fluent Forms free. The native Google Sheets integration requires Fluent Forms Pro ($59+/yr) - SheetLinkWP does it for a one-time $39.
Fluent Forms is a lightweight, high-performance WordPress form builder that has grown into one of the leading alternatives to Gravity Forms and WPForms. It's made by WPManageNinja (the same team behind FluentCRM and FluentSMTP), and its architecture favors speed: minimal database writes, asynchronous action processing, and a clean JSON-based submission payload.
The native Google Sheets integration is a Pro feature ($59/year single-site, more for multi-site). Free-tier users have no built-in Sheets delivery path. Zapier works but charges per task; custom webhooks via the Fluent Forms webhook integration (Pro) work but require DIY column mapping on the Google side.
SheetLinkWP gives every Fluent Forms user - free or Pro - direct Google Sheets delivery with field-level mapping, UTM capture, retry queue, and a one-time $39 price. It integrates via Fluent Forms' native API hooks, so it coexists cleanly with FluentCRM contact creation, FluentSMTP email delivery, and any other Fluent-ecosystem tool you're running. This guide covers the complete setup plus the Fluent Forms-specific patterns (input_name field keys, conversational forms, GeoIP data, FluentCRM integration).
Why Fluent Forms Users Need Sheets Delivery
Fluent Forms stores submissions in its own table (wp_fluentform_submissions) and shows them in a Fluent admin UI - reasonably well-designed but still inside WordPress. For most sites, the real question is not whether submissions are stored but who else needs to see them.
Sales and marketing teams rarely want WordPress admin accounts just to view leads. Executives don't want to open the WP admin for a weekly summary. A Google Sheet solves the access problem - share view or edit permissions with any email address, build Looker Studio dashboards, connect to Zapier on the Sheet side if you need downstream automation.
Fluent Forms' speed-first design makes it especially common on high-volume lead gen sites (landing pages, newsletter popups, quick-inquiry forms). Those are exactly the sites where a live-updating Sheet pays off fastest - you can watch conversions in real time instead of reloading the WordPress admin.
How SheetLinkWP Hooks Into Fluent Forms
Fluent Forms fires native action hooks after submission processing completes. SheetLinkWP subscribes to these hooks - the same ones FluentCRM uses to create contacts and FluentSMTP uses to send email:
- 1. Form submitted, validated: Fluent Forms runs validation (required fields, regex patterns, reCAPTCHA/hCaptcha/Turnstile, honeypot). Invalid submissions never reach SheetLinkWP.
- 2. Submission saved to wp_fluentform_submissions: Entry is committed to the database. A unique submission ID is assigned.
- 3. fluentform/submission_inserted fires: SheetLinkWP listens on this hook. Field data is passed as a key-value associative array using Fluent's
input_namefield keys. - 4. Payment + GeoIP data resolved: For Pro forms with payment,
payment_statusandtransaction_idare available. If Fluent's GeoIP module is enabled,ip_countryandip_citycome along too. - 5. Mapping applied: Each Fluent input_name key maps to a Sheet column. Unmapped fields are dropped; mapped-but-empty fields write empty cells.
- 6. Webhook POST with retry: JSON payload posted to Apps Script. On failure, retry queue with exponential backoff. All within Fluent's fast, non-blocking action processing pipeline.
What You Need
- A WordPress site with Fluent Forms installed (free or Pro)
- 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.
- 2
Deploy the Apps Script webhook
In your Sheet, go to Extensions > Apps Script. Paste the SheetLinkWP receiver script, deploy as a Web app, and copy the URL.
- 3
Install SheetLink Forms
Download from sheetlinkwp.com or WordPress.org. Upload and activate.
- 4
Connect and map fields
Paste the webhook URL in SheetLink > Settings. Then go to Field Mapping, select "Fluent Forms", choose your form, and map fields to Sheet columns. Fluent Forms uses intuitive field names that SheetLinkWP auto-detects.
- 5
Test the setup
Submit a test entry through your Fluent Forms form and verify the row appears in Google Sheets.
Fluent Forms Input Name & Submission Meta Reference
Fluent Forms identifies fields by input_name - a key you can set explicitly in each field's advanced settings. Default input_names are sensible (email, first_name, etc.) but customization is recommended for production forms. Submission-level metadata is always available:
| input_name / meta | Source | Notes |
|---|---|---|
names.first_name | Name field | Fluent's name field splits into first, middle, last. Use names.first_name, names.middle_name, names.last_name. |
email | Email field | Default input_name for email fields. Validated by Fluent Forms before submission. |
phone | Phone field | Default input_name. Fluent's international phone field also provides phone.country_code if enabled. |
message | Textarea field | Default. Max length configurable per field. |
address.address_line_1 | Address field | Address subfields: .address_line_1, .address_line_2, .city, .state, .zip, .country. |
your_custom_key | Any standard field | Override the default input_name in each field's advanced settings. Sluggy lowercase_with_underscores recommended. |
select | Dropdown field | Writes selected option value. Multi-select joins with commas. |
checkbox | Checkbox group | Multi-checked values comma-joined. Enable per-option columns in SheetLink settings for boolean-style reporting. |
upload | File upload | Fluent Pro feature. Writes file URL. Multi-file uploads JSON-array-serialized. |
rating | Star rating field | Writes numeric rating value (1-5 or 1-10). |
payment_item | Payment field | Fluent Pro. Amount field for Stripe/PayPal integration. Pair with payment_status and transaction_id meta. |
submission_id | Submission meta | Unique Fluent Forms submission ID. Use as Sheet primary key. |
form_id | Submission meta | Numeric form ID - handy for multi-form Sheets filtering. |
created_at | Submission meta | Timestamp in site timezone. |
ip | Submission meta | Submitter IP. |
ip_country | Submission meta (GeoIP) | Fluent's GeoIP module must be enabled. Writes ISO country code. |
ip_city | Submission meta (GeoIP) | City detected from IP. Useful for geographic segmentation without asking the user. |
browser | Submission meta | Browser name parsed from user agent. |
device | Submission meta | Desktop / Mobile / Tablet classification. |
referer | Submission meta | HTTP referer - the page the visitor came from. |
payment_status | Submission meta | paid, pending, failed, refunded. For Fluent Pro payment forms. |
transaction_id | Submission meta | Payment gateway transaction reference (Stripe ch_..., PayPal transaction ID). |
Real-World Use Cases
High-volume landing page lead capture with GeoIP
A B2C lead gen landing page collects email + first name. Fluent Forms' lightweight rendering keeps page speed fast, and SheetLinkWP writes every submission to a shared Sheet with country/city from Fluent's GeoIP. Sales ops filter the Sheet by country for regional assignment - no user-side country picker required.
email, names.first_name, ip_country, ip_city, created_at, referer. UTM columns from SheetLinkWP's automatic capture. Total: ~10 columns. Conversational forms for long-form intake
Fluent Forms' conversational style presents one field at a time, chat-style. Completion rates on 20-field application forms jump dramatically. SheetLinkWP writes the complete conversation to a single Sheet row once finished - no partials unless you enable partial capture.
created_at, device, browser. Enable "Capture partials" only if you want to route abandoned conversations to a nurture tab. FluentCRM + Google Sheets dual-sink
Your marketing stack uses FluentCRM for email automation. Every lead goes into FluentCRM for nurture, and also needs to land in a Google Sheet so the sales team can work it without FluentCRM access. FluentCRM's action runs on the same hook as SheetLinkWP - no conflict, both fire for every submission.
submission_id as primary key. FluentCRM handles tags and email sequences; the Sheet is the sales-accessible view. Payment receipt mirror for Fluent Pro + Stripe
A Fluent Forms Pro donation or event form takes Stripe payments. Finance needs a running spreadsheet of transactions. SheetLinkWP runs after Fluent's Stripe processing, so payment_status and transaction_id are populated at write time.
payment_item, payment_status, transaction_id, created_at. Conditional routing: failed payments to a separate tab for follow-up. Advanced Tips
Set explicit input_names in every field
Fluent auto-generates input_names like input_text_1 if you don't set one. They're fragile. In each field's Advanced tab, set readable input_names (work_email, annual_revenue) so SheetLinkWP mappings survive form edits and duplications.
GeoIP capture adds real value, but it's opt-in
Fluent's GeoIP detection uses MaxMind's free database. Enable it in Fluent Forms > Settings > GeoIP. Once on, ip_country and ip_city become available as meta fields in SheetLinkWP mapping. For B2C forms this is huge - no user-side country picker, instant geographic segmentation.
FluentCRM coexists without conflict
If you run FluentCRM for email automation, don't disable its integration to make room for SheetLinkWP. Both subscribe to the same submission hook and fire independently. FluentCRM creates the contact and starts sequences; SheetLinkWP writes the Sheet row. Most Fluent ecosystem sites run both.
Conversational forms need no extra setup
When you enable Conversational mode on a Fluent form, it still fires the same submission action. SheetLinkWP works identically - no separate mapping, no separate hook. Completion rates go up; your Sheet rows still land the same way.
Fluent's webhook integration vs SheetLinkWP
Fluent Pro includes a generic Webhook integration. It works, but you have to build the Apps Script receiver, manage field-level JSON mapping, and handle retries yourself. SheetLinkWP does all of that plus field-mapping UI, retry queue, and delivery logging. For Sheets specifically, it's a massive time-save.
Troubleshooting
Submissions go to Fluent Forms entries but not to Google Sheets
Check SheetLink > Delivery Log for errors. Verify the webhook URL is correct and the Apps Script deployment is active.
Conversational form submissions aren't captured
Fluent Forms conversational forms submit through the same backend action as standard forms. SheetLinkWP should capture them. If not, check that the form is correctly selected in Field Mapping.
GeoIP fields are empty even though the module is enabled
Fluent's GeoIP module needs to populate the submission record before SheetLinkWP reads it. If you enabled GeoIP after some submissions landed, those historical rows won't backfill. Test with a new submission - country/city should appear in the new row.
Custom input_names show as input_text_N in the mapping UI
Fluent caches form schema for performance. After changing input_names, open and re-save the form in the Fluent editor. SheetLinkWP will pick up the new keys on next page load.
Stripe payment_status always shows pending
Stripe confirmation is asynchronous - Fluent fires <code>submission_inserted</code> immediately after submission, before Stripe returns final status. Enable "Wait for payment" in SheetLink > Settings > Fluent Forms to add a short delay (200-500ms) that lets Stripe resolve before the row is written.
Fluent Forms to Google Sheets: Comparison
| Feature | Fluent Forms Pro | Zapier | SheetLinkWP | |
|---|---|---|---|---|
| Price | $59+/yr (Pro) | $29.99+/mo | $39 one-time | |
| Works with Free tier | No | Yes | Yes | |
| Per-submission fee | No | Yes | No | |
| UTM capture | No | Extra steps | Automatic | |
| Retry on failure | No info | Auto-retry | Built-in queue | |
| Works with other plugins | No | Yes (per-Zap) | Yes (12 plugins) |
Frequently Asked Questions
Does SheetLinkWP work with the free version of Fluent Forms?
Yes. Both the free and Pro versions of Fluent Forms are supported.
Why would I use SheetLinkWP instead of Fluent Forms Pro's built-in integration?
SheetLinkWP adds UTM capture, click ID tracking, conditional routing, and a retry queue - features not included in Fluent Forms Pro's native integration. Plus, if you use multiple form plugins across sites, one SheetLinkWP license covers all 12 core form plugins (17 with the Integrations Bundle add-on).
Does it work with Fluent Forms conversational forms?
Yes. Conversational forms use the same submission pipeline, so SheetLinkWP captures them identically to standard forms.
Can I capture Fluent's GeoIP data in the Sheet?
Yes - if you've enabled the GeoIP module in Fluent Forms > Settings. Once on, ip_country and ip_city become available as submission meta fields you can map to columns. No user-side country picker needed.
Will this work alongside FluentCRM?
Yes. FluentCRM and SheetLinkWP both listen on Fluent's submission hook and fire independently. Most teams run both - FluentCRM for email automation, SheetLinkWP for sheet-based reporting and team access.
Does it capture payment fields from Fluent Pro?
Yes. Payment fields (amount, status, transaction ID) from Stripe, PayPal, or Razorpay integrations are available as submission meta and can be mapped to Sheet columns.
How does it compare to Fluent Pro's built-in webhook integration?
Fluent Pro's webhook posts raw JSON to a URL you provide. SheetLinkWP adds a Google Sheets receiver, field-mapping UI, retry queue, UTM capture, and delivery logging - everything you'd have to build yourself with the generic webhook.
Related How-To Guides
Connect Fluent Forms to Google Sheets - Free Version Supported
No Pro license needed. Direct connection with UTM capture, retry queue, and more.