---
title: "Rent payments checked against bank CSVs and a local workbook"
kind: "Kit"
category: "Finance & accounting"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/0b1bd24b-d22f-4db3-955e-a84a4ca32249"
updated: "2026-11-12"
---

# Rent payments checked against bank CSVs and a local workbook

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that watches a folder for bank statement CSVs. An AI agent checks each one against tenants and properties in a local Excel workbook, then writes alerts to a sheet of the same workbook.

Rent payments checked against bank CSVs and a local workbook is an n8n workflow in the Finance \& accounting category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-12. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow checks rent against bank statements. It watches a folder for CSV files and gives each statement to an AI agent, which looks up tenants and properties in a local Excel workbook. It flags missed or wrong rent, tenancies that end soon and unpaid final fees. The alerts go to a sheet of the same workbook. Eleven nodes run it, beside six sticky notes.

### Who it suits

Small landlords and property managers who run their own n8n and keep tenant records in a spreadsheet. Skip it on n8n Cloud, which cannot see your folders, and skip it if you cannot send statement rows to OpenAI.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Property | Landlords | Check a month of rent against the tenant list | A landlord drops in a statement and sees which tenants paid late or short. |
| Letting | Letting agents | Review many tenancies in one pass | An agent runs the statements of a block of flats and reads the alerts. |
| Accounting | Bookkeepers | Flag rent exceptions for a client | A bookkeeper gets a list of tenants whose payment is missing. |
| Housing | Housing teams | Track final fees at the end of a tenancy | A team sees a leaving tenant who still owes a fee. |

You need some n8n and a little spreadsheet work: allow two things in n8n, make a workbook, add one credential and drop in a CSV.

### Where to use it

Only a self-hosted n8n, since the trigger and the workbook code work on the files of the machine that runs n8n. The reasoning comes from OpenAI’s cloud.

- Your own n8n server: the same file, with the folder mounted into n8n’s container if you use Docker
- OpenAI: the model that reads the statement and calls the lookups
- An Excel workbook: the tenants, the properties and the alerts
- n8n Cloud: not suitable, because it cannot reach your folders

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Setup takes one credential, two paths and a workbook with three sheets.

What you need first

| Need | Detail |
| --- | --- |
| n8n | A self-hosted n8n with \`Local File Trigger\` allowed and the \`xlsx\` module available to code |
| Folder | A folder n8n can reach, with a backup of everything in it |
| Workbook | \`reconciliation-workbook.xlsx\` with the sheets \`tenants\`, \`properties\` and \`alerts\` |
| Statements | CSV files with \`date\`, \`reference\`, \`money\_in\` and \`money\_out\` in the first row |
| OpenAI | An API key |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an OpenAI credential and select it in `OpenAI Chat Model`.
3. In `Watch For Bank Statements`, set the folder’s path as n8n sees it.
4. In `Set Variables`, set the workbook’s path.
5. Save, then press Publish.
6. Drop a statement CSV into the folder and wait for the run to finish.

### How to use it

Drop a bank statement CSV into the watched folder. After a moment new rows appear on the `alerts` sheet of the workbook. Test on a copy of your files first.

What to change for a different result

| To change | Where |
| --- | --- |
| What counts as a problem | The system message of \`Reconcile Rental Payments\` |
| The model | \`OpenAI Chat Model\` |
| The watched folder | \`Watch For Bank Statements\` |
| The details the agent sees | The sheets \`tenants\` and \`properties\` |

### Example

A landlord has twelve tenants in the workbook and drops in March’s statement. One tenant paid short and another has not paid at all.

The agent looks both tenants up, compares the rent due with the statement rows and returns two alerts. Two new rows appear on the `alerts` sheet, and the earlier state of the workbook is saved as a `.bak.xlsx` copy.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Here one box reads the CSV, an agent compares it with your tenant list and a Code node writes the alerts. Try it first on a made up statement and a workbook with two tenants.

**For experts.** The agent has two Code Tool nodes that read the workbook with SheetJS, and a structured output parser fixes the shape of the alerts. A final Code node appends rows and saves a backup.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Get Tenant Details\` | Looks tenants up by name or ID in the \`tenants\` sheet | It calls \`require('xlsx')\`, so the module must be allowed |
| \`Get Property Details\` | Looks properties up by ID in the \`properties\` sheet | It reads the workbook path from \`Set Variables\` |
| \`Reconcile Rental Payments\` | Compares the statement with the records and answers in JSON | The statement goes in as a Markdown table |
| \`Append To Spreadsheet\` | Adds one row per alert to the \`alerts\` sheet | It saves a \`.bak.xlsx\` copy first, always under the same name |

### Good to know

This workflow rewrites your workbook and sends financial records to OpenAI, so test it on copies and check every alert.

- The repair: OpenAI’s deprecations page, read on 12 November 2026, gives 14 January 2027 as the shutdown date of the \`gpt-4o\` snapshots. This copy names \`gpt-5.6-terra\`, because OpenAI’s page for \`gpt-6-luna\` limits function calling on Chat Completions
- Two small fixes: the agent’s instructions now ask for \`action\_required\`, which the parser and the Code node use, and the workbook name is spelled \`reconciliation-workbook.xlsx\`
- Node settings: n8n’s 2.0 breaking changes, read on 12 November 2026, list \`LocalFileTrigger\` as disabled by default, and \`NODES\_EXCLUDE\` brings it back
- Modules: n8n’s documentation says external modules need \`NODE\_FUNCTION\_ALLOW\_EXTERNAL\`, and the variable goes on the task runners when you use them
- Half written files: the trigger’s wait for a finished write is off, so a large CSV may be read early
- The backup: it keeps one name, so it holds only the state before the latest run
- Judgement: the agent decides what is wrong, and a person should check the alerts
- Your data: the statement rows and the tenant and property records the agent asks for go to OpenAI
- Credentials: the JSON holds none

## README

```markdown
# Rent payments checked against bank CSVs and a local workbook

An n8n workflow that watches a folder for bank statement CSV files. An AI agent checks each statement against tenants and
properties kept in a local Excel workbook. It flags missed or wrong rent, tenancies that end soon and unpaid final fees, and
it writes the alerts to a sheet of the same workbook. It needs a self-hosted n8n.

## What is inside

- `workflow.json`: the workflow as n8n exports it, seventeen nodes: eleven that do the work and six sticky notes. It holds
  no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The credential link on `OpenAI Chat Model` is gone. Select your own.
- The model was `gpt-4o`. OpenAI's deprecations page, read on 12 November 2026, gives 14 January 2027 as the shutdown date of
  the `gpt-4o` snapshots and names `gpt-6-luna`. OpenAI's page for that model says Chat Completions supports function
  calling only with reasoning effort set to none, and this agent calls tools, so the node now names `gpt-5.6-terra`.
- The agent's instructions asked for a field named `action required`, with a space. The output parser and the last Code
  node use `action_required`, so the instructions now say that.
- The workbook name was spelled `reconcilation-workbook.xlsx`. It is `reconciliation-workbook.xlsx` now.
- The notes are rewritten as short notes about each step.
- Nothing else.

## Before you start

- A self-hosted n8n. The trigger and the workbook code use the files of the machine that runs n8n.
- The Local File Trigger node enabled. n8n's 2.0 breaking changes, read on 12 November 2026, list it as disabled by
  default, and removing it from `NODES_EXCLUDE` brings it back.
- The `xlsx` module available to code. The Code node and both code tools call `require('xlsx')`. n8n's documentation says external
  modules need `NODE_FUNCTION_ALLOW_EXTERNAL`, and that the variable goes on the task
  runners when you use them.
- A folder that n8n can reach. The file uses `/home/node/host_mount/reconciliation_project`, a path in a Docker setup.
- A workbook named `reconciliation-workbook.xlsx` in that folder, with three sheets.
  - `tenants` needs the columns `Tenant ID` and `Tenant Name`, plus the terms, rent amount and notes you want the agent to see.
  - `properties` needs `Property ID`, plus the address, postcode and type.
  - `alerts` needs a header row, and the workflow appends below it.
- Bank statement CSV files with the columns `date`, `reference`, `money_in` and `money_out` in the first row.
- An OpenAI API key.
- A backup of the workbook. The workflow rewrites it.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an OpenAI credential and select it in `OpenAI Chat Model`.
3. In `Watch For Bank Statements`, set the folder's path as n8n sees it.
4. In `Set Variables`, set the workbook's path.
5. Save, then press Publish.
6. Drop a statement CSV into the folder and wait for the run to finish.

## How a run goes

1. `Watch For Bank Statements` fires when a file is added. Its ignore pattern, `!**/*.csv`, is meant to skip everything that
   is not a CSV.
2. `Set Variables` keeps the workbook's path.
3. `Get Bank Statement File` reads the CSV and `Get CSV Data` turns each row into an item.
4. `Reconcile Rental Payments` is an AI agent. It gets the statement as a table, and it can call `Get Tenant Details` and
   `Get Property Details`, two code tools that read the workbook.
5. The agent answers with a list of alerts, and `Structured Output Parser` holds it to one shape.
6. `Alert Actions To List` makes one item per alert, and `Append To Spreadsheet` adds one row each to the `alerts` sheet.

## Change the look

- What counts as a problem: the system message of `Reconcile Rental Payments`.
- The model: `OpenAI Chat Model`.
- The watched folder: `Watch For Bank Statements`.
- Which columns the agent sees about a tenant or a property: the sheets themselves, since the tools return whole rows.

## Good to know

- This workflow changes your workbook. `Append To Spreadsheet` saves a copy first, next to the workbook with `.bak.xlsx` added
  to its name. The same name is used each time, so the copy holds only the state before the latest run.
- The trigger does not wait for a file to finish writing, because its option for that is off by default. A large CSV may be
  read half written.
- The agent decides what is wrong. Check its alerts before you act on them.
- A long statement goes into the prompt in full and can pass the model's limits.
- The statement rows and the tenant and property records the agent asks for go to OpenAI.
- The JSON holds no credential.
```

## What is in it

3 files, 19 KB, downloaded as a zip.

```text
NOTICE.md  678 B
README.md  5 KB
workflow.json  13 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 7 steps, starting on its trigger node
- AI: 1 step calls an AI model: Reconcile Rental Payments
- Sign-ins: Signs in to: OpenAI
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads 6 of its 7 step types. It does not read: Local File Trigger

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/0b1bd24b-d22f-4db3-955e-a84a4ca32249)
- [Its page on Mindket](https://mindket.com/p/0b1bd24b-d22f-4db3-955e-a84a4ca32249)
