Resources · n8n integration

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 automate

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.

Connect

How do you connect Google Sheets to n8n?

  1. 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.

  2. 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.cloud or your instance domain to Authorized domains, then create an OAuth client ID of type Web application.

  3. 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.

Triggers

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.*2
    any.*1

      Configuration notes

      01Google Sheets TriggerThe 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.

      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.
      When to use it
      whenever the spreadsheet is where the work starts, whether the rows come from a form, from an import, or from a column someone fills by hand.
      02Row AddedThis 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.

      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 .5 as noon.
      Use cases
      a form writes a row and the workflow sends the confirmation, or a new line in an import tab creates the matching record in your database.
      When to use it
      pick this event when only new lines matter and later edits should stay out of it. If dates still arrive as decimals, the spreadsheet locale is the other lever, under File, then Settings, then the General tab.
      03Row UpdatedHere 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.

      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.
      Use cases
      a status column switches to ready and the order goes out, a price is corrected in the catalog tab and the change reaches the store, an owner is finally assigned and the notification follows.
      When to use it
      when people work inside the sheet and their edits are the real signal. Keep in mind that the trigger only watches the sheet you selected, so an edit made in another tab of the same spreadsheet will not wake it up.
      04Row Added or UpdatedThe 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.

      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.

      Use cases
      mirror a sheet into a database where an insert and an edit both have to be replayed, or keep a shared planning tab aligned with the tool your team actually opens.
      When to use it
      when the step that follows is idempotent, meaning that running it twice on the same row leaves the same result. Pair it with Append or update row in sheet on the destination side: a row that comes back twice updates its line instead of creating a duplicate.
      Actions

      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.

      Resources × operations matrix
      ResourceCreateUpdate RowDelete Rows or ColumnsDeleteAppend RowAppend or Update RowClearDeleteGet Row(s)
      Document✓✓
      Sheet Within Document✓✓✓✓✓✓✓✓

      Document

      2 operations
      01

      Create spreadsheet

      spreadsheet.create

      What 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, fil or en_US, which drives date and currency formatting.
      • Recalculation Interval: On Change, Minute or Hour, for functions such as NOW and RANDBETWEEN.
      Use cases
      one tracking file per new client, or the monthly export created before the workflow fills it.
      02

      Delete spreadsheet

      spreadsheet.deleteSpreadsheet

      What 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 spreadsheetId that sits in the middle of the address, https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0.
      Use cases
      clear out the throwaway files a test workflow produced, or close a client file once a copy has been archived somewhere else.

      Sheet Within Document

      8 operations
      03

      Append or update row in sheet

      sheet.appendOrUpdate

      What 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.
      Use cases
      keep one row per customer up to date from your CRM without ever creating a second row for the same person.
      04

      Append row in sheet

      sheet.append

      What 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.
      Use cases
      an append-only log, one row per form submission, per inbound API call, or per error caught in another workflow.
      05

      Clear sheet

      sheet.clear

      What 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.
      Use cases
      wipe the staging tab every night before the next import writes into it.
      06

      Create sheet

      sheet.create

      What 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.
      Use cases
      a fresh tab on the first day of each month, or one tab per campaign so the numbers never mix.
      07

      Delete sheet

      sheet.remove

      What 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.
      Use cases
      drop the temporary tab a workflow created for a one-off import, once the data has reached its final home.
      08

      Delete rows or columns from sheet

      sheet.delete

      What 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.
      Use cases
      trim the oldest lines of a rolling log, or cut a block of columns after an export changed shape.
      09

      Get row(s) in sheet

      sheet.read

      What 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.
      Use cases
      pull the rows whose status column still says pending and hand them to the next node.
      10

      Update row in sheet

      sheet.update

      What 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.
      Use cases
      write a status back into the very row the trigger sent, once the step downstream has finished its job.
      Need help

      Need help automating Google Sheets with n8n?

      A person reads every message.

      FAQ

      Frequently asked questions

      01Is the Google Sheets n8n integration free?
      Yes. The Google Sheets node and the Google Sheets Trigger ship inside n8n as built-in nodes, so there is nothing to install and nothing to buy on the n8n side: the 10 operations and the 3 trigger events are there on a self-hosted instance and on n8n Cloud alike. What changes between the two is the credential, not the feature list. Cloud users connect through Managed OAuth2 and a single Sign in with Google click, while a self-hosted instance needs a custom OAuth2 credential created in the Google Cloud Console. What your Google account itself costs is a separate question, and this page does not cover it.
      02Which credentials and permissions does the Google Sheets node need?
      Two methods work here: OAuth2, the one n8n recommends because it is more widely available and easier to set up, and Service Account. OAuth2 connects as you, so the node reaches the files your own Google account can already open. A Service Account has its own identity and its own email address, which means every spreadsheet has to be shared with that address first, Editor for read and write, Viewer for read only. Google also stopped letting Service Accounts created after April 15, 2025 reach a personal Drive, so shared drives are the only way in. On a generic Google OAuth2 credential, the two scopes to enter are drive.file and spreadsheets.
      03What are the limits of the Google Sheets node in n8n?
      It stops at its 10 operations, spread over two resources: Document for the file, Sheet Within Document for the tabs. Anything outside that list goes through the HTTP Request node against the Google Sheets API, and the Service Account credential even carries a Set up for use in HTTP Request node switch with its own Scope(s) field for that exact purpose. Three behaviors are worth knowing before you build: the first row is treated as a heading row and is not returned when you read every row, an array has to be converted into key and value pairs before it can be written, with the Split Out node, the AI Transform node or the Code node, and column names that changed after setup come back only when you re-select Mapping Column Mode.
      04Does the Google Sheets Trigger react in real time?
      No. The Google Sheets Trigger works by polling: n8n calls the Google Sheets API at the interval you set in Poll Times, at most once a minute, and sends out one item per row it finds. Nothing has to be registered on the Google side, but a new row waits up to that interval before the workflow starts. There is no catch-all option either, so a workflow that has to cover creations and edits takes Row Added or Updated. Two behaviors surprise people. Include in Output is effective only when the workflow runs automatically, so a manual execution will not show it. And when a test run seems stuck listening forever behind a reverse proxy, the cause is usually websocket support that was never enabled on Nginx, Caddy, Apache HTTP Server or Traefik.
      05n8n or Make for Google Sheets?
      It depends on where you want the automation to live. n8n can run on your own server, which matters when the spreadsheet holds customer data you would rather not push through someone else's platform, and it accepts both OAuth2 and a Service Account, so a machine identity can own the connection instead of an employee account that leaves one day. The node covers 10 operations and the trigger covers 3 events: that is the list to compare, operation by operation, against the equivalent modules elsewhere. The cost model is the other axis: Make bills by the operation, which adds up differently from a self-hosted n8n instance when a workflow writes hundreds of rows a day. Make remains a fair choice, and the real question is rarely the brand. It is whether the operations you need are on the list, and who maintains the workflow next year.