Fast answer

Remove Duplicates is a tool; idempotency is an end-to-end property

Use n8n’s Remove Duplicates node when you need to filter repeated items within one input or against a bounded history from previous executions. Use an idempotency design when repeating the same logical request must not repeat a business action—even during simultaneous deliveries, retries, restarts, or uncertain downstream outcomes. Remove Duplicates can be one layer of that design, but it is not automatically an atomic lock, a permanent ledger, or a destination-side guarantee.

Verification recordDocumentation5 August 2026n8n

The exact difference

Deduplication compares items and decides which copies to keep. Idempotency defines the behavior of an operation: applying the same logical request again produces no additional protected effect after the first successful application. That distinction matters because a workflow can remove duplicate input items and still repeat a side effect later, or it can receive two separate executions and remain idempotent because the destination accepts one stable key only once.

QuestionRemove DuplicatesIdempotency design
What is compared?Selected fields, all fields, a value, a higher value, or a later dateA stable key representing one logical operation
Where is state kept?Current input or node/workflow deduplication historyDurable claim/ledger and, where supported, destination API
What is protected?Which items continue from the nodeThe real side effect and its recovery state
What about simultaneous runs?Do not assume a general atomic cross-execution lockRequires an atomic claim at the collision boundary
What about failure after the check?Outside the node’s filtering decisionHandled through processing, completed, and recovery states

If you are investigating why two requests arrived, read Why Your n8n Webhook Fires Twice. If you already know repeat delivery is possible and need the full implementation architecture, use How to Prevent Duplicate Webhook Executions in n8n. This page helps choose the correct layer.

What the Remove Duplicates node actually does

Remove items repeated within the current input

This operation compares items arriving at the node in the same execution. You can compare all fields, all fields except selected ones, or selected fields. It is the right tool after a list, pagination, merge, or split step produces repeated rows in one batch. It has no need to remember what a previous workflow run processed.

Example: an API returns ten contacts, two with the same stable contact ID. Comparing the selected contact_id field can pass one copy downstream. Comparing the entire object may fail to recognize them as duplicates if a timestamp or display field differs.

Remove items processed in previous executions

This operation compares the current input to stored values from earlier executions. The documented Keep Items Where choices include value is new, value is higher than previous values, and date is later than previous dates. For Value Is New, the value should be a unique ID or a combination of fields that forms one.

The history can use node scope, which isolates one Remove Duplicates node, or workflow scope, which shares history across nodes configured for that scope. n8n documents a default history size of 10,000 items for the new-value mode. A bounded history is useful and predictable only when you compare it with the source’s repeat window and volume.

Clear deduplication history

This operation resets stored comparison data for the selected scope. It does not clean the current items. Once history is cleared, an old value can be considered new again. Treat this as a behavior change with a rollback plan, especially if downstream actions are not independently idempotent.

Which one should you use?

Use caseRecommended starting layerReason
Duplicate rows in one fetched pageCurrent-input Remove DuplicatesOne execution already contains every copy
Do not notify twice for recently seen feed IDsPrevious-execution Remove DuplicatesBounded history may match the consequence and replay window
Only process records with a newer sequence/datePrevious-execution higher-value or later-date modeThe documented comparator expresses the intended rule directly
Never charge the same event twiceAtomic idempotency claim plus payment API keyThe effect crosses systems and may have an unknown outcome
Prevent two runs editing the same file/customerKeyed durable lease or lockThe collision is concurrent ownership, not merely repeated input
Prevent any workflow overlapRuntime/schedule correction plus workflow-wide guardExecution state and capacity are the governing concerns

A useful rule is proportionality. If a duplicate produces a harmless repeated log row that can be cleaned later, bounded node history may be sufficient. If it sends a customer message, consumes a paid API call, mutates inventory, or transfers money, design for concurrent attempts, downstream idempotency, and recovery.

Where Remove Duplicates stops being enough

  1. 01

    History boundary

    When volume exceeds the retained history or an operator clears it, an older ID may become eligible again. Compare the configured history with the provider’s retry, replay, and backfill windows.

  2. 02

    Concurrency boundary

    Two executions can arrive almost simultaneously. Do not infer a cross-worker atomic claim from the fact that a node remembers previous executions. Test concurrent delivery, or use storage with a documented unique constraint or conditional write.

  3. 03

    Side-effect boundary

    The node controls which items leave it. It cannot undo an action placed before it, and it cannot force a third-party API to recognize a repeat submitted after a timeout. Guard immediately before the action and pass a destination idempotency key where supported.

  4. 04

    Failure boundary

    A binary seen/not-seen record cannot express “claimed but outcome unknown.” Critical workflows need states such as processing, completed, retryable failure, and reconciliation required.

  5. 05

    Scope boundary

    Node scope, workflow scope, and business scope are not interchangeable. Two workflows that can perform the same business action may need one shared external ledger even if each has its own node history.

Concurrency controls do not erase these boundaries. On n8n Cloud, production executions beyond the plan’s regular-mode concurrency limit queue and later process in FIFO order. In queue mode, worker concurrency controls how many jobs workers process. Both regulate capacity; neither makes two identical business events equivalent.

How to combine Remove Duplicates with idempotency

The node can reduce noise before a stronger guard. A practical layered flow is:

  1. Authenticate the request. Reject invalid signatures or credentials before trusting the event ID.
  2. Normalize input. Create a stable key from documented provider identifiers and required account scope.
  3. Remove duplicates within the current input. Use selected fields when one webhook payload contains repeated items.
  4. Optionally filter recent historical noise. Use previous-execution mode only when its history size and reset behavior suit the use case.
  5. Atomically claim the business key. Let only one execution own the protected operation across relevant workflows and workers.
  6. Run the side effect with the same key. Supply a destination idempotency key where the API supports it.
  7. Persist the outcome. Mark completed only after confirmed success; route unknown outcomes to reconciliation.
  8. Acknowledge and audit. Return the provider-appropriate response and retain minimal safe evidence for the kept and discarded attempts.

For providers with strict response windows, combine this with the safe early-response design in How to Respond to Webhooks Immediately in n8n. A fast acknowledgement reduces retries, while the idempotency layers make retries safe when they still occur.

Verification tests

Test A: duplicates in one input

Send one execution a list containing two items with the same selected key and one item with a new key. The current-input node should keep one copy of the repeated key and the new item. Change a non-key field and confirm selected-field comparison still identifies the duplicate.

Test B: duplicate across executions

Run an event with key demo-001, then run it again in a later execution. The previous-execution node should keep it first and discard it second. Confirm a new key passes. Record the node/workflow scope and history size used for the test.

Test C: duplicate inside the same first execution

Give previous-execution mode two identical items before any history exists. This verifies the documented distinction: without a current-input node first, both may be kept because neither came from a previous execution.

Test D: near-simultaneous business action

Send the same logical event through two concurrent test requests toward a reversible or sandboxed side effect. Confirm exactly one atomic claim succeeds and exactly one protected action occurs. This is the idempotency test; a sequential node-history test does not replace it.

Test E: failure after claim

Force a safe downstream failure after ownership is recorded. Confirm the record does not become a false permanent success, and that retry or reconciliation follows the state policy. Then restore the destination and verify the action still occurs no more than once.

Common mistakes

  • Comparing an entire object when timestamps or volatile fields differ between otherwise identical events.
  • Choosing a customer email or status as a key when multiple legitimate events can share it.
  • Using previous-execution mode but expecting it to collapse duplicates inside the same first input.
  • Clearing history during troubleshooting without considering which old actions can run again.
  • Assuming a 10,000-item default covers a 30-day retry window without calculating event volume.
  • Placing the protected action before the deduplication or claim step.
  • Using a workflow-wide guard when only one customer or order needs serialization.
  • Storing entire sensitive webhook payloads when a scoped identifier and audit metadata are sufficient.

FAQs

Can I use only two Remove Duplicates nodes?

Yes for cases where current-input filtering plus bounded cross-execution history matches the risk. No universal rule makes that sufficient for irreversible, concurrent, or cross-system actions.

Is a Data Table automatically idempotent?

No. It provides useful row operations and visible persistent state, but your claim sequence still needs atomic behavior at the relevant scope. A lookup followed by an insert can race unless the backing operation prevents two winners.

Does queue mode make Remove Duplicates safer?

Queue mode changes how executions are distributed to workers and how capacity is controlled. It does not by itself define a per-event atomic claim or destination recovery behavior.

Sources and change log

Change log

Initial publication, verified against current n8n documentation on 5 August 2026. This comparison makes no claim that node history is an atomic lock; datastore and destination guarantees must be verified separately.