---
title: "Connect to Spreadsheets & Files"
description: "How to append form responses to Google Sheets or Excel, and how to deliver uploaded files to Google Drive or OneDrive."
slug: "connect-to-spreadsheets-and-files"
audience: "all"
generated_at: "2026-10-16T19:40:13.822Z"
screenshots:
  - "/docs/screenshots/connect-to-spreadsheets-and-files/connections.png"
---

FormAssembly connects to spreadsheet and file-storage services so that form submissions can be appended as rows, and respondent file uploads can be saved into cloud folders. This article covers six services: **Google Sheets**, **Microsoft Excel Online**, **Google Drive**, **Microsoft OneDrive**, **Box**, and **Dropbox**.

![The Connections page in FormAssembly, listing available services](/docs/screenshots/connect-to-spreadsheets-and-files/connections.png)

## What you can do with spreadsheet and file connections

- **Google Sheets** — append a row to a spreadsheet on each submission, and power dynamic lookup fields from spreadsheet data.
- **Microsoft Excel Online** — append a row to a worksheet table on each submission, and power dynamic lookup fields.
- **Google Drive** — upload files that respondents attach to a form into a Drive folder, and capture the resulting file URL for use later in your workflow.
- **Microsoft OneDrive** — upload respondent files into a OneDrive folder, and capture the resulting file URL.
- **Box** — upload respondent files into a Box folder, and capture the resulting Box link.
- **Dropbox** — upload respondent files into a Dropbox folder, and capture the resulting shared link.

**Box and Dropbox are account add-ons.** An account can use Box or Dropbox only when its plan includes the add-on or the account has bought it; without it, saving a workflow that contains a Box or Dropbox step is refused with a message that the connector is not available on the account. Google Sheets, Excel Online, Google Drive, and OneDrive are included in every plan. Accounts that already used Box or Dropbox in a workflow when those became add-ons were granted them automatically. See also: **Plans & Billing** for how to add an add-on.

Salesforce, Stripe, and other services are covered by their own articles. See also: **Connecting Services**.

## Before you start

You need an authorized connection for the service you want to use. On the **Connections** page, open **Google (Sheets, Drive) connection settings** for Google Sheets and Google Drive, **Box connection settings** for Box, or **Dropbox connection settings** for Dropbox. Microsoft (Excel, OneDrive) shows **Coming soon** on the Connections page and cannot be opened there — ask Fai, FormAssembly's built-in AI assistant, to connect your Microsoft account for Excel Online and OneDrive. Authorizing, reconnecting, and disconnecting are covered in **Connecting Services** — this article assumes you already have a working connection.

A single Google connection covers both Google Sheets and Google Drive. A single Microsoft connection covers both Excel Online and OneDrive. Box and Dropbox each have their own connection.

## How these steps are configured

Every service in this article is configured through Fai, FormAssembly's built-in AI assistant. The connect step for Google Sheets, Excel Online, Google Drive, OneDrive, Box, or Dropbox shows a **read-only summary** of what it will do, ending "Connector configuration is managed by the AI agent." To change what is sent, describe the change to Fai rather than editing the step directly.

These steps are also *added* by Fai. The **Add step** menu's **Connect** group contains only **Salesforce**, so there is no menu item for Google Sheets, Excel Online, Google Drive, OneDrive, Box, or Dropbox — ask Fai to add the step instead, which works from either Focus or Overview view.

The general pattern for any of these services is:

1. Ask Fai to add the connect step for the service you want, after your **Collect** step.
2. Tell Fai which connection the step should use, if your account has more than one for that service.
3. Tell Fai what you want sent — for example, "append the name, email, and order total to a new Google Sheet called Spring Orders", or "save the uploaded résumé to /Applications in Box".
4. Review the step's summary, save the workflow, and submit a test response to confirm the result lands where you expect.

## Google Sheets

### What Google Sheets can read and write

FormAssembly can **append rows** to a Google Sheet. Google Sheets in FormAssembly is **append-only**: it adds new rows and never edits, overwrites, or deletes existing rows, tabs, or spreadsheets. A Google Sheets connect step only sends data out — it does not read rows back into a workflow or prefill a form. Spreadsheet data can still be read in one place: a **dynamic lookup** form field (see below).

Row 1 of the sheet is always treated as the header row. When FormAssembly appends to a completely empty sheet, it writes a header row first using your mapping's field names, then appends the data row. If the sheet already has data, only the data row is appended.

### What the Google account needs to permit

When you authorize the Google connection, you grant FormAssembly permission to read, append to, and create spreadsheets, plus per-file access to the specific Drive files you create through FormAssembly or explicitly choose. FormAssembly does **not** receive blanket read access to your whole Google Drive.

That has one practical consequence today: FormAssembly can only see spreadsheets it created for you. A spreadsheet you created yourself in Google Sheets is invisible to FormAssembly and will not appear when you search for it by name, and sharing it or making it public does not change that, because the access is a per-file grant to FormAssembly rather than a permission on the file. Choosing a pre-existing spreadsheet through the Google file picker is planned but not yet available. For now, create the destination spreadsheet from FormAssembly; once created, it appears in the list for re-selection.

### How do I send form answers to a Google Sheet?

1. Ask Fai to add a Google Sheets step after your **Collect** step.
2. Tell Fai which Google connection the step should use.
3. Tell Fai which spreadsheet to write to — either an existing spreadsheet FormAssembly created, or a new one with a title and, optionally, a tab name. A spreadsheet created this way is placed at the top level of your Google Drive.
4. Tell Fai which form answers should become columns, and in what order.
5. Save the workflow and submit a test response to confirm the row lands where you expect.

**Column order follows the order Fai configures.** The first value writes to column A, the second to column B, and so on. If you ask Fai to reorder the columns after data already exists in the sheet, new rows will no longer line up with the existing columns.

If two spreadsheets FormAssembly created share the same title, use the created and modified dates shown alongside them to tell which one you mean.

### Dynamic lookup fields from a spreadsheet

Google Sheets can power a **dynamic lookup field** — a form field that shows matching rows from a spreadsheet for the respondent to pick from. Ask Fai to set one up; the builder's field settings have no dynamic lookup control. The options appear as soon as the respondent clicks into the field; the respondent does not need to type first, and typing narrows the list. For Google Sheets, the matching is evaluated by Google on its side, so large spreadsheets stay responsive. You can also narrow results using the current value of other fields on the form, so one field's answer filters the choices offered in another, and you can sort the matched rows by a column in ascending or descending order.

In a lookup configuration, columns are identified by **column letter** (A, B, C…), not by header label.

If Google returns a reply FormAssembly cannot read, the lookup fails with an error rather than showing empty or incorrect matches, so a broken lookup is always visible rather than silently returning nothing.

### Google Sheets limits

- Rows are appended only. Updating a cell, upserting a row, or deleting rows and tabs is not supported.
- A Google Sheets step cannot read rows into a workflow or prefill a form. Use a dynamic lookup field if respondents need to choose from spreadsheet data.
- Creating a new spreadsheet is a setup-time action. Each time you ask FormAssembly to create a spreadsheet, it creates a **new** one — it does not reuse a previously created spreadsheet with the same title.
- A spreadsheet created by FormAssembly lands in your Drive root. Move it into a folder yourself in Google Drive if you need it filed elsewhere.
- If the target spreadsheet or tab has been deleted or renamed by the time a submission runs, the run stops with an error. Ask Fai to point the step at a valid spreadsheet to fix it.
- Google Sheets reads each value the way it reads something typed into a cell, so numbers and dates become numbers and dates, and a value starting with `=` becomes a formula.

## Microsoft Excel Online

### What Excel Online can read and write

FormAssembly can **append rows** to an Excel Online workbook. Like Google Sheets, Excel Online in FormAssembly is **append-only** — existing rows are never updated or deleted, and an Excel Online connect step does not read rows back into a workflow or prefill a form. Workbook data can be read by a dynamic lookup field (see below).

Excel Online writes into a **table** on the worksheet:

- If the worksheet you name does not exist in the workbook, FormAssembly creates it.
- If the worksheet has no table, FormAssembly creates one, using your mapping's field names as the column headers.
- If a table already exists, FormAssembly appends a row to that table.

As with Google Sheets, the order Fai configures determines column order.

### What the Microsoft account needs to permit

The Microsoft connection grants FormAssembly read and write access to your OneDrive files, so the same connection serves both Excel Online and OneDrive. The account must have edit access to the workbook you target.

### Choosing a workbook

FormAssembly does not list your Excel workbooks for you — workbook browsing is not available for Excel Online. You identify the workbook by its OneDrive item identifier, which you can copy from the workbook's address in the OneDrive web interface. Keep that identifier handy before you ask Fai to configure the step.

### Dynamic lookup fields from a workbook

Excel Online can also power a dynamic lookup field. Ask Fai to set one up, and note these behavior details:

- The respondent's search text is matched against the **first column** of the range, as a case-insensitive "contains" match. An empty search returns all rows, which is why the list appears as soon as the respondent clicks into the field.
- Each additional filter field is compared against the specific column you assign to that field, so adding or reordering filter fields does not change which column each one checks. These comparisons are exact (though not case-sensitive) and use the field's declared type, so a numeric column matches numerically rather than as text.
- You can build richer filters than simple equality — grouping rules with "any" or "all", negating a rule, and using comparison operators such as greater than — because FormAssembly evaluates the rules itself after retrieving the range. In these rules, a column is identified by its column letter.
- You can sort the matched rows by a column, ascending or descending, and choose which columns appear in the result and in what order.

Matching for Excel Online happens after FormAssembly retrieves the range, and the lookup field displays at most 100 results. Keep lookup sheets modest in size for the best responsiveness. If Microsoft returns a reply FormAssembly cannot read, the lookup fails with an error rather than returning empty or incorrect matches.

### Excel Online limits

- Rows are appended only; update, upsert, and delete are not supported.
- An Excel Online step cannot read rows into a workflow or prefill a form.
- Workbook listing and workbook browsing are not available; supply the workbook identifier.
- Every cell value is treated as text.

## Google Drive

### What Google Drive can do

Google Drive in FormAssembly is a **write-only file destination**: it uploads files that respondents attach to a **file upload** field into a Drive folder. Google Drive can also upload the PDF produced by a **Document generation** step, or the signed PDF produced by an e-signature step. Google Drive cannot read files out of Drive or prefill a form from Drive.

You specify the destination as a folder path relative to your Drive root, for example `/Submissions/2026`. FormAssembly resolves each segment of the path in turn and creates any folder that does not already exist. An empty path uploads to the Drive root. FormAssembly can see only folders it created itself: a folder you made in Drive with the same name is not reused, and FormAssembly creates its own folder beside it.

### How do I save uploaded files to Google Drive?

1. Add a file upload field to your **Collect** step.
2. Ask Fai to add a Google Drive step, and tell Fai which Google connection it should use.
3. Tell Fai which file upload field to send and which folder path to upload it to.
4. Ask Fai to save the resulting Drive link back onto the file field, so later steps — an email, a Salesforce record — can reference it. The link becomes available as the file field's `publicurl` value, for example `{{ step_1.tfa_5.publicurl }}`.
5. Save and submit a test response.

### Google Drive limits

- Reading files from Drive is not supported.
- Every upload creates a new file. Duplicate names are allowed to coexist in the same folder, and existing files are never replaced.
- Shared drives are not supported; upload to a folder in the connected user's own Drive.
- If the respondent leaves the file field blank, the upload is skipped and the run continues — this is not treated as an error, provided the step is configured against the file upload field itself. Mark the file field as required if a file is always expected.
- If the step is missing the file's name or content, the run stops with an error, because that is a configuration problem rather than a runtime one.

## Microsoft OneDrive

### What OneDrive can do

OneDrive in FormAssembly is a **write-only file destination**, the OneDrive equivalent of the Google Drive connector: it uploads files from a form's file upload field, a generated document, or a signed document into a OneDrive folder. OneDrive cannot read files or prefill a form.

The destination is a folder path relative to your OneDrive root, such as `/Submissions/2026`. Missing folders in the path are created as needed, and an empty path uploads to the root.

Setup follows the same pattern as Google Drive: ask Fai to add the step, tell Fai which Microsoft connection to use, and ask Fai which file to send, which folder to use, and to save the returned link back onto the file field.

### OneDrive limits

- Reading files from OneDrive is not supported.
- Files larger than 4 MB cannot be uploaded to OneDrive through FormAssembly. Restrict your file upload field's size limit accordingly.
- Characters that OneDrive does not allow in file names (`/ \ : * ? " < > |`) are replaced with underscores.
- If a file with the same name already exists in the same folder, it is replaced. Renaming to avoid a clash applies only to folders.
- A blank file field is handled the same way as in Google Drive: the upload is skipped and the run continues. Mark the file field as required if a file is always expected.
- If the step is missing the file's name or content, the run stops with an error.
- SharePoint document libraries and shared drives are not supported.

## Box

### What Box can do

Box in FormAssembly is a **write-only file destination**: it uploads files from a form's file upload field, a generated document, or a signed document into a folder in the connected Box account and returns the file's Box link. Box cannot read, list, or delete files through FormAssembly. Box is an account add-on, so the step is available only when your plan includes it or your account has bought it.

The destination is a folder path relative to the Box root, such as `/Submissions/2026`. FormAssembly resolves each segment in turn and creates any folder that does not already exist. An empty path uploads to the root.

Setup follows the same pattern as Google Drive: ask Fai to add the step, tell Fai which Box connection to use, and ask Fai which file to send, which folder path to use, and to save the returned link back onto the file field. The link FormAssembly returns is the Box web app link for the file, which honors the folder's own sharing settings — uploading a file does not make it publicly accessible.

### Box limits

- Reading, listing, and deleting files are not supported.
- If a file with the same name already exists in the folder, FormAssembly uploads the new file under a numbered name such as `report (1).pdf` rather than replacing the existing file or adding a new version. After 20 attempts at a unique name, the run stops with an error.
- Box detects the file type from the file itself, so the file's recorded type is not sent.
- A blank file field behaves as it does for Google Drive: the upload is skipped and the run continues.
- If the step is missing the file's name or content, the run stops with an error.
- Browsing Box folders from the builder is not available; give Fai the folder path.

## Dropbox

### What Dropbox can do

Dropbox in FormAssembly is a **write-only file destination**: it uploads files from a form's file upload field, a generated document, or a signed document into a Dropbox folder and returns a shared link to the uploaded file. Dropbox cannot read, list, or delete files through FormAssembly. Dropbox is an account add-on, so the step is available only when your plan includes it or your account has bought it.

The destination is a folder path relative to the Dropbox root (or to the app folder, if your Dropbox app is scoped that way), such as `/Submissions/2026`. FormAssembly creates the destination folder, including any missing parent folders, when it does not already exist.

Setup follows the same pattern as Google Drive: ask Fai to add the step, tell Fai which Dropbox connection to use, and ask Fai which file to send, which folder path to use, and to save the returned shared link back onto the file field.

### Dropbox limits

- Reading, listing, and deleting files are not supported.
- If a file with the same name already exists, Dropbox stores the new file under a numbered name such as `report (1).pdf` rather than overwriting the existing file.
- The shared link uses your account's or team's default visibility. Link settings such as audience, password, and expiry cannot be set from FormAssembly.
- If a Dropbox team policy forbids shared links, or the account's email is unverified, the step fails with an error rather than returning a different kind of link.
- Folder paths must not contain `\ : * ? " < > |`; Dropbox rejects them and the run stops with an error.
- A blank file field behaves as it does for Google Drive: the upload is skipped and the run continues.
- If the step is missing the file's name or content, the run stops with an error.

## How file upload fields reach a storage connector

Respondents upload files directly from their browser to FormAssembly's secure storage while filling the form; the file itself is never pasted into the submission. When the submission is validated, the file is confirmed and attached to that run, so any Google Drive, OneDrive, Box, or Dropbox action in the same workflow always sees a complete, stored file. The same storage steps can also send a document generation step's PDF or an e-signature step's signed PDF.

Each file upload field gives you these values:

- **name** — the original filename.
- **size** — the file size in bytes.
- **mimetype** — the file type.
- **content** — the file itself, which is what the storage connector uploads.
- **publicurl** and **privateurl** — empty until a storage step writes a URL back to them.

The upload size cap for a form field is 50 MB, and file types are checked against the field's allowed types at upload time. A file upload field holds one file. Several files come from a file upload field inside a repeating section, and each row's file is uploaded separately.

## Tips & Troubleshooting

- **New rows are landing in the wrong columns.** The order Fai configured determines column order. If you asked Fai to add, remove, or reorder columns after the sheet already had data, restore the original order or start a new tab.
- **My existing spreadsheet doesn't appear in the list.** FormAssembly only lists spreadsheets it created for you, and picking a pre-existing spreadsheet through the Google file picker is not yet available. Create the destination spreadsheet from FormAssembly, and copy existing data into it if you need it there.
- **The run stopped with an error mentioning the spreadsheet or tab.** The target was renamed, moved to the trash, or deleted after the step was configured. Ask Fai to point the step at a spreadsheet and tab that exist.
- **A value I expected as text became a number, date, or formula.** Google Sheets reads each appended value the way it reads something typed into a cell, so an answer such as `=total` or `01/02` is interpreted rather than stored literally.
- **Saving the workflow is refused because Box or Dropbox is not available.** Box and Dropbox are account add-ons. Add the add-on to your account, or remove the step, then save again. See **Plans & Billing**.
- **I want to prefill a form from a spreadsheet.** Google Sheets and Excel Online only send data out. Use a dynamic lookup field if respondents need to search spreadsheet rows and pick one.
- **A lookup field returns nothing in Excel Online.** The search text is matched against the first column only. Move the searchable value into the first column of the range, and check that each filter field is pointed at the column you intend.
- **A lookup field shows an error instead of results.** If Google Sheets or Excel Online returns a reply FormAssembly cannot read, the lookup fails rather than showing empty or wrong matches. Check that the spreadsheet and sheet still exist and that the connection is still authorized.
- **Only 100 lookup results appear.** Lookup results are capped at 100 for display. Add filter fields, or ask respondents to type more characters, to narrow the list.
- **The same file was uploaded twice to Drive.** Google Drive allows duplicate names and every upload creates a new file. Ask Fai to include a unique value — a submission ID or timestamp — in the file name if you need distinct names.
- **Files are landing in a new Drive folder instead of the one I made.** FormAssembly can see only folders it created itself, so it creates its own folder beside yours. Point later steps at the folder FormAssembly created, or move its contents in Google Drive.
- **A OneDrive upload failed for a large file.** OneDrive uploads through FormAssembly are limited to 4 MB. Use Google Drive, Box, or Dropbox for larger files, or lower the field's size limit and tell respondents.
- **A Box or Dropbox file got a numbered name.** Both services rename rather than overwrite when a folder already holds that name. Include a unique value in the file name if the numbering is a problem.
- **A Dropbox upload failed at the sharing step.** The shared link is part of the result, so a team policy that blocks shared links, or an unverified account email, fails the step. Resolve the policy or verify the account in Dropbox.
- **The storage link is empty in a later step or email.** Ask Fai to write the returned file URL back onto the file field. Without that, `publicurl` stays empty.