> ## Documentation Index
> 
> Fetch the complete documentation index at: [/docs/llms.txt](/docs/llms.txt)
> 
> Use this file to discover all available pages before exploring further.

[Skip to main content](#content-area)

## 

[​

](#setup)

Setup

1.  Go to **Integrations** in your osforms dashboard
2.  Click **Connect** next to Google Sheets
3.  Click **Sign in with Google** and authorize access
4.  Paste your Google Sheet URL or Sheet ID
5.  Optionally enter a sheet tab name (defaults to the first tab)
6.  Click **Save**

## 

[​

](#how-columns-work)

How columns work

osforms reads the header row of your sheet and maps submission fields to matching columns. If a field key doesn’t match an existing column, it’s automatically appended to the header row on the next submission. Two system columns are always appended if not already present:

| Column | Value |
| --- | --- |
| `Submission ID` | MongoDB ObjectId of the submission |
| `Submitted At` | ISO 8601 timestamp |

## 

[​

](#field-key-mapping)

Field key mapping

Column headers match the **field ID** from your form schema (e.g. `full_name`, `email`, `message`). Set field IDs intentionally in the form builder — they become the column names in your sheet. **Example**: A field with `id: "company_name"` maps to a column titled `company_name`.

## 

[​

](#setting-up-the-sheet)

Setting up the sheet

You don’t need to pre-create columns. Submit once and osforms will create all the columns for you. After the first submission your sheet will look like:

| name | email | message | Submission ID | Submitted At |
| --- | --- | --- | --- | --- |
| Jane Smith | [jane@example.com](mailto:jane@example.com) | Hello! | 64f1a… | 2026-03-27T12:00:00.000Z |

You can then rename columns — as long as the header text still matches the field ID, mapping continues to work.

## 

[​

](#permissions)

Permissions

The Google account you connect must have **Editor** access to the spreadsheet. Service accounts are not supported — connect a personal or workspace Google account.

## 

[​

](#failure-handling)

Failure handling

If the Sheets API call fails (e.g. revoked OAuth token, sheet deleted), the integration is marked as failed and you’ll receive an in-app notification and email alert. To reconnect, go to **Integrations** and click **Reconnect Google Account**.

Google Sheets API calls count against your Google account’s free quota (500 requests/100 seconds). This is rarely a concern for standard form volumes.

[Resend](/docs/integrations/resend)[Webhooks](/docs/integrations/webhooks)

⌘I