Why does my n8n workflow keep adding the same row?
Append row has no memory of what is already in the sheet. Run it twice with the same data and you get two rows.
The lesson starts from n8n template 7156. Its Generate 1 Row of Data node always produced the same person with the same email, and the next node was plain Append row, so every test run added that person again. On a real form that people resubmit, or a workflow you run while testing, the same thing fills your sheet with copies.
How does Append or update row work?
You choose one column as the key. For each item, n8n searches that column for the item's value.
- Found: it updates that row with the mapped values.
- Not found: it appends a new row.
In the lesson the four columns (Name, Email, Topic, Submitted) are already mapped. Click Column to match on and pick Email. Execute the step and the OUTPUT shows 1 item; in the sheet, row 10 is Jordan Lee.
Which column should I match on?
A column that never repeats between records and never changes for one record.
| Data | Good match column | Poor choice |
|---|---|---|
| People, leads, applicants | Name (two people share names) | |
| Invoices | Invoice # (with vendor if numbers repeat across vendors) | Total |
| Orders | Order ID | Date |
| Tasks from meetings | A task ID you create | Task text (AI wording changes) |
If the column can be blank, rows with a blank value can't be matched. Filter those items out before the sheet node.
How do I prove there are no duplicates?
Run the whole workflow twice and count the rows.
That's the final test in the lesson: click Execute workflow, check the Content Requests tab (nine rows, every Description filled), go back and click Execute workflow again. Still 9 rows, with no second Jordan Lee. The original template failed this test.
Try it free, step by step
n8n: Read, Add and Update Google Sheets Rows with an AI Step. Learn n8n's three core Google Sheets moves on a made-up request list: read the rows, add a new one without duplicates, then let an AI step write a description and update each row. You do every step yourself in a practice copy of n8n, it checks your work as you go, and “Do it for me” finishes any step you get stuck on. Free, and nothing touches your real accounts.
Start the free lessonWhen is plain Append row the right choice?
When every run really is new data and you want a log. In the Meeting to Action lesson, each meeting creates new action items, so Append row in sheet is right, and the lesson says so: for a form that can be sent twice you would pick Append or update instead. The meeting notes lesson warns the other way: every Execute step adds rows again, so don't click it twice.
What errors can Append or update row give?
- No Column to match on. The node needs one; pick it from the list.
- The match column isn't mapped. The value used to search must be in the mapped fields.
- Column names changed. If someone renames a header after you set up the node, reopen it so n8n reloads the columns.
n8n Google Sheets Errors covers the messages in detail.
Key takeaways
- Append row always adds a row, so repeated runs create duplicates.
- Append or update row updates the row whose match column has the same value, or appends if none does.
- Match on a unique, stable column such as Email or an invoice number.
- Prove it by running the workflow twice and counting rows.
Frequently asked questions
- How do I avoid duplicates in Google Sheets with n8n?
Use the Google Sheets operation Append or update row and set Column to match on to a unique field like Email.
- What is "Column to match on" in n8n?
It is the column n8n uses to find an existing row. If an item's value is already in that column, n8n updates that row instead of adding a new one.
- Can I match on two columns?
The node matches on one column. Combine two values into one key column (for example vendor plus invoice number) if you need both.
- Where can I learn more n8n sheet patterns?
The n8n Google Sheets Node Cheat Sheet and the free n8n Intermediate course.


