How Do I Send Contact Form 7 Entries to Google Sheets?
You can send Contact Form 7 entries to Google Sheets automatically, and the setup takes under 15 minutes with no code required. The method we cover here uses a WordPress-native workflow plugin to connect the form submission event to a Google Sheets action, so every new entry appends a row in real time.
Most tutorials stop the moment the data lands in Sheets. This one does not. We cover setup, field mapping, the three failure modes that break the sync silently, and what you can automate downstream once the entries are flowing.
What You Need Before You Start
Before touching any settings, confirm you have all four of these in place. Missing any one of them is the most common reason the integration fails silently on the first test submission.
- Contact Form 7 installed and active, with at least one published form that has been tested and is receiving submissions correctly.
- A Google account with a Sheets file already created. The sheet should have a header row matching the fields you plan to capture.
- Krom Automation Pro installed, since Google Sheets is a Pro integration. The free version covers 16 triggers and 21 actions, but Google Sheets sync requires Pro.
- Google API credentials: a Client ID and Client Secret from Google Cloud Console, used to authorise the connection via OAuth 2.0.
The Google Sheets and Google Calendar integration documentation covers the credential setup step by step, including exactly which scopes to enable in Google Cloud Console. Follow that before proceeding here.
Step 1: Install and Connect the Plugin
Install Krom Automation from the WordPress.org plugin directory, then activate the Pro licence alongside it. Pro requires the free plugin active as a base layer. Once both are active, you will see a “Krom Automation” menu item in your WordPress admin sidebar.
Go to Krom Automation Settings Integrations and locate the Google Sheets tile. Click Connect, paste your Google Client ID and Client Secret, then click Authorise. Google will prompt you to select an account and grant access.
After approval, the tile shows a green “Connected” badge. If you see an error at this stage, double-check that your OAuth redirect URI in Google Cloud Console matches your site’s URL exactly, including the trailing slash.
An OAuth mismatch on the redirect URI is the single most common reason the Google connection fails. It looks like a permissions error but it is a URL typo.
Step 2: Create the Workflow
Go to Krom Automation Workflows Add New. You will land on the visual canvas, built on a drag-and-drop interface. The canvas starts with a trigger node waiting to be configured.
Click the trigger node and search for Contact Form 7: Form Submitted. Select it. A panel opens on the right where you choose which form triggers this workflow.
You can select a specific form by name, or set it to fire on any CF7 submission. For most setups, selecting the specific form is cleaner and avoids unintended rows from other forms.
The full list of available triggers, including this one, is documented in the Contact Form 7 integration reference.
Next, click the plus icon below the trigger node to add an action. Search for Google Sheets: Append Row.
Select it. The action panel asks you to:
- Choose the Google account you connected in Step 1.
- Select the Spreadsheet from a dropdown populated from your Google Drive.
- Select the Sheet tab within that spreadsheet.
- Map each column to a value using merge tags.
Step 3: Map Your Form Fields to Sheet Columns
Field mapping is where most tutorials gloss over the detail that actually matters. Each column in your sheet corresponds to one mapped value in the action panel. You set the value using merge tags, which pull live data from the form submission.
Here is a worked example for a standard contact form with four fields:
| Google Sheet Column | CF7 Field Name | Merge Tag to Use |
|---|---|---|
| Name | your-name | {{cf7.your-name}} |
| your-email | {{cf7.your-email}} | |
| Subject | your-subject | {{cf7.your-subject}} |
| Message | your-message | {{cf7.your-message}} |
| Submitted At | (system) | {{workflow.triggered_at}} |
| Page URL | (system) | {{site.current_url}} |
The merge tag format follows the pattern {{cf7.field-name}}, where field-name is the name attribute of the input in your CF7 form editor, not the label the visitor sees. Check your CF7 form in the Form tab to confirm the exact field names. A full reference for merge tag syntax is in the merge tags documentation.
Adding a timestamp column is worth doing even if you do not plan to use it immediately. Sorting or filtering by submission date becomes useful the moment you have more than a few dozen rows.
Step 4: Test Before Going Live
Save the workflow in draft mode first. Use the built-in workflow simulator to do a dry run: it fires the trigger logic without actually appending a row to your sheet.
This catches mapping errors and missing fields without creating junk data. The simulator is documented in the testing and simulator guide.
Once the simulator passes, set the workflow to Active and submit a real test entry through your Contact Form 7 form. Check your Google Sheet within 10 to 30 seconds. You should see a new row with all mapped fields populated.
If the row does not appear, go to Krom Automation Execution Logs and check the run for that submission. The per-step audit trail shows exactly which step failed and why.
A workflow failing silently 20 percent of the time looks identical to a working one until you check the execution log. Build the habit of checking it after the first real submission, not just after the test.
Troubleshooting: Why Contact Form 7 Data Is Not Reaching Google Sheets
These are the three failure modes we see most often, in order of how frequently they occur. Work through them in this sequence rather than jumping to re-authentication, which is rarely the actual problem.
1. Wrong Field Name in the Merge Tag
The merge tag {{cf7.your-email}} only works if your CF7 form has an input with name="your-email". If you renamed the field or used a custom name, the tag returns blank and the sheet column is empty. Open your CF7 form editor, click each field, and confirm the Name attribute matches what you typed in the merge tag exactly, including hyphens and capitalisation.
2. OAuth Token Expired or Revoked
Google OAuth tokens expire. If submissions were syncing and then stopped after a few weeks, go to Krom Automation Settings Integrations Google Sheets and check whether the account still shows “Connected”.
If it shows “Disconnected” or “Error”, click Reconnect and go through the OAuth flow again. This takes under 2 minutes and restores the sync immediately.
3. Spam Submissions Filling the Sheet
Contact Form 7 with no spam protection passes every submission to the workflow trigger, including bot entries. If your sheet is filling with obvious spam, add a conditional branch to the workflow that checks whether the email field contains a real-looking value, or enable reCAPTCHA in your CF7 form settings. Filtering at the form level is cleaner than filtering in the workflow, but both work.
What to Do After the Data Lands in Sheets
This is the part almost no tutorial covers, and it is where the real value of the integration appears. Appending a row is not the end of the workflow; it can be one node in a longer chain.
Here are four things you can trigger from the same form submission event, running in parallel with the Sheets append:
- Send a Slack notification to your team channel with the submitter’s name, email and message. The Contact Form 7 to Slack guide covers this exact setup, and it can run as a second action node on the same workflow.
- Add the contact to your CRM or email list. If you use FluentCRM, the FluentCRM integration lets you create or update a contact from the same trigger. Mailchimp, ActiveCampaign, MailerLite and ConvertKit all have equivalent action nodes.
- Send a confirmation email to the submitter using the Send Email action or the visual email builder for a formatted message. This runs automatically without touching CF7’s own mail settings.
- Notify the admin of high-priority submissions by adding a condition node that checks for a keyword in the message field. If it matches, route to a separate Slack channel or send an SMS via Twilio. The messaging integrations reference covers Twilio setup.
Each of these runs from the same “CF7 Form Submitted” trigger. You do not need separate workflows for each destination. Add action nodes on the canvas, and the workflow handles all of them in sequence every time someone submits the form.
Sending data to Sheets is a storage decision. What you do with that data after is where the time savings actually accumulate.
Cost and Licensing: What Is Actually Free
Several plugins on WordPress.org advertise “free and unlimited” Google Sheets sync for Contact Form 7. The honest picture is more nuanced. Here is how the main approaches compare on dimensions that matter for a real decision:
| Approach | Cost (year 1) | Run limits | Data stays on your server | Post-submission automation |
|---|---|---|---|---|
| Dedicated CF7-to-Sheets plugin (free tier) | $0 | None stated, varies by plugin | Yes | No |
| Zapier (Professional plan) | ~$240/year | 750 tasks/month, overage charges apply | No, data passes through Zapier servers | Yes, via multi-step Zaps |
| Krom Automation Pro | Starts at $69/year | None | Yes, all data in your own database | Yes, unlimited actions per workflow |
The dedicated plugin approach works if Sheets is your only destination. The moment you want to also notify Slack, tag a contact in FluentCRM, or send a confirmation email, you need either a second plugin or an automation layer anyway. Starting with a workflow plugin means you only configure the Google connection once and add destinations as nodes.
Zapier prices shown are as of September 2026 and reflect the Professional plan at approximately $240 per year for 750 tasks per month with task-based billing. Overages apply above that threshold. There is no Zapier lifetime plan.
For a deeper look at what WordPress automation actually costs across different tools and configurations, the WordPress automation cost breakdown is worth reading before committing to any paid tier.
Other Tools Worth Knowing About
Pollify is wpRigel’s poll, survey and quiz plugin for WordPress. It is built as native Gutenberg blocks, so you create a poll exactly like you write a paragraph.
No shortcodes, no separate interface, no embedding step. If you are collecting structured opinion data alongside contact form data, Pollify handles the survey side and outputs results you can export directly.
Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K from anywhere in the dashboard and you can search posts, jump to settings, manage WooCommerce orders, and run admin actions without clicking through menus. Teams managing high-volume sites find it cuts navigation time considerably, particularly for order lookup and status changes.
Next Steps
If you are running the setup described above, the Contact Form 7 integration documentation is the right reference to keep open during configuration. It lists every available trigger and shows which merge tags each one exposes.
For the Google Sheets side, the Google Sheets integration docs cover OAuth credential setup, column mapping, and the append versus update row distinction. Once the basic sync is working, revisit the workflow canvas and consider which post-submission actions would save your team the most time per week.
Try Krom Automation free on WordPress.org to start building workflows. The Pro upgrade, which includes Google Sheets, starts at $69 a year. You can compare all plans and pricing before committing, and every Pro plan includes a 14-day money-back guarantee.
Frequently Asked Questions
Does Contact Form 7 automatically send submissions to Google Sheets?
Not by default. CF7 stores submissions in the database and sends email notifications, but has no built-in Google Sheets export. You need either a dedicated connector plugin or a workflow automation plugin to route submissions to a sheet automatically on every submission.
How do I map Contact Form 7 fields to Google Sheets columns?
In the Google Sheets action node, each column maps to a merge tag in the format {{cf7.field-name}}, where field-name is the Name attribute of the input in your CF7 form editor. The column order in your action node should match the column order in your sheet header row. Adding a timestamp column using {{workflow.triggered_at}} is recommended even if you do not use it immediately.
Why is my Contact Form 7 data not showing up in Google Sheets?
The three most common causes are: a merge tag referencing a field name that does not match the actual CF7 input name, an expired or revoked Google OAuth token, and a workflow that is saved but not set to Active. Check the execution log first, as it shows the exact step and error message rather than requiring you to guess.
Can I connect one Contact Form 7 form to multiple Google Sheets?
Yes. Add multiple Google Sheets: Append Row action nodes to the same workflow, each pointing to a different spreadsheet or tab.
All actions run from the single trigger. You can also add conditions between nodes so certain submissions route to one sheet and others route to a different one based on field values.
Is the Contact Form 7 to Google Sheets integration really free?
It depends on which tool you use. Some dedicated connector plugins offer a free tier with no run caps, but cover only the Sheets destination with no further automation.
Workflow plugins that also handle post-submission actions, like CRM tagging or Slack alerts, typically require a paid plan. The Google Sheets action in Krom Automation requires Pro, which starts at $69 per year with no per-submission fees and no run limits.