Quick overview
A monthly accounts-payable check: upload a supplier's statement and each invoice on it is matched to your Google Sheets ledger by invoice number and amount. Every invoice gets one of four results, written to a Reconciliation tab and emailed to you.
How it works
- An n8n form asks for the vendor name, the period (optional) and the statement file (.csv or .xlsx).
- The Settings node holds the only values you edit: spreadsheet id, tab names, column names, date order, CSV delimiter and the summary email address.
- The workflow reads your Ledger tab and the uploaded file. CSV and Excel each go to their own reader; any other file type gets a plain-English error page.
- Both sides are normalised: columns are matched by name, invoice numbers like INV-000123, inv 123 and INV/123 become one, and both 1,240.00 and 1.240,00 are read. Several lines for one invoice are added up.
- Compare Datasets matches on invoice number and amount. Each invoice gets one result: matched, amount differs, missing from your ledger, or not on the statement, with a short "what to do" note.
- One row per invoice is written to the Reconciliation tab (append or update on RowKey, so a re-run corrects rows instead of duplicating them), and a summary is emailed through Gmail and shown on the form's last page.
Setup
- In your spreadsheet, create a Ledger tab (Vendor, Invoice Number, Invoice Date, Amount, Currency, Status) and a Reconciliation tab (RowKey, Run Date, Period, Vendor, Invoice Number, Result, Ledger Amount, Statement Amount, Difference, What To Do, Notes).
- Connect Google Sheets with edit access to that spreadsheet, and connect Gmail (or delete the Email The Summary node).
- In the Settings node, fill in ledgerSheetId (the long id in the sheet URL, between /d/ and /edit) and notifyEmail.
- Activate the workflow, open the form URL (path: /vendor-statement-check), upload a statement and check the Reconciliation tab.
Requirements
- n8n 2.45 or newer (tested on 2.45.6) with a Google Sheets spreadsheet you can edit
- Gmail for the summary email (optional). No AI model, no API key, no paid service
Customization
- US dates: set dateOrder to mdy. European CSV exports: set statementDelimiter to ;
- Other column names: every header name in Settings is a comma-separated list of alternatives, so add yours there
- Slack instead of email: add a Slack node after Build The Digest; to start a payment run, filter Result = MATCHED in a later workflow
Additional info
One statement and one currency per run; amounts are compared exactly to the cent. Lines with no invoice number or an unreadable amount are never dropped: they are written as UNREADABLE LINE with the reason. Nothing is sent outside your n8n instance and your own Google account.