Guide · CSV files
Compare two CSV files without uploading them
Two exports that should list the same records rarely agree line for line. CSV Compare lines them up by a record ID you choose, such as an order, invoice or product number, and lists what is missing, changed or duplicated. It runs in your browser tab, and the files are not uploaded.
Try the free demo ↗ See licenses and prices ↗
Les denne veiledningen på norsk
2 MiB per file
2 MiB per file
Comma, semicolon or tab delimiter
Before you start
- Two CSV or TSV files. Comma, semicolon and tab delimiters all work. Save the files as UTF-8 so that letters such as é or ø read correctly. Excel workbooks must be saved as CSV first: see how to compare two Excel sheets.
- A shared record ID. One column in each file must identify the same record, for example an order number. The column names may differ, such as
record_idin one file andorder_idin the other. - One row per ID. When an ID appears twice in a file, the app reports a duplicate instead of guessing which row is right.
- The same scope. Export the same period with the same filters from both systems. Otherwise a difference may only mean that the exports cover different records.
Step by step
- Load both files. Open the free demo and choose a left and a right file, or paste the CSV text. A preview of the first five rows shows how each file was read.
- Check the delimiter. The app suggests comma, semicolon or tab, and quoted cells may contain delimiters. If the suggestion is unclear, choose the delimiter yourself.
- Choose the decimal separator for each file if you will compare amounts: dot (1234.56) or comma (1234,56). It is never guessed.
- Map the record key on both sides. If exactly one unique column is named like
id,order_idorinvoice_number, the app suggests it; review the suggestion. - Choose what to compare. Optionally map an amount and a currency column on both sides, and pair text columns such as
status → state. Columns you leave out are listed as not compared. - Compare and review. Choose Compare exports, filter the review entries or search for an ID, then download the full report or the current view as CSV. To repeat the same check later, export a mapping profile: it stores your settings, not your rows.
Example: two product lists
A small business exports its product list from its web shop and from its stock system. Both files identify products by the same number, but the column names differ.
| sku | price | status |
|---|---|---|
| SKU-100 | 199.00 | active |
| SKU-101 | 349.00 | active |
| SKU-102 | 89.00 | inactive |
| SKU-104 | 59.00 | active |
| item_no | unit_price | state |
|---|---|---|
| SKU-100 | 199 | active |
| SKU-101 | 379.00 | active |
| SKU-102 | 89.00 | active |
| SKU-103 | 120.00 | active |
Map the record key sku to item_no, the amount price to unit_price with dot decimals on both sides, and the text pair status → state. No currency column is needed here.
| Record ID | Report status | What it means |
|---|---|---|
| SKU-100 | Mapped fields match | 199.00 and 199 are the same decimal amount, and the status is the same. |
| SKU-101 | Amount differs | 349.00 in the web shop, 379.00 in the stock system. |
| SKU-102 | Text differs | The web shop says “inactive”; the stock system says “active”. |
| SKU-104 | Only on left | Not in the stock export. Check that export’s filters before treating the product as missing. |
| SKU-103 | Only on right | Not in the web shop export. |
That is 1 match and 4 review entries. The report shows where the files disagree; deciding which system is right stays with you.
Copy the example as CSV text
Paste each block into the left and right text boxes of the demo to reproduce the result.
sku,price,status SKU-100,199.00,active SKU-101,349.00,active SKU-102,89.00,inactive SKU-104,59.00,active
item_no,unit_price,state SKU-100,199,active SKU-101,379.00,active SKU-102,89.00,active SKU-103,120.00,active
What is compared, exactly
- Record IDs are trimmed and matched exactly. Case counts:
ab-1andAB-1are different IDs. - Amounts are compared as exact decimals, so 1250.00 equals 1250 and -12.50 equals -12.500. Thousands separators, currency symbols and scientific notation are not accepted; such a row is reported as invalid.
- Currencies must be three letters, such as NOK or EUR. They are trimmed and uppercased, and amounts are never converted.
- Text fields are compared character for character, including case, spaces and leading zeros: “01” differs from “1”.
- Duplicate IDs and invalid rows pause matching for that ID on both sides. Rows are never merged or summed.
- Columns you do not map are not compared. A match means only that the fields you selected are equal.
When a spreadsheet formula is enough
For a handful of rows, a lookup formula such as XLOOKUP or VLOOKUP may be the quickest check. A dedicated comparison helps when the check comes back every week or month, when duplicate IDs and malformed amounts should be flagged instead of silently matching the first row, and when you need a report you can hand to someone else.
Your files stay on your device
The comparison runs in your browser tab. While it reads and compares files, the app makes no network requests, saves no input to browser storage and contains no analytics. The demo page is delivered over the web like any other page, but your CSV contents are not sent anywhere. Downloaded reports contain your compared values, so store them as carefully as the source files. The full version is a ZIP file that you extract and open locally; it runs without a network connection.
Limits
- Free demo: up to 50 data rows and 2 MiB per file.
- Full version: up to 10,000 data rows and 2 MiB per file.
- Both: up to 100 columns per file and record IDs of up to 300 characters. The header row does not count as a data row.
- Not included: Excel workbooks (.xlsx), fuzzy matching, currency conversion, combining split invoices and automatic accounting entries.
Related: compare two Excel sheets via CSV · reconcile order or invoice exports · compare two supplier price lists · find records missing from one of two lists · compare a stock count with inventory · worked example with an expected report · format guide · see licenses and prices
Try it with two small files