Reference for the n8n Google Sheets node -- operations, authentication, parameters, and common patterns.
The Google Sheets node reads, writes, updates, and deletes data in Google Sheets spreadsheets. It is one of the most frequently used nodes for data collection, reporting, and lightweight database workflows.
Google Sheets requires Google OAuth2 credentials.
Note
If you are self-hosting, your OAuth consent screen must be configured before credentials will work. For internal use, set the app to "Internal" to skip Google's verification process.
| Operation | Description |
|---|---|
| Read Rows | Retrieve rows from a sheet. Returns all rows by default or a filtered range. |
| Append Row | Add a new row at the bottom of the sheet. |
| Update Row | Modify an existing row matched by row number or a lookup column. |
| Delete Row | Remove a row by row number. |
| Clear | Clear cell contents in a specified range without deleting rows. |
| Parameter | Description |
|---|---|
| Document | The spreadsheet to operate on. Selected by name or ID from the resource picker. |
| Sheet | The specific sheet tab within the spreadsheet. |
| Range | Cell range in A1 notation (e.g., A1:D100). Leave empty to target all data. |
| Header Row | The row number that contains column headers. Defaults to 1. |
| Key Column | For Update and Delete -- the column used to match which row to act on. |
| Options > Data Location Starts at | Row number where data begins (useful if the header is not in row 1). |
| Options > Value Render Mode | Controls whether formulas return the computed value or the formula text. |
Read all rows, filter, then process:
Google Sheets (Read Rows) --> IF node (filter) --> Slack / Email / HTTP Request
Set the operation to Read Rows, leave Range empty to get all data, and feed the output into a filter or IF node. Each row becomes one item in n8n's data stream.
Append processed data back to a sheet:
Webhook --> Code node (transform) --> Google Sheets (Append Row)
Map fields from the incoming data to column names. The node matches fields to columns by header name.
Two-way sync between a sheet and a database:
Schedule Trigger --> Google Sheets (Read Rows) --> PostgreSQL (Upsert)
Read rows on a schedule and push changes into a database. Use the key column to detect which rows are new or updated.
Warning: Column names must exactly match
The Append and Update operations match data fields to columns using the header row text. If your header says
First Namebut your expression outputsfirstName, the value will be silently dropped. Check for trailing spaces in column headers.
FORMULA if you need the raw formula text.The caller does not have permission (403) when accessing a spreadsheet.
The Google OAuth2 credential does not have the required scopes. Re-authorize the credential with the Google Sheets API and Google Drive API scopes enabled. If the spreadsheet is shared with a specific account, confirm the OAuth credential is connected to that account.
Append operation silently drops columns or writes to the wrong cells.
Column matching relies on the header row text. If the header says First Name but the data field is firstName, the value is silently dropped. Inspect the header row for trailing spaces or mismatched capitalization and use an Edit Fields node to rename fields to match exactly.
Read Rows returns fewer rows than expected, stopping at a gap in the data.
By default, the node stops reading at the first completely empty row. If your spreadsheet has blank rows in the middle, set a specific range (e.g., A1:D1000) instead of leaving the Range parameter empty.
I build production n8n and Cloudflare automation for teams — the same engineering behind HarperFlow. Fixed-price, escrow-protected, US-based.