# n8n Append or Update Row: Stop Duplicate Sheet Rows

> Why n8n adds the same Google Sheets row on every run, and how Append or update row with Column to match on fixes it, with a test that proves it.

Source: https://learn.ynteractive.com/content/blog/n8n-append-or-update-row · Updated 2026-10-20 · Free from Stepthrough (https://learn.ynteractive.com)

Quick answer

n8n adds [duplicate rows](https://learn.ynteractive.com/content/glossary/remove-duplicates) when a workflow uses **Append row in sheet**, because append always writes a new row, even for a person who is already there. Switch the node to **Append or update row** and set **Column to match on** to a column that is unique per record, such as Email: n8n then updates the existing row when it finds that value and appends only when it doesn't. The free [n8n Google Sheets lesson](https://learn.ynteractive.com/content/n8n-google-sheets-read-append-update) fixes exactly this flaw in a popular template.

Last updated October 20, 2026

[Take the free module →](https://learn.ynteractive.com/courses/n8n-jump-start/12)Module 12 of the free [n8n Jump Start](https://learn.ynteractive.com/courses/n8n-jump-start) course, about 12 minutes. No account needed.

By [Robert Breen](https://learn.ynteractive.com/content/about) · Published October 20, 2026 · Updated October 20, 2026 · 4 min read

n8n · Google Sheets · Troubleshooting

## Why does my n8n workflow keep adding the same row?

[Append row](https://learn.ynteractive.com/content/glossary/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](https://learn.ynteractive.com/content/glossary/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 | Email | 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 lesson](https://learn.ynteractive.com/modules/n8n-google-sheets-read-append-update)

[Or read the full step-by-step guide](https://learn.ynteractive.com/content/n8n-google-sheets-read-append-update)

## When 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](https://learn.ynteractive.com/content/meeting-notes-to-action-items-sheet-and-deck-chatgpt-n8n-gamma), 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](https://learn.ynteractive.com/content/meeting-notes-to-action-items-google-sheets-ai-n8n) 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](https://learn.ynteractive.com/content/blog/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](https://learn.ynteractive.com/content/blog/n8n-google-sheets-node-cheat-sheet) and the free [n8n Intermediate](https://learn.ynteractive.com/courses/n8n-intermediate) course.

## Free lessons in this post

- [n8n: Read, Add and Update Google Sheets Rows with an AI Step](https://learn.ynteractive.com/content/n8n-google-sheets-read-append-update): 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…
- [Meeting to Action: Recap, Tracker Rows and a Kickoff Deck (ChatGPT, n8n, Gamma)](https://learn.ynteractive.com/content/meeting-notes-to-action-items-sheet-and-deck-chatgpt-n8n-gamma): Turn rough meeting notes into a checked recap in ChatGPT, four action-item rows in a Google Sheet through n8n, and a five-slide kickoff deck in Gamma.

## Watch it in a free lesson: n8n AI Agent Tutorial: Save Social Media Ideas to Google Sheets

### AI Social Media Idea Agent: video walkthrough

Full walkthrough · 8:07 · with captions

Build an AI agent for BrightPath Marketing that generates social media post ideas and saves them to Google Sheets — chat trigger, AI Agent, system prompt, model, memory, and the Sheets tool. The whole lesson narrated step by step, recorded in Stepthrough’s simulated practice environment.

[Watch it with chapters and the full transcript](https://learn.ynteractive.com/content/n8n-ai-agent-tutorial-google-sheets#watch)

From the free lesson [n8n AI Agent Tutorial: Save Social Media Ideas to Google Sheets](https://learn.ynteractive.com/content/n8n-ai-agent-tutorial-google-sheets)

## Related terms

Plain-English definitions, each with an example from a free lesson.

[Remove duplicates (deduplication)](https://learn.ynteractive.com/content/glossary/remove-duplicates) · [Append row](https://learn.ynteractive.com/content/glossary/append-row) · [n8n template](https://learn.ynteractive.com/content/glossary/n8n-template) · [Miro](https://learn.ynteractive.com/content/glossary/miro) · [n8n data store node (Data table)](https://learn.ynteractive.com/content/glossary/data-store-node) · [Upsert](https://learn.ynteractive.com/content/glossary/upsert) · [AI data entry](https://learn.ynteractive.com/content/glossary/ai-data-entry) · [Idempotency](https://learn.ynteractive.com/content/glossary/idempotency)

[The full AI glossary](https://learn.ynteractive.com/content/glossary)

## Keep reading

- [n8n Google Sheets Errors: Sheet Not Found and 5 More](https://learn.ynteractive.com/content/blog/n8n-google-sheets-errors): Fix n8n Google Sheets errors: "Sheet with ID gid=0 not found", "At least one value has to be added under Values to Send", permissions and columns.
- [n8n Workflow Ideas for Agencies: 9 to Build](https://learn.ynteractive.com/content/blog/n8n-workflow-ideas-for-agencies): Nine n8n workflow ideas for agencies and consultants: weekly client status drafts, kickoff recap to tracker and deck, content requests and more.
- [n8n Google Sheets Node Cheat Sheet: Get, Append, Update](https://learn.ynteractive.com/content/blog/n8n-google-sheets-node-cheat-sheet): Every n8n Google Sheets operation on one page: Get row(s), Append row, Append or update row, Update row, Column to match on and Map Automatically.

[All blog posts](https://learn.ynteractive.com/content/blog) · [All free tutorials](https://learn.ynteractive.com/content)
