Back to homepage
CSV comparison guide

How to compare a CSV file with a Google Sheet

You downloaded a CSV from your bank, Shopify or your CRM, and you need to know how it differs from the sheet you already keep. Here is how to reconcile a CSV export by hand with formulas, and how to get the same answer in one step with SheetDiff.

Quick answer

Bring the CSV into the same spreadsheet as a new tab, then match rows on a column both files share, such as a transaction ID, order number or email address. Comparing row 2 with row 2 rarely works for exports: the source system sorts rows its own way, and one new transaction shifts every row below it.

Step 1: Import the CSV as a new tab

  1. Open your Google Sheet and choose File → Import → Upload, then select the CSV.
  2. Set Import location to Insert new sheet(s) so your existing tab is left alone.
  3. Leave the separator on Detect automatically and click Import data.
  4. Rename the new tab to something short, such as CSV.

If your IDs have leading zeros (00123) or are long reference numbers, untick Convert text to numbers, dates, and formulas during import. Google Sheets then keeps them exactly as they appear in the file instead of turning them into numbers.

Step 2: Find what's missing between the two lists

Suppose your own tab is called Main, the export is in CSV, and both have the ID in column A. In an empty column of Main, this lists every ID that is not in the export:

=FILTER(A2:A, A2:A<>"", ISNA(MATCH(A2:A, CSV!A2:A, 0)))

Put the mirror-image formula in an empty column of the CSV tab, with Main!A2:A as the lookup range, to list rows that appear only in the export. Those are usually the new transactions, orders or contacts you have not recorded yet.

Step 3: Check which values changed

For records that exist in both files, compare one column at a time. If the amount is in column C, fill this down beside your data:

=IFERROR(IF(C2=XLOOKUP(A2, CSV!A:A, CSV!C:C), "", "Changed"), "Not in CSV")

Repeat it for status, date or any other column you care about. With five or six columns, that becomes a lot of helper columns to build, check and read.

Why CSV comparisons go wrong

  • Text vs numbers: an ID stored as a number in one tab and as text in the other will never match. Re-import with conversion switched off, or compare TO_TEXT() of each key.
  • Hidden spaces: CRM exports often carry trailing spaces. Wrap keys in TRIM() before matching.
  • Number formats: 1,234.50 vs 1234.5, currency symbols, negatives in brackets, or separate debit and credit columns in bank exports.
  • Repeated keys: Shopify's order export puts each line item on its own row, so one order number can appear several times. MATCH and XLOOKUP quietly use the first one.

The one-click way: reconcile a CSV export with SheetDiff

  1. Open your Google Sheet and choose Extensions → SheetDiff → Start.
  2. Upload the CSV in the sidebar. SheetDiff reads it in your browser and adds it to the spreadsheet as a new tab.
  3. Pick the tab you want to compare it with.
  4. Choose how rows are matched: by a key column such as transaction ID or email, by whole row if the export has no ID, or by row order.
  5. Click Compare.

You get counts of rows only in A, only in B, changed and matching, plus a plain-English summary sentence. Click a row in the sidebar preview to jump straight to it, or open the color-coded SheetDiff Report tab, where row numbers are clickable. Changed amounts show the difference, for example +5 (+5.6%). Your own tabs are never modified.

Typical CSV exports to compare

  • Bank statement vs bookkeeping sheet: find transactions you have not recorded, or amounts that differ. See the bank reconciliation guide.
  • Shopify or store orders vs fulfilment sheet: spot orders that never made it across, or whose status changed.
  • CRM contacts vs mailing list: match by email to see who is missing from either list.

Which method should you use?

  • Formulas: fine for a one-off check of one or two columns with a clean, unique ID.
  • SheetDiff: better when you repeat the check every week or month, need every column compared, or the export has no ID column at all.
Frequently asked questions

What if my CSV export has no ID column?

Match by whole row. Rows that are identical in both files count as matching, and every other row shows up as only in your sheet or only in the CSV. This works well for mailing lists and other simple lists without IDs.

Does uploading a CSV change my existing tabs?

No. The CSV is added as a new tab, and the comparison results go to a separate SheetDiff Report tab. You can delete the CSV tab afterwards if you no longer need it.

Can SheetDiff ignore small rounding differences in amounts?

Yes, with Pro. Numeric tolerance lets you treat tiny differences, such as a cent of rounding, as a match. On the free plan every numeric difference is reported.

Is comparing a CSV free?

Yes. The free plan compares files of any size, 5 times a day. Every count is exact, and each list shows its first 25 rows. Pro is $10 a year and lists every difference, removes the daily limit, and adds CSV export, multi-column keys, fuzzy matching and numeric tolerance.

Compare a CSV Free Compare Two Tabs