Nouplo

Merge CSV files

The safe way to join exports that no longer match.

Drop files here

or click to choose from your deviceAccepted: CSV, TSV, TXT

Up to 3 files per runUp to 20 MB per file5 runs per dayRemove limits with Pro✓ Works offline

Your files stay on your device

This tool runs entirely in your browser. Nothing is uploaded, nothing is stored, and you can even turn off your internet connection before you start.

Example

Example: three months of shop order exports, one with a new column

For the first-quarter accounts, a small online shop exports orders-jan.csv, orders-feb.csv and orders-mar.csv. In March the shop platform added a Discount code column, third from the left, and February’s file starts with a byte-order mark. Settings: header on, source column Yes — the file name, output Commas, byte-order mark on, name orders-q1.csv.

  1. Columns are matched by name: Order, Date, Customer and Total from all three files land under the same headings, although in March Customer and Total sit one place further right.
  2. Discount code exists only in March, so it is added at the end and left blank for the January and February rows.
  3. February’s invisible byte-order mark is stripped on the way in, so its Order column matches the others.
Order Date Customer Total Discount code source file
1041 2026-01-04R. Patel24.50orders-jan.csv
1045 2026-02-19R. Patel24.50orders-feb.csv
1046 2026-03-02K. Murphy36.90SPRING10orders-mar.csv
1047 2026-03-15J. Owen55.00orders-mar.csv

orders-q1.csv holds all 8 orders under one header, with the note “8 rows from 3 files. Columns matched by name; 1 appeared only in later files and are blank where a file had no value.” Joined end to end instead, March’s discount codes would have sat under Customer and the names under Total.

How it works

  1. Add two or more CSV files. Commas, semicolons and tabs are all read; you do not have to say which.
  2. Leave the header switch on unless the files genuinely have no header row.
  3. Turn on the source column if you will need to know later where a row came from.
  4. Merge and download.

Frequently asked questions

Why not just concatenate them?
Because that is how you get a file that looks right and is wrong. Two exports of the same report a month apart often have a column added or moved; joined by position, every value after that point lands under the wrong heading and nothing complains. Here the columns are matched by name, and the union of all the headers becomes the output.
What if one file has a column the others do not?
It becomes a column in the output and the rows from the other files are blank in it, rather than shifted. The note afterwards tells you how many columns that happened to, so a surprise is visible.
Can I mix a semicolon file with a comma one?
Yes. The separator is worked out per file by counting them outside quotes, so an export from a German Excel and one from a script join without anything being said. You choose the separator for the output separately.
My first column is called id and will not match.
That is a byte-order mark, invisible and attached to the first header. It is stripped on the way in, so the column matches the same one in a file without it — which is the whole reason that particular join usually fails.
Why offer to add a byte-order mark on the way out?
Because Excel on Windows reads a UTF-8 CSV as the local codepage unless one is there, which is what turns accented names into mojibake. If the file is for Excel, turn it on; if it is for a script, leave it off.
In what order do the rows come out?
File by file, in the order you added them, and within each file as they were; nothing is sorted or de-duplicated. The columns follow the first file, and any column only a later file has is added at the end.
What are the free limits?
Three files per run, 20 MB per file and 5 runs a day. Pro removes all three.

Related tools