Google Sheets Nodes
Read a range of a spreadsheet, append rows to a log, and overwrite a fixed range, from your pipelines.
- Needs
- A Google Sheets connection
- Operations
- Read Range · Append Rows · Update Range
- Defaults
- Header row on, 1,000 rows, values written raw
- Limits
- 10,000 rows per read or write
Google Sheets nodes read and write one spreadsheet, the one their Google Sheets connection names. Use them for shift logs, lookup tables and status boards.
Configuration Quick Reference
| Field | What you choose | Details |
|---|---|---|
| Parameters | Connection, Function, Function Parameters, Timeout Override | Select the connection profile and function, fill the function's parameters (expressions allowed), and optionally override the timeout. |
| Settings | Description, Timeout (seconds), Retry on Timeout, Retry on Fail, On Error | Node description, maximum execution time, retry behaviour and error handling. All default to the pipeline's values. |
Settings Tab
The Settings tab is the same for all three nodes: description, timeout, retries and the error strategy. Read Range is safe to retry. Update Range is safe to retry: the same values end in the same cells. Append Rows is not: if a request timed out after it reached Google, a retry can add the rows a second time.
Spreadsheet Operations
Google Sheets Read Range Node


Google Sheets Read Range Node
Read one range. With Header Row on, each data row is an object keyed by the header row's text; off, the cells come back as rows of values. At most Max Rows data rows are read: the limit is written into the range sent to Google, so a whole-column range never reads the whole sheet.
Output Structure
With Header Row on:
{
"result": {
"range": "'Shift Log'!A1:E1002",
"rows": [
{ "Date": "2026-11-02", "Shift": "A", "Line": "BC-41", "Good": 1840, "Scrap": 12 },
{ "Date": "2026-11-02", "Shift": "B", "Line": "BC-41", "Good": 1795, "Scrap": null }
],
"rowCount": 2,
"truncated": false
}
}
With Header Row off:
{
"result": {
"range": "'Shift Log'!A2:E1002",
"values": [["2026-11-02", "A", "BC-41", 1840, 12], ["2026-11-02", "B", "BC-41", 1795, null]],
"rowCount": 2,
"truncated": false
}
}
| Field | Type | Description |
|---|---|---|
result.range | string | The range Google read, with the row limit written in |
result.rows | array | One object per data row, keyed by the header row's text. A cell Google left out (trailing empty cells) is null. Present when Header Row is on |
result.values | array | The cells as rows of values, each padded with null to the widest row. Present when Header Row is off |
result.rowCount | number | How many data rows were delivered |
result.truncated | boolean | true when the range held more than Max Rows data rows; the rest were not read |
With Values As unformatted (the default), numbers and booleans are JSON values and dates are the text the sheet shows. Sheets has no timestamp type, so the node adds none.
Google Sheets Append Rows Node


Google Sheets Append Rows Node
Add rows below the table Google finds in the range. The rows are one request, written whole or not at all. Appends are buffered through an outage and replayed in order; a replay after a timeout may add the rows twice.
Output Structure
{
"result": {
"tableRange": "'Shift Log'!A1:E3",
"updatedRange": "'Shift Log'!A4:E4",
"updatedRows": 1,
"updatedColumns": 5,
"updatedCells": 5
}
}
| Field | Type | Description |
|---|---|---|
result.tableRange | string | The table Google found before appending. Present only when it found one |
result.updatedRange | string | Where the rows were written |
result.updatedRows | number | How many rows were written |
result.updatedColumns | number | How many columns were written |
result.updatedCells | number | How many cells were written |
Google Sheets Update Range Node


Google Sheets Update Range Node
Overwrite the cells of a fixed range. A null cell is left as it is; "" clears it. Rows larger than an explicit range are refused before anything is sent.
Output Structure
{
"result": {
"updatedRange": "'Status'!B2:B4",
"updatedRows": 3,
"updatedColumns": 1,
"updatedCells": 3
}
}
| Field | Type | Description |
|---|---|---|
result.updatedRange | string | The range that was written |
result.updatedRows | number | How many rows had a cell written |
result.updatedColumns | number | How many columns had a cell written |
result.updatedCells | number | How many cells were written |
Metadata
Every Google Sheets node also carries facts about the call in _metadata:
| Field | Description |
|---|---|
_metadata.method | The operation that ran, such as googlesheets.appendRows |
_metadata.protocol | Always googlesheets |
_metadata.connectionId | The connection the call ran on |
_metadata.spreadsheetId | The spreadsheet the connection reads and writes |
_metadata.range | The range written, as sent to Google (Append Rows and Update Range; Read Range reports it as result.range) |