Read, write, and manage data inside Google Sheets directly from your workflows.
This node allows you to automate spreadsheets for use cases like:
Logging form submissions
Storing orders or transactions
Updating dashboards
Syncing external data
With the Google Sheets node, you can:
Fetch data from a spreadsheet
Append new rows
Update existing rows
Clear ranges
Create new sheets
Perform batch updates
This integration uses a Google Service Account, not OAuth.
That means:
You must create credentials in Google Cloud
You must share your spreadsheet with that account
Follow this carefully 👇
Open:
👉 https://console.cloud.google.com/
Click Select Project
Click New Project
Give it a name (e.g. syncaut-sheets)
Click Create
Go to APIs & Services → Library
Search: Google Sheets API
Click it
Click Enable
Go to APIs & Services → Credentials
Click Create Credentials
Select Service Account
Fill:
Name: syncaut-bot
Click Create
Skip roles → Click Done
Click your service account
Go to Keys
Click Add Key → Create New Key
Choose JSON
Download the file
⚠️ This JSON file is your credential
Open your Google Sheet and:
Click Share
Add the service account email (from JSON)
Give Editor access
Example email:
[email protected]Inside your app:
Go to Credentials
Create new → Google Sheets
Paste the entire JSON file
Save
Now it will appear in the dropdown.
From your sheet URL:
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/editCopy the SPREADSHEET_ID
Used to reference output later.
Example:
mySheetUsage:
{{mySheet.values}}Select your saved Google Sheets credential.
Paste your spreadsheet ID.
Sheet Name (Optional)
Default sheet for operations.
Example:
Sheet1Choose what you want to do:
ActionDescriptionget_valuesRead dataappend_rowAdd new rowupdate_rowUpdate existing rowclear_rangeDelete datacreate_sheetAdd new sheetbatch_updateMultiple updates
This defines the operation.
You can use variables like:
{{orderId}}
{{customerName}}1. Get Values
Fetch data from a range.
{
"range": "Sheet1!A1:D10"
}Add new row to sheet.
{
"range": "Sheet1!A:D",
"values": [
["{{orderId}}", "{{customerName}}", "{{total}}", "{{date}}"]
]
}Overwrite a specific row.
{
"range": "Sheet1!A2:D2",
"values": [
["{{orderId}}", "{{customerName}}", "{{total}}", "{{date}}"]
]
}Delete values in a range.
{
"range": "Sheet1!A2:D100"
}Create a new tab.
{
"title": "New Sheet {{timestamp}}"
}Perform multiple updates at once.
{
"data": [
{
"range": "Sheet1!A2:A2",
"values": [["Updated Value"]]
},
{
"range": "Sheet1!B2:B2",
"values": [["Another Value"]]
}
]
}You can inject data from previous nodes:
SyntaxMeaning{{variable}}Simple value{{variable.field}}Nested value{{json.variable}}Full object
Flow:
Form Submission
AI Node → Generate summary
Google Sheets → Store data
Payload:
{
"range": "Sheet1!A:D",
"values": [
["{{form.name}}", "{{form.email}}", "{{myAI.text}}", "{{timestamp}}"]
]
}The node returns:
{
"values": [...],
"updatedRows": 1,
"updatedCells": 4,
"action": "append_row"
}Usage:
{{mySheet.values}}
{{mySheet.updatedRows}}Running → Processing request
Success → Operation completed
Error → Something failed
Missing Credentials
Fix:
Ensure you selected a credential
Error:
Google Sheets API Error: The caller does not have permissionFix:
Share the sheet with your service account email
Fix:
Ensure valid JSON format
Check for missing commas or quotes
Examples:
range is required
values are required
Fix:
Follow payload examples exactly
Always test with small ranges first
Use variables for dynamic workflows
Keep payloads clean and valid JSON
Share sheets properly with service account
Use Google Sheets when you want to:
Store structured workflow data
Build internal dashboards
Track users, orders, or logs
Replace simple databases
If your node runs but returns empty data, 90% of the time:
👉 Your sheet is not shared with the service account
Navigate