Guide · Missing records
Find the records that are in one list but not the other
Two systems that should hold the same records rarely do: customers in the CRM that were never set up in billing, employees in the HR system that are missing from payroll, members on the register who are not on the mailing list. CSV Compare matches two exports on a shared ID and lists every ID that appears on only one side. You do not need any amount or other column to do this; the ID alone is enough.
Try the free demo ↗ See licenses and prices ↗
Les denne veiledningen på norsk
1. Find an ID both systems share
- Use a number both systems store for the same record, such as the customer number, employee number or member number. If one system keeps the other’s number in a reference field, export that field as its own column.
- Matching is exact and case-sensitive after surrounding spaces are removed.
C-305andc-305are two different IDs, and so are00125and125. Make both exports write the ID the same way before you compare. - An email address can work as the ID, but only if both systems store it in the same letter case. If they do not, convert both columns to lower case in your spreadsheet first, for example with
=LOWER(A2). - Each ID must appear once per file. Repeated IDs are reported as duplicates and left out of matching on both sides until each file has one row per ID.
2. Export the same scope from both systems
- Apply the same filters on both sides: active and inactive records, archived records, test accounts and date ranges. A different filter is the most common reason for a long “only on one side” list.
- Remove total rows at the end of the export. A row without an ID in one file marks every record missing from that file as “unresolved” until it is fixed, because the app cannot rule out that the empty row is the missing record.
3. Map only the ID and compare
- Map the ID column as the record key on both sides. Leave amount and currency set to “Do not compare” and add no text fields.
- Choose Compare exports. With only the key mapped, a match means the ID is present on both sides; nothing else about the two records is checked. To check names or statuses as well, pair those columns as text fields.
Example: customers in the CRM and in billing
| customer_no | name |
|---|---|
| C-301 | Nordlys AS |
| C-302 | Fjord Bakeri |
| C-303 | Berg Regnskap |
| C-304 | Vik Maling |
| c-305 | Lund Elektro |
| customer_id | company | plan |
|---|---|---|
| C-301 | Nordlys AS | Standard |
| C-302 | Fjord Bakeri | Basic |
| C-304 | Vik Maling | Standard |
| C-305 | Lund Elektro | Basic |
| C-306 | Haug Transport | Standard |
Map customer_no to customer_id as the record key. Leave every other column unmapped.
| Customer ID | Report status | What to check |
|---|---|---|
| C-301, C-302, C-304 | Mapped fields match | The ID is in both systems. Names and plans were not compared. |
| C-303 | Only on left | Berg Regnskap is in the CRM but has no billing account. Never set up, or not a customer yet? |
| c-305 | Only on left | Written with a lower-case c in the CRM. |
| C-305 | Only on right | The same customer in billing. Fix the case in the CRM and these two entries disappear. |
| C-306 | Only on right | Haug Transport is billed but missing from the CRM. |
That is 3 matches and 4 review entries, one of them a formatting slip rather than a missing customer.
Copy the example as CSV text
Paste each block into the left and right text boxes of the demo. Choose comma for both files and map only the customer ID as the record key.
customer_no,name C-301,Nordlys AS C-302,Fjord Bakeri C-303,Berg Regnskap C-304,Vik Maling c-305,Lund Elektro
customer_id,company,plan C-301,Nordlys AS,Standard C-302,Fjord Bakeri,Basic C-304,Vik Maling,Standard C-305,Lund Elektro,Basic C-306,Haug Transport,Standard
4. What each result means
| Report status | What to check |
|---|---|
| Mapped fields match | With only the key mapped: the ID is present on both sides. Other columns were not compared. |
| Only on left / Only on right | Export filters, letter case, leading zeros and spaces inside the ID, then whether the record really is missing. |
| Duplicate left key / Duplicate right key | The same ID twice in one file: a duplicate record, or an export with one row per line item, contact or address. Get to one row per ID. |
| Invalid left row / Invalid right row | A row with an empty ID. Fix or remove it and compare again. |
| Unresolved left record / Unresolved right record | The ID is on one side only, but the other file has a row without an ID. Fix the empty ID before concluding that anything is missing. |
| Text differs | Only if you paired text fields: the report names the field that differs. |
When a spreadsheet is enough
For a one-off check of a few hundred IDs, XLOOKUP or COUNTIF in a spreadsheet does the job. CSV Compare helps when you repeat the check every month, when the files use different delimiters or column names, or when you want duplicates and empty IDs flagged instead of silently matched to the first hit.
Privacy and limits
The comparison runs in your browser tab. The app makes no network requests while it compares, saves no input to browser storage and contains no analytics, so customer and employee lists are not uploaded. The free demo handles up to 50 data rows and 2 MiB per file; the full version handles up to 10,000 data rows and 2 MiB per file, offline after you extract the ZIP. IDs are matched exactly. Fuzzy matching on names, merging records and writing back to either system are not included.
Related: compare two CSV files · reconcile order or invoice exports · compare two Excel sheets via CSV · format guide · see licenses and prices
Two exports, one ID