Store Contact Form 7 Data to Google Sheets – CF7 to Google Sheets

Whether you have a simple blog or a business website, the “contact us” page is compulsory. And, there are dozens of Contact Form plugins available, when it comes to WordPress.

“Contact Form 7” or “CF7” is one of the simplest and smartest Contact Form Plugins for WordPress.

The best part – all the features of the plugin are 100% free. And, the only negative part – it doesn’t store the Form’s data anywhere. You need to set up other arrangements for that.

In this post, I will be explaining how you can store the Contact Form 7 data in a Google Sheet using a plugin called CF7 Google Sheets Connector. And, with this hack, CF7 will not just be a Contact Form plugin, you can also use this setup to generate leads.

Here, we go with the CF7 to Google Sheets tutorial:

Installing the “Contact Form 7” Plugin

If you haven’t already, first, install the CF7 plugin.

Create the Form with all the required fields by clicking on the “Add New” button and copy the “Shortcode” of the form.

Now paste the “Shortcode” on the page/post/sidebar that you want the form to be present on.

Installing the “CF7 Google Sheets Connector” Plugin

Now, it’s time to install the 2nd plugin (CF7 Google Sheets Connector) which will send the Contact Form’s data to the Google Sheet.

After installing the plugin, you will have to get the authorization code from your Google account by clicking on the “Get Code” button on the plugin’s setting page.

Connect your form to the respective Google Sheets spreadsheet and done — as simple as that.

Here’s a short video explaining everything in detail:

Integrating Contact Form 7 with Google Sheets

To integrate you’ll need to install a plugin called ✅ CF7 Google Sheets Connector as shown in the above video. After installing and putting the license code, go to CF7 Google Sheets Connector settings and click on the Get Code which will take you to CF7 authorization with Google sheet page, and ask you to log in and authorize with your Google account where your form data will be saved.

Authorize CF7 with Google Sheet

After logging in with your Google ID, it will ask you for permissions to view and manage your spreadsheets in Google Drives, allow by clicking the allow button.

Since you have logged in and authorized the CF7 Google Sheets Connector plugin to view and manage your spreadsheets, here comes the last and main step.

Setting Up CF7 and Google Sheets

#1. Steps to do in the Google Spreadsheet

1. Open in your browser which will ask you to login with the Google account you just verified CF7 with, if not already logged in.

2. Create a new sheet and name it anything you want.

[If you have the free version of the plugin then proceed step #3, paid version does it automatically.]

3. In Google Sheets, provide the Columns name in Row 1. Name the first column as Date if you want to keep the record of the date. For further columns, name it as the form tags from the Contact Form 7. (For eg. “your-name”, “your-email”, “your-subject”, “your-message”, etc).

CF7 to Google Sheet Integration

In the free version, you have to do this step manually, but the paid version does it all automatically. Refer to the above video.

#2. Steps to do in the WordPress Admin Dashboard

  1. Go to Contact Form 7 and click on the form you have created earlier, and go to the Google Sheets tab.
  2. There should be two fields asking “Google Sheet Name” and “Google Sheet Tab Name”. Fill out both the details. In the field, Google Sheet Name, fill the name of the spreadsheet name you just created and in the Google Sheet Tab Name, write the name of the tab you just created in the Google Sheets.

[Again, step #2 is not required in the free version.]

You can understand better with the image below.

CF7 to Google Sheet Integration Tab Name

After this, you’re done.

You can now test the setup by filling and submitting the contact form you created. When you fill the form with the required details, the data will immediately appear in the Google Sheet of your Google account.

CF7 Google Sheets Connector Pro vs Free

If you need a small CF7 and Google Sheets setup then the free version is just enough. But, if you really want to take advantage of the flexibility of the plugin then you should definitely consider upgrading it to the premium version. For a license of 1 site, it just costs $29/year.

In the free version, you need to set up everything manually and the free version doesn’t send an image or attachment kind of data to the Google Sheets; whereas the Pro version sets up automatically and supports many field types including images and attachments.

Here’s what the CF7 Google Sheets Connector Pro version can do:

  • one click authentication
  • automated sheet and tab names
  • automated click and fetch all your Google Sheets
  • quick configuration
  • multiple forms to sheets
  • automatic updates
  • sends image and PDF attachment links to the Google Sheets
  • custom tags support
  • priority support

Also, they offer a 10 days money-back guarantee too. In case, you’re having trouble setting up your app or any other kinds of difficulty, you may get your full refund within 10 days.

Get the Plugin here.

Using the free version?

No problem. Below, I have solved some common issues that people face during the setup.

Update: 11 April 2019

Does this CF7 to Google Sheets Setup Work with the Check-boxes and Radio Buttons?

And, the answer is YES. It works perfectly with the checkboxes and the radio buttons.

Let me break this step-by-step.

How to Create a Check-box in Contact Form 7?

You know the initial process of creating a new form already, so let me skip right to the checkbox part.

In order to insert check-box, click on the checkboxes option which will open a new popup where you will have to enter all the details including Name and the Options, as shown below.

Create a New Checkbox

Please note that the text you write in the Name field will be the column name in the Google Sheets.

Click on the Insert Tag and the checkbox will be inserted in the form.

How to Create a Radio Button in Contact Form 7?

Like the checkboxes, you will have to click on the radio buttons and it will open a popup where you will have to fill out the Name and the Options field as shown below.

Create a New Radio Button

And, the text you enter in the Name field will be the column name in the Google Sheets as I explained in the checkboxes option.

Click on the Insert Tag and the radio button will be inserted in your form.

Sending Checkbox and Radio Button Data to the Google Sheets

As I mentioned previously, the text you enter in the Name fields of the checkbox and radio button will have to be put as the column name in the Google Sheets.

Checkbox and Radio Buttons in the Contact Form 7 to Google Sheets Setup

Create new columns in your existing Google Sheets where the first row of the columns will be the Name field of the checkbox and radio button as shown in the above screenshot.

Here’s how it will look in the Google Sheets,

Checkbox and Radio Buttons in Google Sheets

And, as soon you complete the setup, all the Contact Form 7 data will start reflecting in the Google Sheets after someone fills in the form.

Update: 13 October 2019

Add Date and Time Automatically

Some people asked me in the comments, is this possible to add time and date to the Google Sheets entries automatically?

In other words, if someone fills up the form, along with the form details it should automatically add a time-date cell in that row so that you can know at what time the form was submitted.

And, there’s a very simple way to do that.

Just open up your Google Sheets where you’re collecting the data and add two columns with names “date” and “time” (without quotes). You can add these columns on the left side, right side, or anywhere in the same spreadsheet.

Take a look at the below screenshot for better understanding:

Automatically Add Time and Date to the CF7 Entries in Google Sheets

And, after adding these 2 columns, as soon as someone submits the form, all the form entries along with the submission date and time will be reflected in your Google Sheets immediately.

That’s it.

If you have any related queries or doubts, feel free to let me know in the comments right now.

Also, share this trick with the people who you think might be interested in reading it.

Recommended: Send Elementor Form Data to Google Sheets without Zapier

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *


  1. Thanks for the clear description!
    Is it possible to save information from radio check or check boxes?

    1. Hi Marine,

      Yes, this technique does work with the Radio Buttons and Check Boxes. And, when you have the paid version, it works even fine.

  2. How does it work? I tried different ways and nothing goes in the sheet

    1. Hi Marine,

      I tried after reading your comment.

      It’s working fine.

      You will have to do the same way as you did for the name and email columns. While creating the Radio Buttons or Check Boxes, enter a name in the Name Field which you’ll have to put in a new column of the Google sheet.

      It should work that way.

      Let me know if that helps.


  3. Hello Deepak,
    i tried several times, but nothing works, either for check boxes or radio buttons.

    1. Hi Marine,

      I have updated the post explaining everything on how to send Checkboxes and Radio Buttons data to the Google Sheets.

      Hope I addressed your issue.


  4. Redid everything and it works. Thanks

    1. Glad that you finally got it working.

  5. Is it possible to record information from several forms on one Google Sheet if you use a different tab for each form?

    1. Hi Amy!

      Yes, you can do so.

      Just create a new Tab in the same Google Spreadsheet and use that Tab name while setting up the new CF7 form as explained in the steps above.

      Let me know if that works.


  6. Hi
    Is it possible to sending upload file to Google Drive?

    1. Hi Altan.

      No, currently, this is not supported by the CF7 to Google Sheets connector plugin.


  7. I have had some issues. if you are using the mail divider – | – will it still work? Using a _raw_tag?

    Also, I am only getting the date to come through no other fields. I have copied the names of the columns exactly.

    1. Hi Taylor,

      Yes, it should work using that mail divider also. And, if it’s not working, try changing that.

      If you have copied all the column names correctly then there must be some problem with the CF7 to Sheets integration.

      Let me know if it works.


  8. Thanks for your reply. The issue was that all fields need to be lowercase. Capital letters will force it not to work. I updated and it worked immediately.


    1. Oh! Yes, fields are case sensitive.

      Glad that it worked, finally.

  9. I Deepak, looks great technique. I have a question, its possible to Save the DateTime record, and the post_url?

    Thanks for your support!

    1. Hi Gerry,

      Glad that you liked it.
      Yes, it is possible to save the Date-Time record – just add one column in the Google Sheets with the first row as “timestamp”.
      And, unfortunately, it’s not possible to store post_url data.


      1. Hi Deepak,
        I’ve tried to add one column in the Google Sheets with the first row as “timestamp”, but it doesn’t work.

        1. Hi Umid,

          Yes, not sure why it doesn’t work sometimes. But, try using “date” and “time” instead of “timestamp”.

          Hope that helps.


  10. Adolfo Enrique Feria says:

    Thanks for sharing your work. It’s there a way to just save the data into google sheets without sending any email?

    1. Glad you liked it.

      Do you mean to capture emails even if someone doesn’t submit the form?

      I don’t think that’s possible.

    2. In adittional settings

      skip_mail: on

  11. Let’s say you have multiple contact forms (say tens or hundreds), is there a way to distinguish one from another, for example showing from which url the contact form was on? Great post!

    1. Hi Mark,

      Yes, that can be done.

      Create a Spreadsheet and use different Tab names to store data from different contact forms. I mean: If the 1st contact form on your site is named CF1 then name the 1st Spreadsheet Tab as CF1 and if the 2nd contact form is CF2 then name your Tab CF2.

      Hope I’m making myself clear.

      Also, if you have the paid version of the plugin, then you can capture from which page they submitted the form automatically.


  12. Hi Deepak,

    after installing the Google Sheets connector, CF7 doesn’t send any e-mails to our info@… or customers. Any solutions?

    Thank you in advance

    1. Hi Allard,

      I’m using this CF7 Google Sheets Connector Plugin for a long time and there is no any problem so far.

      I think there must be some setup problem on this page, that’s why it’s not functioning correctly.

      Hope that answers your question.


      1. Hi Deepak,

        Thank you for answering. I will investigate further. We had 300+ forms succesfully send to our info@… over the last 24h and it stopped working after installing the above.

      2. Hi Deepak,

        found the problem. Our last campaign went a little too well and we have reached the limit of our servers with regard to spam and emails sent by our websites. So problem solved.

        Thank you again for responding.

        1. Hi Allard,

          Glad that it finally worked. ☺️


  13. George Karalis says:

    I don’t have the Google Sheets tab inside the dashboard . What is wrong and how can i solve it.

    1. Hi George,

      Once you install the CF7 Google Sheets Connector Plugin, you will find the required options inside the Contact Form 7 only.

      Click on the Contact Form 7 option from the left-side menu inside your WordPress dashboard & you should find the tab you’re looking for.

      Hope that helps.


  14. José Galvis says:

    Hi Deepak,

    Is it posible to automatically add the hour and minutes when the form is submitted?.

    I have looked all over the web, but it doesn´t seem to be clear.

    Best regards.

    Jose Galvis

    1. Hi José,

      Yes, this is possible.

      Just create 2 columns with names “date” & “time“.

      You can take a look at this screenshot to understand better.

      Also, I have updated the above article with this information.

      Hope that helps.


  15. Shaun Tan says:

    Hi Deepak,
    This works if the Google Sheet is in my own Drive. But it stopped working once move the Google Sheet to a company Shared Drive. Is there any way to fix this?

    1. Hi Shaun,

      Yes, it has to be in your Drive which you verified the CF7 Google Sheets Connector plugin from.

      Try connecting your company’s Google account with the plugin, and it should work.

      Hope that helps.


  16. Mason Montgomery Eggers says:

    Hi, Is there a limit to how many form submissions can be accepted monthly?

    1. Hi Mason,

      No there isn’t any limit. An unlimited number of submissions can be accepted.


  17. Hi Deepak,
    when i try other column on the sheet, with other data, the plugin not works. Why?

    1. Hi Esped,

      That has never happened to me, by the way.

      I think you must have committed some mistake in the setup. Do verify it again and it should work properly.

      And, if the problem is still there, please explain to me in detail.


      1. Hi Deepak,
        i have the column A,B,C with the data imported with your plugin.
        Now if i try to add a column D, with my custom data, the plugin not works.
        Try yourself.

  18. Mukunda S B says:

    Can we validate a data through contact form 7 which is linked to G Sheets

    1. Yes, there are validation features in the Contact Form 7 itself. You can look for various tutorials available online.

  19. Hi Deepak,
    Thanks for sharing your work!
    I have an issue with Google sheet. Users can download my documents from different places with forms (websites, facebook ads, google ads etc.) and I would like to know from where they downloaded these documents. Is there any settings for that ? Thank you!

    1. As far as I know, no, by using Contact Form 7 and Google Sheets, you can’t do that. You can’t collect location automatically.

  20. I don’t know how it is possible that nobody has this problem but the field for acceptance does not work. It is not possible to send the form or you can send it without approval although it is required. Is this just my problem?

    1. That shouldn’t happen. But if you describe your problem more clear, I might help.

      What types of field you’re trying to add and what’s the problem?


  21. Jane Juma says:

    Hey I folllowed all your steps but am not collecting any data in my google spread sheet. Please help

    1. Hi Jane,

      There must have been some mistakes in the process. Can you share more details so that I can understand your problem?


  22. Hello,
    I’ve setup the connector few months ago, and it works really fine.
    Now, it’s “dead”. My old contact form doesn’t work any more, and the new one isn’t working.
    I tried to allow the connector to contact with a new code, still not working.
    any idea ?
    Thanks !

    1. There must be some issue with the setup. Mine is still working. Have a close look at everything or try re-doing from the start or try using the paid version of the plugin, they have good support. Hope that helps, thanks.

  23. Hi,

    I’m trying to get a timestamp in Google Spreadsheet, including H, M and seconds.
    At the moment “date” is working, it’s being filled, “time” not.

    Any idea how to get time including seconds working?

    1. Yes, the “time” thing doesn’t pull seconds. But, if you have the paid version then it works like a charm.

  24. I did the configuration following the tutorial twice, the plugin makes changes in my spreadsheet but does not write any data from form
    Cam u help me?

    1. I am not sure where you got stuck, but there must be some error related to Google Sheets connection or in the Sheet names (lowercase or uppercase maybe). I recommend you to check it again.

  25. is there any way to prevent duplicate email entry from contact form 7 to google sheet

    1. Sadly there’s no way to do that. After some interval, you can use the Remove Duplicates feature in the Google Sheets though.

    1. Glad that it worked for you!

  26. Hi,

    thank you so much, it works really fine.

    Just a question, is it possible to include the URL column?


    1. Yes, an URL column can also be added just like any other column. However, paid version of the plugin works a lot better.

  27. Don’t work at all 🙂

    1. If you can elaborate what are the problems that you’re exactly facing then I might be able to help. Thanks.

  28. Reagan L Burns says:

    Is there any delay in the google sheet filling? I set this up manually and the sheet doesn’t seem to be auto-filling but it’s only been 5 minutes.

    1. No, if you have set up everything correctly then all the data is pushed to the Google Sheets instantly. If yours is taking time then there might have been some setup issues. Thanks.

  29. I have spent hours trying to get this to work for a client on their site. They were using the plugin prior to my taking over work on the site, so I am coming into this without the benefit of knowing how it was set up originally.

    Client said the data stopped pushing to the Google Sheet recently, and they think changing the name of the sheet caused the problem. (Which I can see it would.)

    They have multiple CF7 forms on the site, but to my knowledge, only one should be feeding to a Google Sheet.

    I have re-created the sheet, given it a new name, disconnected the integration and then started from scratch by re-connecting the integration to the Google Drive, adding the sheet info (name, tab name, sheet ID, tab ID). I have double and triple checked the field names to be sure there were no capital letters, etc. I have tested and re-tested the form over 10 times. Nothing. No data goes to the sheet at all. The emails go through, but nothing goes to the sheet.

    They are using the free version. Would it be better to have them upgrade to the paid version so we can get support? Any thoughts on what we could be doing wrong here?

    1. Hi, Sue!

      Yes, changing the Sheet Name will not send any data to the Google Sheets.

      And, with your setup, I see that you have cross-checked everything correctly. I would recommend you to re-verify the Google Sheets with the “CF7 to Google Sheet Connector” plugin by clicking on the “Get Code” button. Sometimes the authorization expires and it doesn’t work.

      Also, if you get the premium version most of the things are automatically completed. For example, Sheet’s column names and it fetches all the existing Google Sheets names in the WordPress dashboard itself so there are no chances of any kind of error.

      However, I would recommend you to re-verify the Google Sheets authorization code before going for the premium version.

      And, yes. Their support is good for the premium version. Any problem and they’ll solve it for you.

      Hope that helps.


      1. Thanks, Deepak! I did recommend to the client that they get the premium version to clear up any chances of errors and get better support. It’s important to them to have this process work, as it’s for an application that contains too many questions for them to have to deal with manually.

        1. Glad to know,Sue. The premium version works perfect.

  30. I have a client using this plugin but one tab for one form always adds entries in gray instead of black. They use the color to help indicate which entries have been shared among their team but can’t do this with reliability because the form field entries show up all in gray no matter what we do to the sheet formatting itself. Help!

    1. Hey Amber,

      Yes, that’s the limitation of the plugin. It automatically picks up the formatting and colors of the very last row. Whether you use the premium or free version of the plugin, the problem will be there. However, you can always reference data from the Sheet to another sheet and that might work.

      Hope that helps. Thanks.

  31. Love this plugin.

    The only thing is that the time stamp doesn’t work anymore. I’m using the free version.

    I tried:
    Tijdstempel (it’s timestamp in dutch)

    I also tried date in the first column. But that didn’t help either. Any tips? I didn’t add the time anywhere else in the form/mail

    1. Hi Nancy,

      Yes, now the free version doesn’t fetch the date and time properly. Earlier it was working, but now it doesn’t – that’s the limitation of the free version.

  32. Hello ,
    I am using this plugin on free hosting at but it is not adding data to Google sheets but on Google sheets message is shown that sheets updated few seconds ago just after submitting the form .
    And no data appears in sheets
    Can you guide me please .

    1. Hi Kokab,

      It should work even at I suggest you to re-authorize the plugin with the Google Sheets and re-check that your column headers in the Sheet are matching than that of the contact form. Also, as you said that the Sheet updates but there’s no data in it; I think you already have some columns with data and in that case data from the Contact form will be pushed to the very bottom of the sheet.

      Hope that helps.

      Thank you.

  33. Hi Deepak,
    i have the column A,B,C with the data imported with your plugin.
    Now if i try to add a column D, with my custom data, the plugin not works.
    Please advise.

    1. Hi Yamco,

      Yes, adding custom data to the same Sheet won’t work. Instead, you can create a new Sheet inside the same Google Sheets document and import the other Sheet’s (which is connected to the plugin) by using the IMPORTRANGE function, and then you can add some rows manually and the main Sheet’s data won’t be affected.

      I have not tried it, but it should work in your case.

      Hope that helps.


  34. pianoman555 says:

    Hi Deepak, thanks for the information.
    BTW I installed and successfully export the form data to the google sheet.
    But in the data of textarea, there was NO line break though in email there was successfully some line break when they have.
    Any solutions?