# Google Sheets

Auto-sync every submission to a Google spreadsheet with custom column mapping.

## Google Sheets

Send every submission to a Google spreadsheet as a new row. Map fields to custom columns, connect multiple Google accounts, and backfill past responses.

<h2 id="what-you-get">What you get</h2>

<ul>
  <li>One row per submission, synced in real time</li>
  <li>Field-level column mapping with custom labels</li>
  <li>Metadata columns (submitted at, respondent email, submission ID, form name, submission status, PDF link, channel, request ID)</li>
  <li>Auto-created spreadsheet per form</li>
  <li>Backfill existing submissions on connect</li>
  <li>Multiple Google accounts per workspace</li>
  <li>Test row to verify the connection before real submissions arrive</li>
</ul>

<h2 id="connect">Connect Google Sheets</h2>

<h2 id="column-mapping">Column mapping</h2>

<p>
  Toggle <strong>Export all form fields</strong> to include every question, or turn it off to pick specific fields and set custom column
  headers.
</p>

<p>
  Column labels default to the question title but can be overridden — helpful when your spreadsheet feeds into another tool that expects
  specific header names.
</p>

<p>
  Values are written by column <em>position</em>, never by matching the header text. Renaming a header in Google Sheets is harmless;
  reordering or deleting a column is not, and puts values in the wrong place. When your mapping or your form's questions change, formbase
  rewrites row 1 of the spreadsheet it created so the header keeps matching what it appends.
</p>

<h3 id="repeating-groups">Repeating groups</h3>

<p>
  A <a href="/building-forms/repeating-groups">repeating group</a> lets respondents add as many entries as they need — like a list of
  guests, each with a name and age. In the field picker you choose how to map it:
</p>

<ul>
  <li>
    <strong>The whole group</strong> maps to one column. Every entry shows as numbered, labeled rows, like "1. Full name: Jane Appleseed,
    Age: 34, 2. Full name: Marcus Lee, Age: 29".
  </li>
  <li>
    <strong>Each member field</strong> maps to its own column. The values from every entry join with <code> · </code>, so the Full name
    column reads "Jane Appleseed · Marcus Lee".
  </li>
</ul>

<p>
  Pick one, the other, or both. If you remove a member field from your form later, it still appears in the picker so past submissions keep
  their column — your mapping never breaks.
</p>

<h3 id="metadata-columns">Metadata columns</h3>

<p>
  By default, Submitted at and Submitter are included. Add or remove any metadata column during setup, and rename any of them like a normal
  column header.
</p>

<h2 id="multiple-accounts">Multiple Google accounts</h2>

<p>
  A workspace can have multiple Google accounts connected, and each form picks one. This works well when different teams manage their own
  Google Drive or you want client spreadsheets in separate accounts.
</p>

<p>
  To add another account, start a new integration setup and authorize with a different Google email. Existing integrations keep their
  current account.
</p>

<h2 id="backfill">Backfill existing submissions</h2>

<p>
  When you first connect, you can export all existing submissions into the spreadsheet. The backfill runs in the background in batches of 50
  rows, with progress shown in the integration panel.
</p>

<p>Rows are written in submission order (oldest first) so the spreadsheet reads chronologically.</p>

<h2 id="auto-create">Auto-created spreadsheets</h2>

<p>
  formbase creates a spreadsheet in your Google Drive when the first submission arrives (not on save). The spreadsheet uses your form's
  name, or the custom name you set during setup. If you delete the spreadsheet, formbase creates a new one on the next submission — you
  don't lose any data.
</p>

<h2 id="test-event">Test event</h2>

<p>
  The integration detail panel has a <strong>Send test</strong> button. It appends a placeholder row to the spreadsheet so you can verify
  column mapping without waiting for a real submission. Question columns show
  <code>[Question Title]</code> placeholders; metadata columns show synthesized values.
</p>

<h2 id="abandoned-responses">Abandoned response events</h2>

<p>
  If a respondent starts your form but doesn't finish, formbase can still sync the partial data. On the{' '}
  <strong>Abandoned submissions</strong> step, set <strong>Send abandoned event after</strong> to 12 hours, 1 day, 3 days, or 1 week. An
  hourly sweep then appends a row with whatever the respondent filled in, using the same column mapping. The Submission status column reads
  "Partial" so you can filter incomplete responses.
</p>

<p>
  Only drafts from a share link are swept, and <strong>Required fields</strong> narrows it further: the row is appended only when at least
  one of the fields you pick was filled in.
</p>

> ℹ️ **Pro feature**
> <p>
>     Abandoned response delivery requires a Pro or Business plan. The core Google Sheets integration is available on all plans. See{' '}
>     <a href="/subscription-billing/plans-pricing">plans & pricing</a>.
>   </p>

<h2 id="error-handling">Error handling</h2>

<p>
  After 5 consecutive failures of any kind, the integration auto-pauses with an error status and the person who set it up receives a
  notification email. Fix the underlying issue and re-enable the integration — it will resume from the next new submission.
</p>

<h2 id="faq">FAQ</h2>

  <p>No. formbase creates one in your Google Drive when the first submission arrives.</p>

  <p>formbase creates a new one on the next submission with the same column headers. No data is lost.</p>

  <p>
    Yes. Google accounts are connected at the workspace level. Any member can use any connected account when setting up an integration — no
    re-authorization needed.
  </p>

  <p>Yes. Authorize additional accounts during new integration setups. Each form picks which account to use.</p>

  <p>
    Permission to create and edit spreadsheets (Google Sheets API), create files in Google Drive (files only), and read your email and
    profile name. formbase cannot read your other Drive files or access anything outside the spreadsheets it creates.
  </p>

  <p>
    Both appear as rows in the same spreadsheet. The "Submission status" metadata column shows "Completed" or "Partial", so you can filter
    or sort by it.
  </p>

  <p>
    Yes. Open the integration and re-map fields. The next delivery rewrites the header row to match; existing rows keep the values they were
    written with.
  </p>

  <p>No. The spreadsheet is fixed once the integration is created. Delete it and create a new one.</p>

  <p>
    Go to Form settings → Integrations → Google Sheets and delete the integration. To also revoke formbase's access to your Google account,
    visit your <a href="https://myaccount.google.com/permissions">Google account permissions</a> page.
  </p>

<h2 id="next-steps">Next steps</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Airtable](/integrations/airtable) — Push submissions into an Airtable base
  - [Notion](/integrations/notion) — Push submissions into a Notion database
  - [Webhooks](/integrations/webhooks) — POST signed JSON to any URL
  - [Repeating groups](/building-forms/repeating-groups) — Let respondents add multiple entries
  - [Exporting submissions](/submissions-analytics/exports) — Download CSV, Excel, or PDF
</div>
