Output Ports
| Port | Trigger | Description |
| success | Google Sheets API returned 2xx | Operation completed successfully. Response data is available in the node output object. |
| error | API error or network failure | The Sheets API returned an error, the OAuth2 token was invalid or expired, the spreadsheet was not found, or a permission error occurred. |
sheet/get Output
Returns an array of row objects. Each object is keyed by column header name. If ReturnFirstMatch is true, a single row object is returned instead of an array.
| Field | Type | Description |
rows | array | Array of row objects. Each row is a flat object with one key per column header. Values are strings (or typed values when ValueRender is UNFORMATTED_VALUE). |
rowCount | integer | Number of rows returned after applying filters. |
Example: sheet/get Output
Sheet with headers: Order ID, Customer, Amount, Status, Date
{
"rows": [
{
"Order ID": "ORD-2025-001",
"Customer": "Acme Corp",
"Amount": "1250.00",
"Status": "Pending",
"Date": "2025-05-20"
},
{
"Order ID": "ORD-2025-007",
"Customer": "Beta Ltd",
"Amount": "340.00",
"Status": "Pending",
"Date": "2025-05-22"
}
],
"rowCount": 2
}
Accessing row data downstream: If the node is named getPendingOrders, access the first row's customer name with {{ nodes.getPendingOrders.output.rows[0]["Customer"] }}. When using a Loop node to iterate over the rows array, each iteration provides the row object directly as the loop variable.
sheet/append Output
| Field | Type | Description |
updatedRange | string | The A1-notation range that was updated (e.g. Orders!A15:E15). Indicates which row was written. |
updatedRows | integer | Number of rows appended. Typically 1 for a single append operation. |
updatedColumns | integer | Number of columns written in the appended row. |
updatedCells | integer | Total number of cells written. |
Example: sheet/append Output
{
"updatedRange": "Orders!A15:E15",
"updatedRows": 1,
"updatedColumns": 5,
"updatedCells": 5
}
sheet/appendOrUpdate Output
| Field | Type | Description |
action | string | "appended" if no matching row was found and a new row was added; "updated" if an existing row was found and updated in place. |
updatedRange | string | A1-notation range of the row that was written or updated. |
updatedRows | integer | Number of rows affected. |
Example: sheet/appendOrUpdate Output
{
"action": "updated",
"updatedRange": "Customers!A8:F8",
"updatedRows": 1
}
spreadsheet/create Output
| Field | Type | Description |
spreadsheetId | string | The newly created spreadsheet's file ID. Store this in a workflow variable to use in subsequent sheet operations. |
spreadsheetUrl | string | Full URL to open the spreadsheet in Google Sheets. |
title | string | Title of the created spreadsheet (echoes the input Title). |
sheets | array | Array of sheet tab objects, each with sheetId (integer), title, and index. |
Example: spreadsheet/create Output
{
"spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms",
"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/edit",
"title": "Sales Report — May 2025",
"sheets": [
{ "sheetId": 0, "title": "Summary", "index": 0 },
{ "sheetId": 123456789, "title": "Raw Data", "index": 1 }
]
}
sheet/create Output
| Field | Type | Description |
sheetId | integer | The integer ID of the newly created sheet tab within the spreadsheet. |
title | string | Title of the created tab. |
index | integer | 0-based position of the new tab in the spreadsheet. |
Delete / Clear Operations Output
spreadsheet/delete, sheet/delete, sheet/clear, and sheet/deleteRowsOrColumns return a minimal confirmation object on success:
{
"success": true
}
sheet/update Output
| Field | Type | Description |
updatedRows | integer | Number of rows that matched the lookup filters and were updated. |
updatedRange | string | A1-notation of the last updated range. When multiple rows are updated, this reflects the last batch. |
sheet/update updates ALL matching rows: Unlike appendOrUpdate, sheet/update applies changes to every row that matches the LookupFilters. If multiple rows share the same lookup value, all are updated. Use a unique key column (such as an ID or email) in your filters to target a single row precisely.