Search all guides

Reference · Tools

Google Sheets integration

Manage rows and sheet tabs within Google Sheets spreadsheets, including reading, appending, updating, clearing, and deleting data.

Action Data & Storage v1

The Google Sheets node lets you read, write, append, update, and delete rows inside any Google Sheets spreadsheet, as well as create or delete entire spreadsheets and tabs. Rows are surfaced as key-value objects keyed on your header row, making it straightforward to build things like a form-submission logger that writes incoming data to the right columns automatically. Authenticate with either OAuth2 or a Google service account.

Works as
Action
Tool name
google_sheets
Operations
8 — Append Row , Append or Update Row , Clear , Create , Delete and 3 more
Parameters
42
Outputs
Output, Error
Credentials
Google Sheets OAuth2 , Google Service Account
Official docs
Google Sheets docs developers.google.com

What you can build with Google Sheets

  • Append the incoming items as new rows to a Google Sheet.
  • Read all rows from a sheet and filter them by a column value.
  • Update rows in a sheet where a column matches a given value.
  • Upsert rows into a sheet by matching an ID column.
  • Create a new spreadsheet with a named sheet tab.

Overview

Read, write, append, update, and manage data in Google Sheets spreadsheets. The node works at two levels: the Sheet resource operates on a single tab inside a spreadsheet — appending rows, upserting, updating matched rows, reading rows with filters, clearing ranges, deleting rows or columns, and creating or deleting tabs — while the Spreadsheet resource creates and deletes whole spreadsheets.

Rows are exchanged as key-value objects keyed on the sheet’s header row, so incoming item fields can be mapped onto columns automatically. Authentication is available via OAuth2 or a service account.

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Google Sheets OAuth2, Google Service Account credentials. See the Credentials Guide for setup instructions.

Configure the one that matches the Authentication parameter — OAuth2 or service account, not both.

Resources

ResourceValue
Sheetsheet
Spreadsheetspreadsheet

Operations

OperationValueDescription
Append RowappendAppend a new row to a sheet
Append or Update RowappendOrUpdateUpsert: update matching rows or append if no match
ClearclearClear rows, columns, or entire sheet data
CreatecreateCreate a new sheet tab or spreadsheet
DeletedeleteDelete a sheet tab or spreadsheet
Delete Rows or ColumnsdeleteRowsOrColumnsDelete specific rows or columns from a sheet
Get RowsgetRowsRead rows from a sheet, optionally filtered
Update RowupdateUpdate rows matching specified column criteria

Create and Delete are offered for both resources; every other operation belongs to the Sheet resource.

Parameters

Append Row takes no parameters of its own — see All Operations. Append or Update Row takes no parameters of its own — see All Operations. Clear takes no parameters of its own — see All Operations. Delete Rows or Columns takes no parameters of its own — see All Operations. Get Rows takes no parameters of its own — see All Operations. Update Row takes no parameters of its own — see All Operations.

Sheet: Append Row

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
Sheet NamestringYesSheet1The name of the sheet tab to operate on.
Data ModeoptionsNoautoMapInputDataHow to map incoming item data to sheet columns.
Options: autoMapInputData (use item JSON fields; names must match column headers), defineBelow (manually specify column name/value pairs), nothing (do not append any row)
Fields to SendfixedCollectionNo{}(shown when Data Mode is defineBelow)
— Column NamestringNo—The sheet column header name.
— Field ValuestringNo—The value to write into this column.
Options (appendOptions)collectionNo{}
Options: USER_ENTERED
— Cell FormatoptionsNoUSER_ENTEREDHow values are interpreted when written.
Options: USER_ENTERED (interpret values as if typed by the user (formulas evaluated, dates parsed)), RAW (store values exactly as provided without parsing)
— Header RownumberNo1The 1-based row index that contains column headers.
— Use Google Sheets Append APIbooleanNofalseUse the native Google Sheets append endpoint instead of a targeted PUT. Ensures no data is overwritten.

Sheet: Append or Update Row

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
Sheet NamestringYesSheet1The name of the sheet tab to operate on.
Matching ColumnsstringYes—Comma-separated column names used to identify matching rows (e.g. “email” or “id,region”).
Data ModeoptionsNoautoMapInputDataHow to map incoming item data to sheet columns.
Options: autoMapInputData, defineBelow, nothing
Fields to SendfixedCollectionNo{}(shown when Data Mode is defineBelow)
— Column NamestringNo—
— Field ValuestringNo—
Options (appendOrUpdateOptions)collectionNo{}
Options: USER_ENTERED
— Cell FormatoptionsNoUSER_ENTERED
Options: USER_ENTERED, RAW
— Header RownumberNo1
— Data Start RownumberNo2First row that contains data (after the header).
— Use Google Sheets Append APIbooleanNofalse

Sheet: Clear

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
Sheet NamestringYesSheet1The name of the sheet tab to operate on.
ClearoptionsNowholeSheetWhat to clear in the sheet.
Options: wholeSheet, specificRows, specificColumns, specificRange
Keep First RowbooleanNofalsePreserve the header row (row 1) when clearing the whole sheet. (shown when Clear is wholeSheet)
Start Row NumbernumberNo1The 1-based number of the first row to act on (the first row cleared, or the first row deleted). (shown when Clear is specificRows)
Number of Rows to ClearnumberNo1(shown when Clear is specificRows)
Start ColumnstringNoAThe letter of the first column to act on (e.g. A, B, C) — the first column cleared, or the first column deleted. (shown when Clear is specificColumns)
Number of Columns to ClearnumberNo1(shown when Clear is specificColumns)
RangestringYesA:FA1 notation range to clear (e.g. “A1:D10” or “Sheet1!A1:D10”). (shown when Clear is specificRange)

Sheet: Create

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
TitlestringYesNew SheetName for the new sheet tab or spreadsheet.
Options (sheetCreateOptions)collectionNo{}
— HiddenbooleanNofalseWhether the sheet is hidden in the UI.
— Right to LeftbooleanNofalseWhether the sheet uses RTL text direction.
— Sheet IDnumberNo0Numeric sheet ID. Cannot be changed once set.
— Sheet IndexnumberNo0Position of the sheet tab within the spreadsheet (0-based).
— Tab ColorstringNo—Hex color for the sheet tab (e.g. #FF0000).

Sheet: Delete

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
Sheet NamestringYesSheet1The name of the sheet tab to operate on.

Sheet: Delete Rows or Columns

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
Sheet NamestringYesSheet1The name of the sheet tab to operate on.
To DeleteoptionsNorowsWhether to delete rows or columns.
Options: rows, columns
Start Row NumbernumberNo2The 1-based number of the first row to act on (the first row cleared, or the first row deleted). (shown when To Delete is rows)
Number of Rows to DeletenumberNo1(shown when To Delete is rows)
Start ColumnstringNoAThe letter of the first column to act on (e.g. A, B, C) — the first column cleared, or the first column deleted. (shown when To Delete is columns)
Number of Columns to DeletenumberNo1(shown when To Delete is columns)

Sheet: Get Rows

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
Sheet NamestringYesSheet1The name of the sheet tab to operate on.
FiltersfixedCollectionNo{}
— ColumnstringNo—The column header name to filter by.
— ValuestringNo—The value the column must equal for a row to be included.
Combine FiltersoptionsNoANDHow multiple filter conditions are combined.
Options: AND (all filter conditions must match), OR (at least one filter condition must match)
Return AllbooleanNofalseWhether to return all matching rows or only up to the limit.
LimitnumberNo50Maximum number of rows to return. (shown when Return All is false)
Options (getRowsOptions)collectionNo{}
Options: FORMATTED_VALUE
— Output FormattingoptionsNoFORMATTED_VALUEHow cell values are rendered in the output.
Options: FORMATTED_VALUE (values as displayed in the sheet (with formatting applied)), UNFORMATTED_VALUE (raw computed values without display formatting), FORMULA (return the formula string instead of the calculated value)
— Header RownumberNo11-based row index containing column headers.
— Data Start RownumberNo21-based index of the first data row (after headers).
— RangestringNo—Limit reading to this A1-notation range (optional). If omitted, reads the whole sheet.

Sheet: Update Row

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).
Sheet NamestringYesSheet1The name of the sheet tab to operate on.
Matching ColumnsstringYes—Comma-separated column names used to identify matching rows (e.g. “email” or “id,region”).
Data ModeoptionsNoautoMapInputDataHow to map incoming item data to sheet columns.
Options: autoMapInputData, defineBelow, nothing
Fields to SendfixedCollectionNo{}(shown when Data Mode is defineBelow)
— Column NamestringNo—
— Field ValuestringNo—
Options (updateOptions)collectionNo{}
Options: USER_ENTERED
— Cell FormatoptionsNoUSER_ENTERED
Options: USER_ENTERED, RAW
— Header RownumberNo1
— Data Start RownumberNo2

Spreadsheet: Create

ParameterTypeRequiredDefaultDescription
TitlestringNo—Name for the new sheet tab or spreadsheet.
SheetsfixedCollectionNo{}
— TitlestringNo—Name of the sheet tab.
— HiddenbooleanNofalseWhether the sheet is hidden in the UI.
Options (spreadsheetCreateOptions)collectionNo{}
— LocalestringNo—Spreadsheet locale in ISO format (e.g. en_US).
— Recalculation IntervaloptionsNo—How often volatile functions are recalculated.
Options: leave empty for the default, ON_CHANGE, MINUTE, HOUR

Spreadsheet: Delete

ParameterTypeRequiredDefaultDescription
Spreadsheet IDstringYes—The ID of the Google Sheets spreadsheet (found in its URL).

All Operations

ParameterTypeRequiredDefaultDescription
AuthenticationoptionsNooAuth2Authentication method to use.
Options: oAuth2, serviceAccount
Google AccountcredentialNo—Connect or select your Google account. (shown when Authentication is oAuth2)
Service Account EmailstringYes—The email address of the Google service account. (shown when Authentication is serviceAccount)
Private KeystringYes—The private key from the service account JSON key file. (shown when Authentication is serviceAccount)
Max ConcurrencynumberNo5Maximum number of items to process in parallel.

Output Data

The result replaces the item’s JSON — the incoming fields do not pass through.

Get Rows fans out: one output item per matching row. Each row is an object keyed on the header row, plus row_number — the 1-based position of the row in the sheet, which you need if you want to address that row again later:

{
  "Name": "Ada Lovelace",
  "Email": "ada@example.com",
  "Status": "Active",
  "row_number": 4
}

Every other operation produces exactly one item:

OperationOutput
sheet / appendsuccess: true and appended — 1, or 0 when Data Mode is nothing.
sheet / appendOrUpdatesuccess: true, operation (update or append, telling you which branch ran) and rowsAffected.
sheet / updatesuccess: true, updated (how many rows matched) and rows (their row numbers). When nothing matched: updated: 0 and a message.
sheet / clearsuccess: true and cleared — the A1 range that was cleared.
sheet / createsuccess: true, spreadsheetId and the new tab’s properties.
sheet / deletesuccess: true, spreadsheetId and deletedSheetId.
sheet / deleteRowsOrColumnssuccess: true, spreadsheetId, dimension (rows or columns) and the startIndex / endIndex that were removed.
spreadsheet / createThe new spreadsheet resource as Google returned it, including its spreadsheetId, spreadsheetUrl and sheets.
spreadsheet / deletesuccess: true and deletedSpreadsheetId.

Example Configuration

Append a row using the incoming item’s fields:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "append",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "sheetName": "Sheet1",
    "dataMode": "autoMapInputData",
    "appendOptions": {
      "headerRow": 1,
      "cellFormat": "USER_ENTERED"
    }
  }
}

Append a row with explicit column mapping:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "append",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "sheetName": "Sheet1",
    "dataMode": "defineBelow",
    "fieldsUi": {
      "fieldValues": [
        { "fieldId": "Name", "fieldValue": "{{ $json.fullName }}" },
        { "fieldId": "Email", "fieldValue": "{{ $json.email }}" }
      ]
    }
  }
}

Update rows matched on a column:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "update",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "sheetName": "Sheet1",
    "matchingColumns": "email",
    "dataMode": "autoMapInputData",
    "updateOptions": {
      "headerRow": 1,
      "dataStartRow": 2
    }
  }
}

Upsert — update if a row matches, otherwise append:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "appendOrUpdate",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "sheetName": "Sheet1",
    "matchingColumns": "id",
    "dataMode": "autoMapInputData",
    "appendOrUpdateOptions": {
      "headerRow": 1,
      "dataStartRow": 2
    }
  }
}

Read filtered rows:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "getRows",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "sheetName": "Sheet1",
    "filtersUI": {
      "values": [
        { "lookupColumn": "Status", "lookupValue": "Active" }
      ]
    },
    "combineFilters": "AND",
    "returnAll": false,
    "limit": 100
  }
}

Clear a block of rows:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "clear",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "sheetName": "Sheet1",
    "clearMode": "specificRows",
    "startRow": 5,
    "rowsToDelete": 10
  }
}

Delete rows permanently:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "deleteRowsOrColumns",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "sheetName": "Sheet1",
    "toDelete": "rows",
    "startRow": 2,
    "numberToDelete": 5
  }
}

Create a new tab in an existing spreadsheet:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "sheet",
    "operation": "create",
    "spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "title": "New Data Sheet",
    "sheetCreateOptions": {
      "hidden": false,
      "index": 1,
      "tabColor": "#4285f4"
    }
  }
}

Create a whole new spreadsheet:

{
  "type": "google_sheets",
  "parameters": {
    "resource": "spreadsheet",
    "operation": "create",
    "title": "My New Spreadsheet",
    "sheetsUi": {
      "sheetValues": [
        { "title": "Data", "hidden": false },
        { "title": "Summary", "hidden": false }
      ]
    },
    "spreadsheetCreateOptions": {
      "locale": "en_US",
      "autoRecalc": "ON_CHANGE"
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Google Sheets reads, writes, appends, updates, clears, and deletes data in spreadsheets and their tabs. This tool is ideal for managing structured data, such as for reporting or data collection, especially when row-level operations or sheet creation are needed. It produces row data as key-value objects or confirmations of successful operations.

  • Sheet Name is the tab, not the spreadsheet title. The one exception is Sheet → Create, where the Sheet Name (within spreadsheet) field holds the target spreadsheet ID and Title holds the new tab’s name.
  • Auto-mapping matches on header text. With Data Mode autoMapInputData, an item property is written to the column whose header has the same name; properties with no matching header are ignored. Use defineBelow when the names differ.
  • Header Row and Data Start Row describe your layout. If your sheet has a title block above the headers, raise both numbers so the node reads the right row as headers and starts writing below them.
  • USER_ENTERED behaves like typing. Formulas evaluate and dates parse; switch Cell Format to RAW when a value such as a leading-zero code must be stored verbatim.
  • Matching Columns can name more than one column. All named columns must match for a row to be considered the same record.
  • Clear empties cells; Delete Rows or Columns removes them. Clearing leaves the grid the same size, deleting shifts everything below or to the right.
  • Get Rows returns row_number. Keep it if you plan to come back and change that exact row.
  • Get Rows fans out — each matching row becomes its own item, so downstream nodes process rows individually.

Frequently asked questions

How does the node know which column to write a value into?

When Data Mode is set to `autoMapInputData`, the node matches each incoming item property to a column by comparing the property name to the sheet's header row text — if the names match, the value lands in that column; if there's no matching header, the property is silently ignored. Switch to `defineBelow` when your item field names differ from your column headers so you can map them explicitly.

What's the difference between Clear and Delete Rows or Columns?

Clear empties the contents of a range but leaves the grid structure intact — the rows and columns still exist, just blank. Delete Rows or Columns physically removes them, shifting everything below (or to the right) up to fill the gap. Use Clear when you want to overwrite later; use Delete when the rows themselves should be gone.

My sheet has a title block above my actual headers. How do I stop the node from reading the wrong row?

Raise both the Header Row and Data Start Row parameters to match your layout. Header Row tells the node which row contains your column names, and Data Start Row tells it where actual data begins. If your headers are on row 3, for example, set Header Row to 3 and Data Start Row to 4.

Can I store a value like '007' or a leading-zero code without Sheets converting it to a number?

Yes — set Cell Format to `RAW` instead of the default `USER_ENTERED`. The `USER_ENTERED` mode behaves like typing into the cell directly, so Sheets will parse and reformat values (evaluating formulas, converting dates, stripping leading zeros). `RAW` sends the value verbatim with no interpretation.

If I use Get Rows and want to update specific rows later, how do I keep track of which row is which?

Get Rows includes a `row_number` field in every returned item, which corresponds to the row's actual position in the sheet. Preserve that field through your workflow — you can pass it back to an Update operation to target that exact row rather than matching on column values.

Build with Google Sheets

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Google Sheets OAuth2 credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.