Export Gravity Forms entries to Google Sheets
GravityExport can send your form entries straight to a Google Sheets spreadsheet and keep that spreadsheet in step with your form. Number fields and dates arrive as numbers and dates, so you can sort, filter and build formulas in the sheet without converting anything first.
Prefer to watch the video? #
Before you start #
You need:
- GravityExport 1.15.0 or later installed and active.
- A site served over HTTPS. On a site running over plain HTTP, the connect button is unavailable and says “Secure connection required”.
- A Google account with access to Google Drive.
- A GravityKit license that includes GravityExport, activated on this site.
How the export works #
GravityExport mirrors your form into a single tab of a spreadsheet. Every export rewrites that tab in full rather than appending rows to the bottom, so one new entry and the whole form are the same operation. The tab always reflects the current state of the form, including dropping rows for entries you have deleted.
The export goes one way: changes you make in the sheet don’t come back to Gravity Forms. GravityExport doesn’t connect to Excel Online or OneDrive; for Excel, use a download link or a scheduled Excel file.
One Google account is shared by every export on the site. You connect it once, then each feed chooses which spreadsheet and tab it writes to.
How often the sheet updates
The Export Trigger on the feed decides what causes a rewrite. This is the setting that determines whether an edit reaches the sheet straight away:
| Trigger | New entry | Edited entry | Deleted, trashed, or restored entry | Rows added by an import, the REST API, or WP-CLI |
|---|---|---|---|---|
| Automatic | Rewrites | Rewrites, if Export on Update is on (the default) | Rewrites, if Export on Update is on (the default) | Rewrites once at the end of each request that added rows, if Export on Update is on |
| Scheduled | Waits for the schedule | Waits for the schedule | Waits for the schedule | Waits for the schedule |
| Webhook | Waits for the URL | Waits for the URL | Waits for the URL | Waits for the URL |
On an Automatic feed, editing an entry updates the sheet immediately. Edits made on the entry detail page, through GravityView’s Edit Entry or inline edit, or by another add-on calling the API all count. Turning off Export on Update stops edits, deletions, trash and restore, and rows added by an import or the API from triggering a rewrite. Those changes still appear at the next submitted entry, because every export rewrites the whole tab.
On a Scheduled or Webhook feed, nothing an entry does touches the sheet. Only the schedule, the feed’s trigger URL or Export Now causes a write, and Export on Update has no effect.
Changes made during the same page request are combined into one rewrite.
Step 1: Connect your Google account #
The connection lives in your site’s GravityKit settings, not on an individual form.
- In your WordPress admin, go to GravityKit, then Settings, and click GravityExport in the settings menu.
- Find the Cloud Storage section.
- Click Connect to Google Sheets.
- Sign in to Google and approve the request. GravityExport only asks for access to the spreadsheets you create or pick, not your whole Drive.
- When you return to WordPress, the section shows the connected account address.

Once connected, the same row names the account exports run as, and offers buttons to test or disconnect it.

To confirm the connection works, click Test Connection.
On the same screen, turn on Monitor connections. It checks the cloud connections that your active feeds use about every 12 hours, Google Sheets included, and alerts you when one goes offline.
Note: If the connect button is unavailable, the reason appears beneath it. The causes are a site not running over HTTPS, a missing or expired license, a license that does not include GravityExport, a site that has not been activated on the license, or a license that has used all its activations.
Step 2: Create the export feed #
- In your form’s settings, open the GravityExport Save tab.
- Click Add New.
- Give the feed an Export Name. This is for your reference only and does not affect the spreadsheet.

Step 3: Choose Google Sheets as the destination #
Open the Storage tab of the feed and choose Google Sheets as the storage type. The feed screen shows which Google Account it will use, which is the account you connected in step 1.
If you skipped step 1, the Google Sheets tile is grayed out and says to connect it under GravityKit Settings. Connect the account first, then come back.

The panel repeats the most important thing about this destination:
This feed will rewrite every row on each export. Tab contents will be fully overwritten: keep your notes, formulas and charts on a different tab.
Anything you add to the feed’s tab by hand is gone on the next export, so put your own work on a separate tab in the same spreadsheet.
The usual way to do that is a second tab that reads from the exported one. If the feed’s tab is named Contact Form, either of these pulls its data across:
={'Contact Form'!A:Z}=QUERY('Contact Form'!A:F, "select A, C where F = 'Yes'")Formulas, charts and pivot tables on your own tab survive every export, and they keep up to date on their own because the tab they read from does.
Step 4: Pick the spreadsheet #
Under Spreadsheet, choose one of two options.
| Option | What happens |
|---|---|
| Create a new spreadsheet, named after the form | GravityExport creates a spreadsheet in your Google Drive on the first export. After that run, the feed screen links to it. |
| Choose an existing spreadsheet from Google Drive | A picker opens so you can select a spreadsheet you already have. |
If you choose an existing spreadsheet, click Choose a spreadsheet from Google Drive. The picker opens in a separate window, signed in as the connected account. Only the spreadsheets you select here can be reached by GravityExport. There is no field for pasting a spreadsheet link, because picking a file in Google’s own window is what grants access to it. A pasted link grants nothing, so a feed configured that way would look finished and fail on every run.
Note: Picking a spreadsheet requires an administrator, because selecting one grants access to the Google account the site exports with. Users who can edit feeds but are not administrators see which spreadsheet a feed is already bound to. On a feed that has no spreadsheet yet, they aren’t offered the option to choose an existing one.

Step 5: Name the tab #
Tab Name controls which tab inside the spreadsheet the feed writes to. Leave it blank to use the form title.
Before you save, check how the tab name works:
- If a tab with this name already exists in the spreadsheet, this feed takes it over and replaces everything in it. Use a name of its own if the spreadsheet holds other work.
- Changing this name later renames the feed’s tab on its next export. You can also rename the tab in Google Sheets, and the feed keeps writing to it.
- Several feeds can share one spreadsheet, each writing to its own tab, so a single workbook can collect entries from several forms. Give each feed its own Tab Name: two feeds on the same form both default to the form title, and the second would take over the first one’s tab.
- Deleting the feed’s tab in Google Sheets is not how you stop exporting. The next run creates it again and refills it. To stop the export, deactivate or delete the feed in WordPress.
- A tab name can be up to 100 characters long and can’t contain
[ ] : / \ ? *. Deleting the feed in WordPress leaves the spreadsheet and its tab in your Google Drive.

Step 6: Choose the columns #
Columns decides which fields become columns, and in what order.
- The fields configured in the connected GravityExport feed, the default, follows a field list, including its order and any fields turned off in it. When the feed’s Conditional Logic tab uses an export filter, that is the filter’s Enabled Fields list. Otherwise it is the list on the form’s GravityExport tab, which appears once the form’s download URL is enabled. Without that list, every field is exported.
- Every field on the form ignores that list and exports everything, entry meta included.
To export only some entries, choose an export filter under Export Filters on the feed’s Conditional Logic tab, or add conditions there. GravityExport Filters covers export filters.
Step 7: Choose when the export runs #
On the feed’s General tab, set the Export Trigger:
- Automatic (on every new entry) exports whenever an entry is submitted.
- Scheduled exports at a Schedule Interval. The choices are Every Hour, Twice Daily, Daily, Weekly, Every 30 Days, and Custom, which takes a number of hours. The first scheduled run comes one interval after you save the feed, and saving it again starts the count over. How to schedule automated exports covers the schedule settings.
- Webhook exports when a request hits the feed’s webhook URL.

On a Scheduled feed, leave Failure Alerts enabled to get a notice on the WordPress Dashboard when a scheduled export fails. The notice clears after the next successful export.
The Entries to Include option, which lets a scheduled export send only the entries received since the last export, isn’t offered for Google Sheets. A Google Sheets export always sends the whole form, because the tab mirrors the form: narrowing a run would shrink the tab to that interval and overwrite everything before it.
Save the feed. To send entries straight away without waiting for the schedule, use Export Now on the feed list. It asks for confirmation first, since it writes to the destination immediately and replaces what is there.
Checking that exports are working #
Every feed has an Activity Log tab listing its recent exports: what each one wrote, when, and why any of them failed. The most recent 100 runs are kept, and a failure stays visible even after later exports succeed.

The feed list also shows Last Run and Next Run, and the Storage column links directly to the spreadsheet the feed writes to.
Opening that spreadsheet shows the export itself. Each entry is one row, the header row comes from the columns you chose, and the values arrive typed rather than as text, so dates sort as dates and numbers add up.

In that sheet:
- Number fields, entry IDs and dates arrive as numbers and dates, so sorting, SUM and charts work on them without converting anything first. Product prices arrive as numbers only when Export prices as numeric fields, without currency symbol ($) is turned on under Forms, then Settings, then GravityExport. Otherwise they arrive as text.
- Text is written exactly as submitted. Leading zeros and phone numbers keep the form they were entered in.
- A submitted value that looks like a formula is stored as text, so it can never run in your spreadsheet.
GravityExport builds each export on a hidden tab named __gk_export_staging_ plus the feed ID, then moves the data into your tab in one step, so your tab is never half written. If a run fails partway, the hidden tab can stay in the spreadsheet until the feed’s next run removes it.
Limits #
- A Google spreadsheet holds at most 10 million cells across all of its tabs, and an export briefly needs room for two copies of its data. Treat about half that ceiling as the practical limit for one feed.
- A single cell holds at most 50,000 characters. A longer value is shortened and marked with
… [truncated]. The full value stays in your Gravity Forms entry. - Only one Google Sheets export runs at a time on a site. An export started by a new entry while another is running is retried automatically a few minutes later.
If an export does not fit, the run stops and says how many more cells it needs, and your tab is left as it was. Narrow the export with an export filter, or point the feed at a spreadsheet with more room.
If the connection stops working #
If Google stops accepting the connection, exports to Google Sheets begin failing. The failures show in each feed’s Activity Log, and the Cloud Storage section says the connection needs attention. A notice on the WordPress Dashboard appears too if Monitor connections is on, or when a Scheduled feed with Failure Alerts fails. To fix it, go back to GravityKit, then Settings, then GravityExport, and click Reconnect to Google Sheets.
Connections made while your license was current keep working and keep refreshing after it lapses. A current license is needed to connect or reconnect an account and to open the spreadsheet picker.
After moving or cloning a site
A Google connection belongs to the site address that made it. Cloning a site, promoting a staging copy to live, or moving to a new domain all read as a different site, so the connection shows as needing attention and exports stop until someone reconnects. Changing the site’s title doesn’t matter; only the address does.
This is deliberate: without it, a copied database would include the original site’s Google access, and every clone would write to your spreadsheets. So reconnecting on the copy doesn’t affect the original site, and disconnecting on the copy doesn’t cancel the original site’s access.
- Prefer to watch the video?
- Before you start
- How the export works
- Step 1: Connect your Google account
- Step 2: Create the export feed
- Step 3: Choose Google Sheets as the destination
- Step 4: Pick the spreadsheet
- Step 5: Name the tab
- Step 6: Choose the columns
- Step 7: Choose when the export runs
- Checking that exports are working
- Limits
- If the connection stops working