How to reconcile two Google Sheets™ on a key
A step-by-step run through the add-on on a ledger against a bank export. The two tables have different column names, an invoice reference written two ways, one 45p break, and a row missing from each side. Three steps in one sidebar, and the free tier does all of it up to 1,000 rows a side.
Why matching on a key, and not on row order
A reconciliation done by sorting both tables and reading down them fails the moment one side
has an extra row, and it fails silently: everything below the extra row is compared against
the wrong thing. VLOOKUP fails on the first trailing space. Matching on a key does
not care about order, about column names, or about one table having rows the other has
never heard of.
- Column order and column names do not matter. Map
ReferencetoRefonce and the two tables can be in any order at all. - Keys that differ cosmetically still match.
INV-0012,inv 12andINV12are one invoice. So are the text"0012"and the number12, and a date typed as04/03/2026in one table and stored as a real date in the other. - Rounding is not a difference. Amounts are compared to the penny by default, so a floating-point 0.0000001 never shows up as a break, and you can set a wider tolerance per column.
- Sign conventions are handled. One system books credits negative and the other positive: tick sign flip on the amount column and they agree, and the totals still add up.
Before you start
- Google Sheets™ in a desktop browser. Chrome™, Edge, Firefox or Safari. Editor add-ons do not run in the Sheets mobile apps.
- The add-on installed. Extensions › Add-ons › Get add-ons, search for “Two-File Reconciliation”, and install. On a Workspace account your admin may need to allow it first.
- Both tables in one spreadsheet, or the second one as a CSV. The add-on can only see the spreadsheet it is opened in. That is deliberate, and it is why it never asks for your Drive. To bring a tab across from another spreadsheet, right-click the tab, choose Copy to › Existing spreadsheet, and pick this one. The original file stays untouched as evidence. A CSV can be loaded straight into the sidebar instead. It is read in your browser and uploaded nowhere.
- Nothing leaves Google. The matching all happens in the sidebar. The privacy notice says so in full.
If you import a CSV into a tab first
File › Import asks whether to Convert text to numbers, dates and
formulas. Either way works: the add-on reconciles the same file to the same answer with
it on or off. But with it on, Sheets reads dates in the spreadsheet's
locale as it imports. In a US-locale spreadsheet, a UK file's 06/03/2026 becomes
3 June before the add-on ever sees it. If your file's dates are not in the spreadsheet's
locale, import with conversion off, or load the CSV in the sidebar, and
tell the add-on how to read them (step 2).
Step 1: pick the two tables
Extensions › Two-File Reconciliation › Open. Under 1. The two tables, pick Left (usually yours) and Right (the one you are checking against). Each list offers:
- Every tab, read from A1 to the end of its data. The first row is the header.
- Every named range. Use one when the table does not start at A1 or has a title or a total row around it. Data › Named ranges makes one in a few seconds.
- The range you have selected. Select it, then press Refresh the list. Selecting whole columns (
A:D) is fine; the add-on stops at the last row with data.
Report tabs this add-on wrote earlier are left out of the lists, so last month's report is never offered as a source. Which side is which only matters when you read the report: “left only” means rows in your ledger.
Step 2: confirm how the columns line up
Press Match the columns up. The sidebar proposes a mapping by comparing column names and column contents. Every line is marked as a guess (the amber wash) until you change it. Each line has a role:
- key: the column that identifies the same thing in both tables. At least one is required. Two or more (a composite key) is Pro.
- compare: a column whose values should agree. The rule is shown beside it (
± 0.01for amounts,same dayfor dates,exactfor text), and a line underneath changes it: compare as a number with a tolerance either way and a sign flip box, as a date that must be on the same day, within a number of days or in the same month, or as exact or similar text. Similar text is shown for context and never counts as a break. - carry: copied into the report for context, not compared.
- ignore: left out.
A line underneath says what was left over, for example “2 column(s) found no partner and are carried into the report unmatched”. Nothing is dropped for not having a pair.
Matching options
Matching options is where the key clean-up lives. The defaults are the ones that cannot invent a match: ignore spaces, case and punctuation, and ignore leading zeros.
- Dates in these files read as day/month/year or month/day/year.
03/04/2026is two different days depending on who exported the file, and the add-on never guesses. - When a key appears more than once: add the amounts up and compare totals (the default), list them for review without matching, or pair them in order.
- Treat a blank amount as zero: off by default, because whether a blank is a zero is a real accounting question.
- Also match keys that are nearly the same (Pro): off by design. See below.
Near-matching, and why it is off
The add-on can match keys that are only nearly the same. It has to be switched on deliberately, because a wrong near-match is invisible: it puts a tick against a row that never reconciled. When it is on, it only looks at rows that failed to match exactly. Those rows are counted separately, never folded into the clean totals, and every one is listed on the Review tab with both keys quoted so you can check it yourself.
Step 3: reconcile
Press Reconcile. The result is four buckets and one sentence. In the
worked example: 3 rows matched and agree, 1 matched row differs (2,015.50 against 2,015.05),
1 row is left only (640.25) and 1 is right only (300.00). INV-0011 and
INV11 sit in the top bucket together, the same invoice written two ways.
Then the sentence your finance lead actually asks for: “The two files differ by 340.70: 640.25 left only, -300.00 right only, 0.45 in value differences.” The difference is fully explained: a missing invoice, an extra receipt, and one 45p break.
Step 4: write the report
Write the report adds six new tabs, named with today's date, for example
Recon 2026-10-31 · Summary. Run it again and you get a second set beside the
first. Your source tabs are never modified.
- Summary: the four buckets, and the difference split into what explains it.
- Differences: matched rows that disagree, biggest first.
- Left only and Right only: the full source rows.
- Review: anything the run had to assume, such as near-matches, keys appearing more than once or rows added together. Near-matches and amount-and-date matches have an Accept? checkbox.
- Audit: the recipe, both sources, row counts, the time, the version, and every normalisation step that was on.
Google caps a spreadsheet at 10 million cells, the report included. The add-on works out the report's size before writing anything. If it would not fit, it says so and writes nothing. Download as CSV (Pro) has no such limit.
Accepting near-matches
On the Review tab, tick Accept? on the pairs you agree are the same thing, then press Apply review in the sidebar and reconcile again. The accepted pairs now match, and the Audit tab counts them as pairs you accepted. They are never passed off as clean. Save the recipe to keep them for next month.
Step 5: save it as a recipe Pro
Save as a recipe keeps the mapping and every setting, so next month is one click instead of an afternoon. Choose where:
- My recipes (every spreadsheet): kept against your Google account. Next month's new spreadsheet finds it. This is the one you want for a month-end habit.
- In this spreadsheet (anyone who opens it): kept inside the file, so a colleague can run it too, on the free tier, composite key and near-matching included. Changing its key columns is what needs Pro.
Next month: open the new spreadsheet, then Extensions › Two-File Reconciliation › Run a saved recipe…. The sidebar opens at your saved recipes. Pick one and press Load. It finds the tabs or named ranges by name and fills in the mapping and settings. Check the two tables are this month's, press Reconcile, and write the report.
Export saves the selected recipe as a file, and Import a recipe loads one. Use them to share a recipe by email, keep a backup, or move a recipe between this add-on and the Excel add-in. Exporting and importing are free.
What the tiers do
The free tier reconciles up to 1,000 rows a side on a single key column. That is enough to prove it works on your own data, not enough to run a month-end on. When a table is longer, the first 1,000 rows are read and the sidebar says so. Pro lifts the row limit and adds composite keys, near-matching, saved recipes and the CSV export. One key works in Google Sheets™ and Excel. Prices.
Entering a licence key
At the bottom of the sidebar, expand Enter a licence key, paste the key from the end of checkout (or from the email), and press Activate. It works in every spreadsheet on that Google account, on any computer, and takes one of the key's 3 activations. Re-pasting it on the same account does not take another.
Known limits
- Both tables must be in the open spreadsheet, or one of them a CSV. See Before you start for the one-step copy.
- Google's 10-million-cell limit applies to the whole spreadsheet, report included.
- Tested sizes, on real Google Sheets. 200,000 rows a side by 10 columns reconciled and wrote its full report in about six minutes (about four to read, under two to write). 1,000 rows by 2,000 columns, and 10,000 rows by 61 columns, also worked. Around 490,000 rows a side by 10 columns still reconciles, in about ten minutes, but the two tables alone then use nearly all of the 10 million cells, so the report is refused with Nothing was written rather than half written. The report is roughly 0.3 million cells when about 1% of rows differ, and larger when more do, so the usable size depends on how much the two files disagree. Download as CSV (Pro) has no such cap.
- Very large spreadsheets are slow and can make Chrome sluggish. While a file of several hundred thousand rows is being read, other tabs may stop responding for a few minutes. Keep the spreadsheet tab open and in front until it finishes, and leave the rest of the work for afterwards. Loading a CSV of about 60 MB (650,000 rows) into the sidebar took about 40 seconds.
- References longer than 15 digits were already damaged before the add-on saw them. Sheets, like Excel, stores numbers as floating point. The run warns when it finds them; the fix is to store the column as text in the original file.
- Splits and merges, such as one payment settling three invoices with no shared key, are not matched automatically yet. Duplicate keys on one side are handled.
- Desktop browsers only. Editor add-ons do not run in the Sheets mobile apps.
If something looks wrong
Email support@appgarden.co.uk and say what the sidebar showed. If a reconciliation came out wrong, a copy of the two tables is the most useful thing you can send, but only send data you are happy to share, and read the privacy notice first.
Google, Google Sheets™ and Google Workspace™ are trademarks of Google LLC. Two-File Reconciliation is not affiliated with or endorsed by Google.