- Home
- Resources
- Integrations
- Google Sheets
Google Sheets n8n integrationAutomate Google Sheets with n8n.
Want rows to move between Google Sheets and the rest of your stack without writing a script? The Google Sheets n8n integration exposes 10 operations across 2 resources, and the Google Sheets Trigger reacts to 3 events: Row Added, Row Updated, Row Added or Updated.
Verified Trustpilot reviews · AI, automation & growth agency
Why set up the Google Sheets n8n integration?
The Google Sheets n8n integration connects a spreadsheet to a workflow in both directions. The Google Sheets node reads, updates and writes data in your sheets through 10 operations, split over two resources: Document for the file itself, Sheet Within Document for the tabs inside it. The Google Sheets Trigger works the other way around and starts a workflow when a row moves in the sheet you picked.
Three shapes cover most of what teams build here. The first one is intake. A row lands in the sheet, the rowAdded event starts the workflow, and the data goes where it actually belongs: a message in Slack for whoever is on duty, an email through Gmail, a record created in the tool your team works in all day.
The second one is the export that never goes stale. Get row(s) in sheet reads the lines matching a filter, and the workflow pushes them into a real database such as Postgres, where they can be queried properly. The spreadsheet stays the place where people type. The database becomes the place where things get counted.
The third one is the recap sheet other systems feed. Append or update row in sheet writes one line per customer, per order or per campaign, then updates that same line on the next run instead of stacking duplicates. When the sheet slowly turns into a small internal app, Airtable is often the next stop, but the sheet gets you there today.
Two habits save an afternoon of debugging. n8n treats the first row as a heading row and does not return it when you read every row, so a table whose data starts lower needs Data Location on Sheet. And an array cannot be written as is: convert it into key and value pairs first, with the Split Out node, the AI Transform node or the Code node. One more, for later: if the column names change after the node was set up, re-select Mapping Column Mode and the node fetches them again.
The node stops at its 10 operations. Anything past that list runs through the HTTP Request node against the Google Sheets API, and the Service Account credential, the stored connection n8n authenticates with, even carries a Set up for use in HTTP Request node switch with its own Scope(s) field for exactly that case. Worth reading before you commit to the platform: the n8n review covers what it does well and where it gets in the way.
How do you connect Google Sheets to n8n?
- 01
Pick an authentication method
Google Sheets accepts two of them: OAuth2, the one n8n recommends because it is easier to set up, and Service Account. On n8n Cloud, Managed OAuth2 does the work for you: open the credential screen, click Sign in with Google, and nothing else is needed in the Google Cloud Console. A self-hosted instance does not get that shortcut and needs a custom OAuth2 credential.
- 02
Create the OAuth client in Google Cloud
Open OAuth consent screen and fill in App name and User support email. The Audience is Internal for your own Workspace, External for any Google account. Under Branding, add
n8n.cloudor your instance domain to Authorized domains, then create an OAuth client ID of type Web application. - 03
Paste the keys back into n8n
Copy the OAuth Redirect URL shown in your n8n credential and paste it into Authorized redirect URIs in Google, protocol and port included. Running n8n locally works fine, the URL looks like
http://localhost:5678/rest/oauth2-credential/callback. Copy the Client ID and Client Secret from Google into n8n, click Sign in with Google, then save.
Google Sheets triggers available in n8n
Google Sheets Trigger is the node that starts a workflow when something happens in Google Sheets. It listens to 3 events, listed below by family. Pick one or several, activate the workflow: n8n registers the webhook on your Google Sheets account.
What you see in n8n
Every event, by family
One row per object, one chip per action. The event to tick in the node is object.action; hover a chip to read exactly when it fires.
row.*2any.*1Configuration notes
01Google Sheets Trigger
The trigger watches one sheet inside one spreadsheet and starts the workflow when the event you selected happens there. It runs on version 1 of the node, with no catch-all option: you commit to a single event among the three. Nothing has to be set up on the Google side, because the node works by polling: n8n re-reads the document at the interval set in Poll Times, once a minute at the fastest, so a new row waits up to that interval.
Key parameters
- Trigger On: the field that carries the event, Row Added, Row Updated or Row Added or Updated.
- Document: required. The spreadsheet, picked From list, By URL or By ID.
- Sheet: required. The tab inside that file. One trigger covers one tab, so two tabs mean two triggers.
- Include in Output: this option is effective only when the workflow runs automatically, so a manual test execution will not show it.
- Options: the collection where the extra settings live, DateTime Render among them.
02Row Added
This event fires when a new row shows up in the watched sheet. Rows arrive at the bottom, each one starts an execution, and edits made further up the sheet stay silent.
Key parameters
- DateTime Render: available only when Trigger On is set to Row Added. Add the option, switch it to Formatted String, and date, time, datetime and duration fields come out as strings instead of the serial number format, which counts days since December 30, 1899 and reads
.5as noon.
03Row Updated
Here the workflow starts when an existing row changes. New lines do not count at all, which makes this event the one for review columns: someone flips a cell to approved, someone else fills a missing reference, and the automation takes it from there.
Key parameters
- Columns to Watch: inside Options, the columns whose edits start the workflow, while a change made anywhere else on the row stays silent.
04Row Added or Updated
The third event covers both cases at once. A single trigger listens to new rows and to edits made on existing ones, which saves you from running two workflows side by side on the same tab, with two sets of executions to read through.
Google Sheets actions available in n8n
The Google Sheets node exposes 10 operations across 2 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Create | Update Row | Delete Rows or Columns | Delete | Append Row | Append or Update Row | Clear | Delete | Get Row(s) |
|---|---|---|---|---|---|---|---|---|---|
| Document | ✓ | ✓ | |||||||
| Sheet Within Document | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Operations index
Document
2 operationsCreate spreadsheet
spreadsheet.createWhat you see in n8n
Notes & use cases
This operation creates a new spreadsheet on the Google account behind the credential, then hands the file to the next node.
Key parameters
- Title: the title of the spreadsheet, often built from the run itself with an expression, that is a value read from the previous node, such as
{{ $json.company }}. - Sheets: Add Sheet names the tabs created inside the new file.
- Locale:
en,filoren_US, which drives date and currency formatting. - Recalculation Interval: On Change, Minute or Hour, for functions such as
NOWandRANDBETWEEN.
Delete spreadsheet
spreadsheet.deleteSpreadsheetWhat you see in n8n
Notes & use cases
Deletes a whole spreadsheet, every tab included. No range, no filter: the operation works on the file, never on its content.
Key parameters
- Document: required. Pick the file From list, By URL, or By ID with the
spreadsheetIdthat sits in the middle of the address,https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0.
Sheet Within Document
8 operationsAppend or update row in sheet
sheet.appendOrUpdateWhat you see in n8n
Notes & use cases
One node handles both cases. When a matching entry exists it gets updated, and when nothing matches the row is added at the end of the data. That upsert behavior is what keeps a recap sheet free of duplicates.
Key parameters
- Columns: required. Map Each Column Manually asks for the Values to Send column by column, while Map Automatically matches incoming fields to the column names.
- Minimise API Calls: appends instead of updating, which is more efficient but can misalign data, so keep it for a sheet with no gaps between rows or columns.
Append row in sheet
sheet.appendWhat you see in n8n
Notes & use cases
Every execution writes a new row at the end of the data. Nothing is looked up and nothing is matched, so a line someone edited by hand stays untouched.
Key parameters
- Document and Sheet: required. The file, then the tab the row lands in.
- Columns: required. With Map Automatically, incoming field names have to match the column names, which is what an Edit Fields node upstream is for.
- Cell Format: Let Google Sheets format styles cells as if the values were typed in the sheet, Let n8n format keeps the input data types.
Clear sheet
sheet.clearWhat you see in n8n
Notes & use cases
Content goes away, the sheet itself stays in place. It is the operation for a full reload, when the tab has to survive but its rows do not.
Key parameters
- Range: required. The table range to work on, and it can carry the tab name, as in
MySheet!A:F. - Clear: Whole Sheet, Specific Rows, Specific Columns or Specific Range.
- Keep First Row: leaves the heading row alone while everything below it goes.
- Start Row Number: the row to clear from, where the first row is 1, paired with Number of Rows to Delete.
Create sheet
sheet.createWhat you see in n8n
Notes & use cases
Adds a tab to a spreadsheet that already exists. The file does not change, the new sheet arrives empty under the name you gave it.
Key parameters
- Document: required. The spreadsheet that receives the tab.
- Title: required. The name of the sheet, which is also what you will select later in Sheet.
- Sheet ID: has to be non-negative, and it cannot be changed once set.
- Sheet Index and Tab Color: where the tab sits among the others, and the color it takes.
Delete sheet
sheet.removeWhat you see in n8n
Notes & use cases
Removes one tab and everything on it, permanently. The spreadsheet stays, the sheet does not, and no n8n setting brings it back.
Key parameters
- Document: required. The file the tab belongs to.
- Sheet: required. The tab to remove, picked From list, By URL, By ID or By Name.
Delete rows or columns from sheet
sheet.deleteWhat you see in n8n
Notes & use cases
Rows and columns leave by position here, not by content. n8n counts them, it never reads what they hold, so deleting by value belongs to another part of the workflow.
Key parameters
- To Delete: Rows or Columns, which decides what the two fields below mean.
- Start Row Number: the row number to delete from, where the first row is 2.
- Number of Rows to Delete: how many go, counted from that starting point. Deleting columns works the same way, from a Start Column.
Get row(s) in sheet
sheet.readWhat you see in n8n
Notes & use cases
Reads one row, a handful, or the whole tab, turning each line into an item the workflow can loop over. Watch the top of the sheet: n8n treats the first row as a heading row and leaves it out.
Key parameters
- Filters: a Column and the Value it must hold. Combine Filters requires every condition (AND) or just one (OR).
- When Filter Has Multiple Matches: only the first result comes back by default, so switch it to Return All Matches.
- Output Formatting: Values (unformatted) drops currency signs, Formulas returns the formula rather than its result.
Update row in sheet
sheet.updateWhat you see in n8n
Notes & use cases
Only rows that already exist get written here. When nothing matches, no row is created, which is precisely the job of Append or update row in sheet.
Key parameters
- Columns: required. Map each column by hand with its Values to Send, or let Map Automatically line up the incoming fields with the column names.
- Data Location on Sheet: Header Row is the row index holding the column headers, First Data Row the index where the data starts.
- Handling extra fields in input: send them to a new column, ignore them, or raise an error.
Need help automating Google Sheets with n8n?
A person reads every message.

