Google Sheets is one of the most versatile data stores in the world — free, collaborative, and accessible from anywhere. When combined with n8n, it becomes a powerful backend for lightweight CRMs, event logs, reporting dashboards, and data pipelines.
In this guide we cover credentials setup (both OAuth2 and Service Account), all node operations, triggers, and four complete real-world workflows you can import and adapt today.
Visit Scriflow, describe your Google Sheets automation in plain English, and get a ready-to-import n8n JSON file — no manual configuration needed.
Setting Up Google Sheets Credentials
You have two ways to authenticate with Google Sheets from n8n:
| Method | Best For | Setup Complexity |
|---|---|---|
| OAuth2 (Google account) | Accessing spreadsheets in your personal or GSuite account | Medium — requires Google Cloud project + OAuth consent screen |
| Service Account | Server-to-server automation, no user interaction needed | Medium — requires sharing spreadsheet with service account email |
Option A: OAuth2 Setup
- Go to console.cloud.google.com → Create a new project (or select existing).
- Enable the Google Sheets API and Google Drive API.
- Go to APIs & Services → Credentials → Create OAuth 2.0 Client ID.
- Set Application Type to Web Application. Add n8n's callback URL as an authorized redirect URI.
- Download the Client ID and Client Secret.
- In n8n: Credentials → New → Google Sheets OAuth2 API → enter Client ID and Secret → Connect.
Option B: Service Account Setup
- In Google Cloud Console → Credentials → Create Service Account.
- Download the JSON key file for the service account.
- In n8n: Credentials → New → Google Service Account → paste the JSON key content.
- Important: Share your Google Spreadsheet with the service account email (
name@project.iam.gserviceaccount.com) with Editor access.
Use Service Account for automated server workflows (no token expiry, no UI interaction required). Use OAuth2 when you need to act as a specific user or access private spreadsheets you own.
Node Operations Overview
The n8n Google Sheets node covers all CRUD operations plus spreadsheet-level management:
Reading Rows from a Sheet
To read data, you need the Spreadsheet ID (found in the URL: docs.google.com/spreadsheets/d/[ID]/edit) and the sheet name:
Each row becomes a separate n8n item. Column headers in row 1 become the JSON field names in the output:
Appending Rows
The Append Row operation is the workhorse of Google Sheets automation. It maps incoming JSON fields to column headers automatically:
The column names in the node must exactly match the header row in your spreadsheet (case-sensitive). If the sheet has a "First Name" column, use First Name — not firstName or first_name.
Updating Rows
To update a row, you must identify it. The most reliable way is using the row_number returned by a prior Get Rows operation:
Google Sheets Triggers
The Google Sheets Trigger node polls your spreadsheet for changes and fires your workflow when data is added or updated. This enables reactive automation without a third-party webhook service.
Google Sheets doesn't natively support webhooks. The trigger node polls the sheet every minute (or your configured interval). For near-real-time reactions, combine a Google Forms submission webhook with the Sheets node for writes.
Real Workflow Examples
Workflow 1: Form Submissions → Google Sheets CRM
Automatically capture website form submissions into a Google Sheets CRM:
- Webhook Trigger — receives form submission from your site.
- Set Node — normalizes and enriches the data (adds timestamp, default status).
- Google Sheets → Append Row — adds the lead to the "Leads" sheet.
- Gmail/SendGrid — sends a welcome email to the new lead.
- Slack — notifies the sales team in
#new-leads.
Workflow 2: Spreadsheet to Email Reports
Every Monday morning, pull last week's sales data and email a formatted report:
- Schedule Trigger — Monday at 8 AM.
- Google Sheets → Get Rows — reads all rows from "Sales" sheet where Date is last 7 days.
- Code Node — aggregates totals (sum revenue, count deals, calculate conversion rate).
- Gmail → Send Email — sends an HTML-formatted report to the team.
Workflow 3: Sync Database → Google Sheets
Keep a Google Sheet in sync with a PostgreSQL or MySQL database for stakeholder visibility:
- Schedule Trigger — runs every hour.
- Postgres Node — queries the latest records.
- Google Sheets → Clear — clears the data range (not headers) to avoid duplicates.
- Google Sheets → Append Row — writes all fresh data rows in bulk.
Workflow 4: Typeform → Sheets → Slack Notification
- Typeform Trigger — fires on every survey response.
- Google Sheets → Append Row — logs the response with timestamp and score.
- IF Node — checks if NPS score is ≤ 6 (detractor).
- Slack (true branch) — alerts the customer success team to follow up.
Tips for Large Datasets
- Use filters on read: Always filter on the Sheets node level rather than reading all rows and filtering in n8n. This reduces API quota usage.
- Batch appends: The Append Row operation can process multiple items in a single API call. n8n handles this automatically when upstream nodes produce multiple items.
- Archive old data: Google Sheets performs poorly beyond ~50k rows. Use a Delete Row operation or move old rows to an archive sheet periodically.
- Use named ranges: Define named ranges in Google Sheets (e.g. "SalesData") and reference them by name instead of hardcoded cell ranges like
A:Z. - Monitor API quota: Google Sheets API has a limit of 300 write requests per minute. Add Wait nodes if you're writing many rows in rapid succession.
Frequently Asked Questions
batchUpdate endpoint with an addSheet request. This gives you full control over tab creation, naming, and positioning.row_number. Pass this to the Update Row operation's Row Number field to modify only that specific row.