Google Sheets node `appendOrUpdate` writes outside native Table boundary

Hi guys,

I’m running into an issue with the Google Sheets node (n8n-nodes-base.googleSheets, typeVersion 4.5), where rows are appended via the appendOrUpdate operations are being written outside the boundary of a native Google Sheets Table, rather than into the next available row within the Table.

The target sheet uses the native Google Sheets Tables feature (Insert → Table). The Table spans approximately A1:N7, with row 1 as the header row and rows 2–7 containing typed-column placeholders (date, currency, person chip). The Table is named “Invoices”.

Expected vs. actual behavior

When a new row is sent to the node, it should be inserted within the Table boundary, either by filling the next empty Table row or by extending the Table to accommodate the new record, so that the row inherits the Table’s column types, formatting, and structured references. Instead, the row is written to the first empty row immediately below the Table’s current data range, outside the Table boundary; it does not become part of the Table and does not inherit its column types or formatting. This happens regardless of whether the Table contains empty placeholder rows or only populated rows.

I’ve attached a screenshot of the destination sheet showing the issue, and I’m happy to share a sanitized export of the workflow if that would help. Thanks for taking a look.

إعجاب واحد (1)

Yeah this looks like n8n is treating the sheet like a normal range, not like Google’s newer native Tables feature.

I’d test with a blank row already inside the table and also try setting the range to the table area.

If it still appends below the table, I’d treat it like a Sheets node limitation/bug and either use a normal range workaround or hit the Sheets API directly.

إعجاب واحد (1)

Welcome @ernest28 to our community! I’m Jay and I am a n8n verified creator.

This is a known gap - n8n’s Google Sheets node calls the Sheets API v4 at the spreadsheets.values level, which has no awareness of Google Sheets native Tables. The Tables feature sits on top of regular sheet ranges but the API doesn’t expose it the same way, so appending a row just finds the next empty row in the range without “inserting” a row into the Table object. The only real workaround right now is to avoid using native Tables as the target - use a regular range instead and apply formatting manually, or use the Sheets API node with a direct batchUpdate call if you need the row to register inside the Table structure.

إعجاب واحد (1)

@ernest28 بتأكيد ما قاله @OMGItsDerek + @nguyenthieutoan — نقطة نهاية values.append في Sheets API التي يستدعيها n8n ليس لديها مفهوم جداول أصلية، لذلك الصف ينتهي به الحال خارج الحدود بالتصميم. الحل البديل عندما تريد إدراجات تدرك الجداول هو استدعاء spreadsheets.batchUpdate مباشرة عبر HTTP Request برسالة insertRange التي تمدد الجدول بشكل صريح.

إليك JSON عقدة HTTP Request للحل البديل:

insertRange تنقل الخلايا الموجودة لأسفل + تمدد كائن الجدول، ثم updateCells تكتب الصف الخاص بك في الصف المُنشأ حديثًا داخل الحدود. أنواع الأعمدة + التنسيق يتم وراثتها من تعريف الجدول. اضبط startRowIndex/endRowIndex إلى حيث ينتهي الجدول حاليًا (أو استعلم عنه أولاً باستخدام spreadsheets.get + includeGridData=false للعثور على الحدود المباشرة).

إعجاب واحد (1)