Row Upsert Between Two Datasets

Replace matching CSV records from an update table, append new keys and export an action record alongside the result.

Inputs stay on your device No sign-up Free to use
How this works

The tool runs in this browser. Your file or text is not uploaded to UseFreeTools. Check this tool's limits for anything it may save on your device.

Privacy details

Apply row updates controls

Showing an example. Edit to see your own.

Paste the table you want to keep as the starting point. Up to 100,000 data rows, 500 columns and 2,000,000 cells.

The same headings as the base table, in any column order. A blank cell replaces the base value with an empty value on purpose.

The heading present in both tables whose values are unique and nonblank.

The same delimiter is used to read both tables.

A cell whose first visible character is = + - or @ receives an apostrophe in the downloads. Turn it off to keep the raw value.

Processed in your browser. Your inputs stay on this device.

How to use Row Upsert Between Two Datasets

  1. Paste the base and update tables with the same unique header names.
  2. Enter the unique, nonblank text key column.
  3. Review how matching records, empty update cells and new keys will be handled.
  4. Export the combined table and the updated/inserted/unchanged action record.

Example: Row Upsert Between Two Datasets

Update one key and insert another.

You add
Base: id,name,qty 1,Ada,1 2,Ben,2. Updates: id,qty,name 2,3,Ben 3,4,Chloe. Key heading: id.
You get
The output has id,name,qty rows 1,Ada,1; 2,Ben,3; 3,Chloe,4. Key 1 is unchanged, key 2 updated and key 3 inserted.

Options

Key column
The same heading must exist in both tables, with unique nonblank keys. Update headings may appear in a different order, but the heading set must match.
Blank update cells
An empty cell is an intentional replacement with an empty value. It does not mean keep the corresponding base cell.

Supported inputs and limits

Each table has a 20 MiB, 100,000-row, 500-column and 2,000,000-cell cap. Header sets must match; update columns can be reordered. Unique nonblank keys are compared as text. A matched update replaces every non-key cell, including blanks. Unmatched base rows stay; new keys append in update order. No database or source file is changed.

Where your input is processed

This tool processes your input in this browser. Your text and files are not uploaded to UseFreeTools. Check this tool's limits for anything it may save on your device.

Replacement happens at the record level

An existing key takes its supplied update row, and a new key is appended. Base rows without an update remain in their source order. This makes the update table a complete replacement record for each named key rather than a sparse cell patch.

Check blanks before replacing records

A blank update cell can erase a previously populated value. Review the changed-row report and the downloaded table before importing it elsewhere. The tool creates a new file and does not update a database or overwrite the original export.

Questions about Row Upsert Between Two Datasets

Does an empty update cell keep the old value?

No. The update record replaces all non-key cells for a matching key. An empty cell deliberately clears that value.

Can update headers be in a different order?

Yes, if both tables have the same unique header names. Update cells are aligned to the base header order.

Will this update a database?

No. The result and action record are local downloads. Applying those files to another system is a separate step.

Project manager: Tony Hines · Content updated 4 October 2026 · Report a problem