Google Sheets Append Row always writes to the same tab even when Sheet Name is dynamic

Hi everyone,

I’m facing an issue with the Google Sheets node in n8n Cloud and I’m unable to figure out whether it’s my workflow or a node limitation/bug.

Environment :-
n8n Version: 2.29.10
Deployment: n8n Cloud

Workflow :-

Webhook

Google Sheets (Get Rows)

IF (Processed = No)

Switch (based on “Sheet name” column)
├── Append Row (Overall Tasks)
└── Append Row (University Tie-up & Termination)

Update Row (mark Processed = Yes)


Source Sheet

My source Google Sheet contains a column named: Sheet name

Sample values:

Overall Tasks
University Tie-up & Termination

Destination Sheet :-

I have one Google Spreadsheet with multiple tabs:

*Overall Tasks
*University Tie-up & Termination

Rows should be appended to the tab specified in the Sheet name column.

What I’ve Tried :-

  • Replaced the dynamic Sheet expression with two separate Google Sheets Append Row nodes.
  • Each Append Row node is configured with a fixed sheet name (By Name).
  • Used a Switch node to route items based on the “Sheet name” column.
  • Verified that the destination tab names exactly match the values in the source sheet.
  • Removed the Loop Over Items node as it was not required.

Problem :-
Despite using a Switch node with two separate Append Row nodes (each pointing to a fixed sheet), all rows are still appended to only one tab.

The Switch appears to evaluate correctly, but every item is ultimately written to the same destination sheet.

I’ve attached both workflow JSON files and screenshots for reference.

Questions :-

  • Is this expected behavior with the Google Sheets Append Row node?
  • Does the Google Sheets node cache the selected sheet?
  • Is there any known issue with routing items to different tabs in the same spreadsheet?
  • Is there a better approach for appending rows to different tabs dynamically?

Any suggestions would be greatly appreciated.

Thanks!

Hi @Mohit0529 Welcome!
With the Sheet field set to “From list” or “By Name”, n8n stores the tab’s internal gid and that selection is what’s misrouting the rows, so everything lands in one tab no matter how the Switch splits. This is a known node bug.
On each Append node, set the Sheet to “By ID” and paste that tab’s gid, the number after #gid= in the tab’s own URL, instead of picking it by name. The gid is exact, so each node writes only to its own tab.
If you’d rather keep one dynamic Append node, add a Loop Over Items node before it with Batch Size set to 1, and set the Sheet “By ID” from an expression holding the gid. Batch size 1 makes the tab resolve per item.