@Mohamed_Necib4 no native way — Google Sheets Trigger is one-doc-per-node. Cleanest pattern: 10 tiny “trigger only” workflows, each firing Execute Workflow into one main workflow.
Duplicate per client, swap SHEETID, point all at same MAINID.
Perhaps you can try this. You need two pieces of code: the n8n Workflow JSON (which you import into n8n) and the Google Apps Script (which you paste into each Google Sheet).
1. The n8n Workflow JSON
Copy the code block below. In n8n, simply create a new workflow and paste (Ctrl+V / Cmd+V) this JSON directly onto the canvas.
Important Setup for the JSON:
Credentials: After pasting, double-click the “Get Updated Row” node and select your own Google Sheets OAuth2 credentials.
Webhook URL: Once you activate the workflow, copy the Production URL from the Webhook node. You will need this for the script below.
2. The Google Apps Script
You must add this to each of your 10 client sheets.
Open your Google Sheet ->-> Extensions ->-> Apps Script.
Delete any existing code and paste the following:
// REPLACE THIS with your n8n Production Webhook URL
const N8N_WEBHOOK_URL = "https://your-n8n-instance.com/webhook/google-sheets-multi-tenant";
function onEdit(e) {
const range = e.range;
const sheet = range.getSheet();
const spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId();
// Prepare the data to send to n8n
const payload = {
spreadsheetId: spreadsheetId,
sheetName: sheet.getName(),
row: range.getRow(),
column: range.getColumn(),
newValue: e.value,
oldValue: e.oldValue,
user: Session.getActiveUser().getEmail()
};
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
try {
UrlFetchApp.fetch(N8N_WEBHOOK_URL, options);
} catch (err) {
console.log("Error sending to n8n: " + err);
}
}
How it works in production:
User edits a cell in any of the 10 sheets.
Google Apps Script instantly triggers and sends the spreadsheetId and row number to n8n.
n8n Webhook receives the request.
n8n Google Sheets Node uses the spreadsheetId from the payload to dynamically connect to that specific client’s file and pull the full row data.
Single Workflow handles every client, no matter how many sheets you add in the future.