Sign In

Spreadsheet Integrations

Log form submissions as rows in Google Sheets and Excel Online from your Buildorado workflows.

Spreadsheet integrations are the simplest way to collect and organize structured data from your Buildorado forms. Every form submission can append a new row to a Google Sheet or Excel Online workbook, with each form field mapped to a column. This gives your team a familiar interface for reviewing, filtering, and analyzing submissions without learning a new tool. Both integrations authenticate via OAuth 2.0 and store credentials with AES-256 encryption through AWS KMS.

Google Sheets

Google Sheets is the most popular spreadsheet integration in Buildorado. Append form submissions as rows, read existing data, and build live dashboards that update in real time.

Setting Up Google Sheets

  1. Navigate to Settings > Integrations in your Buildorado dashboard.
  2. Find Google Sheets and click Connect.
  3. Sign in with your Google account in the authorization popup.
  4. Grant the following permissions:
    • spreadsheets -- Read and write Google Sheets data
    • userinfo.email -- Identify the connected account
    • userinfo.profile -- Read your profile
  5. Once authorized, Google Sheets shows as Connected with your Google account email.

Both personal Google accounts and Google Workspace accounts are supported. For Workspace accounts, your administrator may need to approve the Buildorado app.

Operations

appendRow

Add a new row of data to a Google Sheet. This is the most commonly used operation -- it logs every form submission as a new row.

FieldTypeRequiredDescription
spreadsheetIdstringYesThe ID of the Google Sheet
sheetNamestringNoName of the specific sheet tab (defaults to the first sheet)
rangestringNoCell range to append to (e.g., A:Z). Defaults to auto-detect
valuesJSONNoColumn mapping as JSON object (e.g., {"Name": "{{name}}", "Email": "{{email}}"}). Leave empty to auto-send all form fields
valueInputOptionselectNoRAW (store as-is) or USER_ENTERED (parse as if typed by user). Default: USER_ENTERED

Output:

FieldTypeDescription
spreadsheetIdstringThe spreadsheet ID
updatedRangestringThe cell range that was updated (e.g., Sheet1!A5:F5)
updatedRowsnumberNumber of rows updated (typically 1)
updatedColumnsnumberNumber of columns in the appended row
updatedCellsnumberTotal number of cells written

getSpreadsheet

Retrieve metadata about a spreadsheet, including sheet names and properties.

FieldTypeRequiredDescription
spreadsheetIdstringYesThe ID of the Google Sheet

Output:

FieldTypeDescription
spreadsheetIdstringThe spreadsheet ID
titlestringSpreadsheet title
sheetsstringSheet names and properties as JSON

readRange

Read data from a specific range of cells.

FieldTypeRequiredDescription
spreadsheetIdstringYesThe ID of the Google Sheet
rangestringYesCell range to read (e.g., Sheet1!A1:D10)

Output:

FieldTypeDescription
rangestringThe range that was read
majorDimensionstringMajor dimension (ROWS or COLUMNS)
valuesstringCell values as JSON

Finding the Spreadsheet ID

The spreadsheet ID is the long string of characters in the Google Sheets URL:

https://docs.google.com/spreadsheets/d/SPREADSHEET_ID_HERE/edit

Copy the SPREADSHEET_ID_HERE portion and use it as the spreadsheetId value in your action node.

Mapping Form Fields to Columns

You can map form fields to columns in two ways:

Option A: Column mapping (recommended)

Use the values field with a JSON object that maps column headers to form field values:

{"Name": "{{form.fullName}}", "Email": "{{form.email}}", "Phone": "{{form.phone}}", "Message": "{{form.message}}", "Submitted At": "{{submission.createdAt}}"}

Buildorado matches the keys to your column headers and creates headers automatically if they do not exist.

Option B: Auto-send all fields

Leave the values field empty to automatically send all form fields. Buildorado creates headers from field keys on the first submission.

Value Input Options

The valueInputOption setting controls how Google Sheets interprets the values you send:

OptionBehaviorBest For
USER_ENTEREDParses values as if typed into the sheet. Numbers become numbers, dates become dates, formulas executeMost use cases. Dates and numbers display correctly
RAWStores values exactly as provided with no parsing. Everything is treated as a stringPreserving exact formatting, preventing formula injection

For most workflows, USER_ENTERED is the right choice. It ensures that numeric form fields (like budget or quantity) are stored as numbers in the sheet, making them usable in formulas and charts.

Security note: If your form collects user-provided text that might contain characters like =, +, or - at the start, use RAW to prevent unintended formula execution. Alternatively, prefix text values with a single quote character.

Common Pattern: Log Every Submission as a Row

The most popular Google Sheets workflow is a simple form-to-spreadsheet pipeline:

[Form: Contact Request]
  -- [Google Sheets: appendRow]
    spreadsheetId: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms"
    sheetName: "Submissions"
    values: {"Name": "{{form.name}}", "Email": "{{form.email}}", "Phone": "{{form.phone}}", "Message": "{{form.message}}", "Submitted At": "{{submission.createdAt}}"}
    valueInputOption: "USER_ENTERED"

Set up the spreadsheet with column headers in row 1 (Name, Email, Phone, Message, Submitted At), and every form submission will appear as a new row below the headers.

Advanced Patterns

Separate sheets by form type:

Use different sheetName values to route submissions to different tabs within the same spreadsheet:

[Form: Multi-purpose]
  -- Branch: formType
    -- "Support" -- [Google Sheets: appendRow to "Support Tickets" sheet]
    -- "Sales" -- [Google Sheets: appendRow to "Sales Leads" sheet]
    -- "Feedback" -- [Google Sheets: appendRow to "Feedback" sheet]

Read data for validation:

Use readRange to check existing data before appending. For example, verify that an email address has not already been submitted:

[Form: Registration]
  -- [Google Sheets: readRange "Registrations!B:B"]
  -- [Branch: Check if {{form.email}} exists in column B]
    -- not found -- [Google Sheets: appendRow]
    -- found -- [Email: "You are already registered"]

Include upstream node outputs:

Combine form data with outputs from other workflow nodes:

{"Name": "{{form.name}}", "Email": "{{form.email}}", "Payment ID": "{{stripe_1.paymentId}}", "Amount": "{{stripe_1.amount}}", "Lead Score": "{{ai_1.leadScore}}", "Submitted At": "{{submission.createdAt}}"}

Tips for Google Sheets

  • Create column headers in row 1 before connecting the workflow. The appendRow operation appends after the last row with data, so headers ensure proper alignment.
  • Google Sheets has a limit of 10 million cells per spreadsheet. For very high-volume forms, consider creating a new sheet tab monthly or using a dedicated database.
  • The connected Google account must have Edit access to the spreadsheet. Viewer or Commenter access will cause the operation to fail.
  • Google Sheets API has a quota of 60 requests per minute. Buildorado batches writes when possible to stay within limits.
  • Use USER_ENTERED for dates so Google Sheets recognizes them as date values, enabling date-based filtering and sorting.

Excel Online

Excel Online integration works with Microsoft 365 workbooks stored in OneDrive or SharePoint. It follows the same append-row pattern as Google Sheets.

Setting Up Excel Online

  1. Navigate to Settings > Integrations and click Connect next to Excel Online.
  2. Sign in with your Microsoft 365 account in the authorization popup.
  3. Grant the following permissions:
    • User.Read -- Read your profile
    • Files.ReadWrite.All -- Read and write Excel workbooks
    • offline_access -- Maintain the connection
  4. Once authorized, Excel Online shows as Connected.

Operations

appendRow

Append a row to an Excel table.

FieldTypeRequiredDescription
workbookIdstringYesOneDrive item ID of the Excel workbook
tableIdOrNamestringYesTable ID or name within the workbook
valuesJSONYesRow values as a 2D array (e.g., [["val1","val2"]])

Output:

FieldTypeDescription
indexnumberThe row index of the appended row
valuesstringThe values that were written as JSON

readRange

Read data from a specific range in an Excel worksheet.

FieldTypeRequiredDescription
workbookIdstringYesOneDrive item ID of the Excel workbook
sheetNamestringYesWorksheet name
rangestringYesA1-notation range (e.g., A1:D10)

Output:

FieldTypeDescription
addressstringThe cell range address
valuesstringCell values as JSON
rowCountnumberNumber of rows
columnCountnumberNumber of columns

getWorkbook

Get workbook metadata and list of worksheets.

FieldTypeRequiredDescription
workbookIdstringYesOneDrive item ID of the Excel workbook

Output:

FieldTypeDescription
worksheetsstringWorksheets as JSON

Finding the Workbook ID

For workbooks stored in OneDrive, the workbook ID is available through the OneDrive API. The simplest approach:

  1. Open the Excel workbook in your browser.
  2. In Buildorado, use the file picker in the Excel Online action node to browse and select your workbook.

For workbooks in SharePoint, you may need the SharePoint site ID and the file's drive item ID.

Differences from Google Sheets

FeatureGoogle SheetsExcel Online
AuthenticationGoogle OAuthMicrosoft OAuth
File locationGoogle DriveOneDrive or SharePoint
API rate limits60 req/minMicrosoft Graph limits (varies by plan)
Cell limit10 million cells17 billion cells (desktop), varies online
Formula syntaxGoogle Sheets formulasExcel formulas
Read operationsreadRangereadRange
Real-time collaborationYesYes

Tips for Excel Online

  • The workbook must be stored in OneDrive or SharePoint. Local Excel files on your computer are not accessible through the integration.
  • Excel Online workbooks in SharePoint inherit SharePoint permissions. The connected user must have Edit access.
  • For large workbooks with many sheets, specify the sheetName explicitly to avoid reading from the wrong sheet.
  • Microsoft Graph API rate limits apply. High-volume workflows may need throttling.

Best Practices for Spreadsheet Integrations

Set Up Headers First

Always create column headers in row 1 of your spreadsheet before connecting the workflow. This ensures that appended rows align correctly with your columns and makes the spreadsheet human-readable.

Include Metadata Columns

Add a "Submitted At" column with the {{submission.createdAt}} variable and a "Submission ID" column with {{submission.id}}. This creates an audit trail and makes it easy to cross-reference spreadsheet rows with Buildorado execution logs.

Error Handling

Spreadsheet operations can fail if the spreadsheet is deleted, the connected account loses access, or API limits are exceeded. Attach an error handler node to your spreadsheet action:

[Google Sheets: appendRow]
  -- error -- [Slack: "#ops Spreadsheet logging failed for submission {{submission.id}}"]

Combine with Other Actions

Spreadsheet logging works well as a secondary action alongside primary integrations:

[Form: Lead Capture]
  -- [Salesforce: createLead]
  -- [Google Sheets: appendRow]  // backup log
  -- [Slack: Notify sales team]

This ensures you have a spreadsheet backup of all submissions even if your primary CRM is the system of record.

On this page

Spreadsheet Integrations | Buildorado