Reads, writes, appends, searches, and creates Google Sheets spreadsheets. Supports reading a range of cells, appending new rows, updating existing cells, filtering rows with expressions, and creating new spreadsheets. Requires Google OAuth credentials from Settings → Integrations.
google_sheetsThe Google Sheets node connects to the Google Sheets API and lets workflows treat a spreadsheet as a lightweight database, a report destination, or a data source. It supports five actions: reading a range of cells into the workflow context, appending new rows at the end of a growing table, overwriting a specific cell range with new values, searching rows using a filter expression, and creating a brand-new spreadsheet.
Cells are addressed using A1 notation โ a column letter combined with a row number
(e.g. A1:D10 covers columns AโD, rows 1โ10). You can prefix the range with a
sheet tab name and an exclamation mark to target a specific tab
(e.g. Sales!A1:D10).
The spreadsheet is selected from a dropdown that lists all spreadsheets accessible through the connected Google account. Click the refresh button next to the picker to reload the list from Google Drive if a newly created spreadsheet is not shown.
| Field | Status | Description |
|---|---|---|
| Credential | Required | Google account credential from Settings → Integrations. |
| Spreadsheet | Required | Select a spreadsheet from the dropdown. The list is loaded from your connected Google Drive. Click the refresh button to reload the list if a newly created spreadsheet is missing. |
| Sheet Name | Optional | Name of the sheet tab to operate on. Defaults to the first sheet if left blank. |
| Action | Required |
read โ fetch a cell range.write โ overwrite a specific range.append โ add new rows at the end of the data.search โ filter rows using a Symfony ExpressionLanguage expression.create โ create a new spreadsheet in Google Drive.
|
| Range | Required for read/write | A1 notation range, e.g. A1:D10 or A:A for a full column. |
| Values | Required for append/write | A 2D array of values to write. Use {{ variable }} to reference a step output. For append, each inner array is one row, e.g. [["Alice", "30"], ["Bob", "25"]]. |
| Value Input Option | Optional |
RAW โ values are stored exactly as given.USER_ENTERED โ values are parsed as if typed by a user (formulas, dates, currency).Default: USER_ENTERED.
|
| Expression | Required for search |
A Symfony ExpressionLanguage expression evaluated once per row. Rows for which the expression returns true are included in the output.Available variables: • row โ the row as an associative array when Has Headers is enabled (keys are column names), or as a 0-indexed array otherwise.• rowIndex โ 0-based integer position of the row in the sheet.Example: row["Status"] == "active"
|
| Has Headers | Optional โ search only | When enabled, the first row of the sheet is treated as column names and each subsequent row is passed to the expression as an associative array keyed by column name. Default: enabled. |
| Title | Required for create | The name of the new spreadsheet to create. |
| Sheet Names | Optional โ create only | Comma-separated list of sheet tab names to create inside the new spreadsheet (e.g. Sales, Q1, Q2). If left blank, Google Sheets creates a single default sheet named "Sheet1". |
Output fields depend on the selected action. Fields that are not applicable to the chosen action are omitted or set to null.
| Field | Type | Description |
|---|---|---|
ok | boolean | Whether the action completed without errors. |
spreadsheet_id | string | The ID of the spreadsheet that was operated on. Also returned by create. |
spreadsheet_url | string | The browser URL of the spreadsheet. Returned by create. |
rows | array | 2D array of cell values (read mode) or matching rows (search mode). Each inner array is one row. |
row_count | number | Number of rows returned by a read action. |
matched_count | number | Number of rows matched by a search expression. |
total_rows | number | Total number of data rows evaluated during a search action (excluding the header row when Has Headers is enabled). |
updated_range | string | The actual A1 notation range that was updated (write/append). |
updated_rows | number | Number of rows written during a write or append action. |
created | boolean | true when the create action successfully created a new spreadsheet. |
append (not write) when adding new rows to a growing log or table โ it finds the first empty row automatically and will not overwrite existing data.USER_ENTERED if you want Google Sheets to interpret date strings, currency symbols, or formulas starting with =.search action evaluates your expression row by row using Symfony ExpressionLanguage. Enable Has Headers to access columns by name (e.g. row["Status"]) instead of by index (e.g. row[2]).create action creates a new spreadsheet in the root of the connected Google Drive. You can supply comma-separated sheet tab names in Sheet Names โ for example Leads, Archive creates two tabs.