Quick answer: Add a Google Sheets node to any Requex.me workflow. Authenticate with a Service Account JSON, pick your spreadsheet, and choose Read, Append, Update, or Clear. No code required.
Google Sheets Automation in Workflows
The Google Sheets node lets you read rows as structured JSON, append new rows, update existing rows by filter or row number, and clear ranges — all triggered by webhooks or schedules.
Getting Started
Authentication uses a Google Service Account — a server identity that can access your sheet without a user login flow. Here is how to set it up:
- Open Google Cloud Console → APIs & Services → Library. Search for Google Sheets API and click Enable. This must be done once per project — the API is disabled by default.
- Go to IAM & Admin → Service Accounts.
- Click Create Service Account. Give it a name (e.g.,
requex-sheets). - On the service account page, go to Keys → Add Key → Create new key → JSON. Download the file.
- Open your Google Sheet. Click Share and add the service account email (found in the JSON as
client_email) as an Editor. - In the Google Sheets node config, paste the entire contents of the downloaded JSON file into the Service Account JSON field.
403 Google Sheets API has not been used error, you skipped step 1 — go back and enable the API for your project.Operations
Read Rows
Reads all rows in the specified range. The first row is treated as column headers. Each subsequent row becomes a JSON object.
{
"rows": [
{ "Name": "Alice", "Email": "alice@example.com", "Status": "Active" },
{ "Name": "Bob", "Email": "bob@example.com", "Status": "Pending" }
]
}Access rows downstream with {{rows}}. Use a Transform node to reshape or a Branch node to route based on row values.
Append Row
Appends a new row to the sheet. Configure a JSON template where keys match your column headers and values use {{payload.path}} syntax.
{
"Name": "{{body.name}}",
"Email": "{{body.email}}",
"Date": "{{body.timestamp}}"
}Update Row
Updates an existing row. Choose between two targeting modes:
- Row Number — specify the exact row (supports
{{template}}vars) - Filter Match — find the first row where column X equals value Y (rendered from payload)
{
"Status": "{{body.newStatus}}",
"UpdatedAt": "{{body.timestamp}}"
}Clear Range
Clears all values in the configured range. The sheet structure (column headers, formatting) is preserved but all cell values are removed. The workflow payload passes through unchanged.
Template Variables
All template fields support {{dot.path}} syntax to inject values from the workflow payload.
| Variable | Description |
|---|---|
| {{body.field}} | Value from incoming webhook body |
| {{query.param}} | URL query parameter from webhook trigger |
| {{rows[0].Name}} | First row from a preceding Read node |
FAQ
I get a 403 “API has not been used” error — what do I do?
The Google Sheets API is disabled by default on new Cloud projects. Go to Google Cloud Console → APIs & Services → Library, search for Google Sheets API, and click Enable. The error disappears immediately once the API is active.
Why a Service Account instead of OAuth?
Service Accounts are headless server identities — no browser login required, no token expiry to manage. They are the standard approach for server-to-server Google API access in automation tools. OAuth2 support is planned for a future release.
How do I find my Spreadsheet ID?
Open your Google Sheet. The URL looks like: docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/edit. The bold part is your Spreadsheet ID.
What range format should I use?
Use A:Z to cover all columns dynamically, or A1:F500 for a bounded range. The sheet name is configured separately — do not include it in the range field.
The service account can't access my sheet — what's wrong?
The most common cause: you forgot to share the spreadsheet with the service account email. Open the sheet, click Share, and add the client_email from your service account JSON as an Editor.