To reconcile a bank statement against invoices with AI, give an agent the bank export as a CSV and the invoices as a folder. Write down your matching rules. Ask for two files back: a matched sheet with a reason on every match that isn't exact, and an exceptions list that accounts for every line and every invoice that didn't tie out. Pasting the statement into a chat window gets you a table that looks right. It doesn't get you files you keep, a check that nothing was skipped, or a re-run next Friday that remembers this week.
Below is the whole job, done so you can reproduce it: the inputs, the rules, a worked three-month example with an answer key, the exceptions sheet, chasers left as drafts, and the weekly re-run. It doesn't replace QuickBooks or Xero. The ledger is still where matches get posted and the period gets closed.
Why doesn't pasting a bank statement into ChatGPT work?#
Chat can match. What fails is everything around the match.
- It reads what fits, then summarises. A quarter of bank lines plus the invoices can run past what a model holds at once, and past what fits in one chat. As of September 2026, Claude's apps take up to 20 files per chat, and PDFs over 100 pages are read as text only. ChatGPT has its own limits per file and per conversation, set out in OpenAI's File Uploads FAQ. When the input is too big, you rarely get an error. You get a table that quietly leaves out lines in the middle.
- It doesn't prove it read everything unless you make it. With no line count and no control total, a missing deposit looks the same as one that was never there.
- The output lives in the conversation. Both apps can hand back a CSV or spreadsheet to download when file creation is on, but it's a download from a chat, not a file sitting next to your inputs that next week's run picks up. Copying a table out of the chat by hand is where transposition errors creep back in.
- No memory of last week. A partial payment on Tuesday and its balance on Thursday are one invoice. A fresh chat treats them as two stories unless you re-upload last week's result.
- No write-back and no audit trail. TheBookkeeper.ai makes this case in its May 2026 piece on ChatGPT and Claude reconciliation: chat returns text, every match still has to be keyed into the ledger by hand, and "I reconciled it in ChatGPT" is not something you can defend when the books are queried. (They sell a done-for-you service, so read it with that in mind. The points still hold.)
What fixes most of this is an agent that works in a folder. It reads the files with code, can count them, writes results as files next to the inputs, and reads last week's output before starting this week. If you'd rather stay in the Claude or ChatGPT apps, the next section shows how to get the most out of them.
Doing it with Claude or ChatGPT directly#
You can reconcile a bank statement with Claude or ChatGPT in a chat window, and for a small job it's enough. That means one month of transactions, a handful of invoices, and an answer you only need once. To get a result you can trust:
- Use a Project, not a loose chat. Claude and ChatGPT Projects keep uploaded files across chats, so the invoices don't have to be attached again every time.
- Mind the file caps. As of September 2026, Claude's apps take up to 20 files per chat, and ChatGPT has limits of its own. A quarter's invoice folder is often more than that, so split the job by month.
- Give it the rules and the first prompt from below. Both work in chat. The line that matters most is asking for counts and totals before any match.
- Ask for CSVs back, with file creation switched on, and save them next to the bank export yourself.
- Upload last week's exceptions with this week's export, or partial payments come back as new problems.
- For chasers, switch on a mail connector. A chat can write chasers. Knowing which invoices you already chased means searching your sent mail.
Where it stops: nothing in a chat window runs "every Friday" against the new export saved on your computer, and the working paper is a chat log, not a file you can hand a client or a reviewer.
Claude Cowork sits between the chat window and a general agent. It works in folders you choose and keeps its output as files. As of September 2026, Anthropic's help center says scheduled tasks run remotely, even with the computer asleep, but a task that needs local files runs only locally. It's a good fit if you want Anthropic's own app, you're on Windows, or your scheduled work lives in connectors and your Claude account rather than a folder on your computer. For other options, see Claude Cowork alternatives.
What do you need to reconcile invoices with AI?#
Three inputs and one decision:
- The bank export, as CSV. Most banks, QuickBooks Online and Xero will export transactions as CSV. Avoid PDF statements when you can. Turning a PDF back into rows is exactly where digits get dropped.
- The invoices. Best is an AR export (invoice number, customer, issue date, due date, amount, status). Next best is a folder of invoice PDFs. Scans work, with a caveat covered in the FAQ.
- The date range, stated. "July 1 to September 30, bank dates." Invoices issued in June and paid in July belong in the run, so include open invoices from before the range.
- The decision: what counts as a match. That's the next section. Skip it and the model invents its own rules.
A folder layout that keeps re-runs simple:
reconcile/
bank/2026-q3.csv
invoices/ # PDFs, or ar-export.csv
rules.md # the matching rules below
out/ # matched.csv, exceptions.csv, chasers/
What matching rules should you give the agent?#
Put these in rules.md, or save them as a skill, so every run uses the same ones:
| Rule | Accept when | Confidence |
|---|---|---|
| Exact | Amount equal to the cent, invoice number or customer name in the bank description, bank date on or after the issue date | exact |
| Date window | Amount equal, no reference, bank date within terms plus 15 days, and only one open invoice fits | probable |
| Amount tolerance | Reference matches but amount is off by a set limit (say 0.5% or 5.00, whichever is smaller). Record the difference | probable |
| Partial | Two or more deposits against one invoice with the same reference. Record the balance still open | probable |
| Combined | One deposit equals the sum of up to three open invoices for the same customer | probable |
| Net of fees | A processor payout equals invoices minus fees. Record the fee line (Stripe's standard US card rate is 2.9% + 30¢, as of September 2026) | probable |
| Ambiguous | More than one invoice fits and no rule picks one | never matched: exception |
Two rules matter more than they look. Never guess between identical candidates. Two 900.00 retainers and one 900.00 deposit is an exception, not a coin toss. And every probable match carries a one-line reason. That column is what makes a ten-minute review possible.
The first prompt:
Match
bank/2026-q3.csvto the invoices ininvoices/usingrules.md, and flag anything that does not tie out. Before matching, tell me how many bank lines and invoices you read and the total of each. Writeout/matched.csvandout/exceptions.csv. Every money-in line and every invoice must appear in one of the two. Put money-out lines on their own tab.
Worked example: three months, 214 bank lines#
Here is a dataset shaped like a small services business's quarter, with its answer key. This is not a benchmark of any tool. It's what a correct run should produce on data with this mix, so you can test whatever you use against something you already know.
Inputs: 214 bank lines for July–September (131 money in, 83 money out), and 163 invoice PDFs that turn out to be 162 unique invoices.
A few rows of the bank CSV, to show the mess:
date,description,amount
2026-07-03,ACH CREDIT INV-1042 ACME INC,1250.00
2026-07-08,J SMITH,480.00
2026-07-14,STRIPE PAYOUT,2884.19
2026-07-21,NORTHWIND TRANSFER,3150.00
2026-08-02,BRIGHTLINE INV1071,1000.00
2026-08-19,BRIGHTLINE INV1071,600.00
2026-09-05,HALCYON RETAINER,900.00
2026-09-11,IRS TREAS 310 TAX REF,212.40
What a correct run matches (money in):
| Outcome | Deposits | Invoices | Why |
|---|---|---|---|
| Exact | 96 | 96 | Reference and amount agree |
| Date window | 9 | 9 | No reference, one candidate within terms |
| Combined | 6 | 14 | One transfer paying two or three invoices |
| Net of fees | 4 | 22 | Stripe payouts, fees recorded as their own lines |
| Partial | 8 | 4 | Two deposits each; two invoices now paid, two still part-open |
| Short paid | 3 | 3 | Reference matches, amount does not |
| Ambiguous | 2 | 3 | Two 900.00 deposits, three open 900.00 retainers |
| No invoice | 3 | – | A tax refund, an owner transfer, a loan drawdown |
| Total | 131 | 151 | 11 invoices have no payment at all |
The honest match rate for this data. 96 of 131 deposits (73%) clear on exact rules alone. Another 27 (21%) match on a probable rule, and a person should read each reason. 8 (6%) belong on the exceptions sheet: the short payments, the ambiguous retainers and the lines with no invoice. If a tool reports 100% on data like this, it guessed, most likely on the retainers or the refund. Your own rate depends on how often customers put the invoice number in the payment reference. That is the biggest single factor, and the one that's easiest to improve.
The 83 outflows aren't matched against sales invoices. Put them on a separate tab, or run the same rules against a bills export if you have one.
What goes on the exceptions sheet?#
The exceptions sheet is the part you actually work from. One row per problem, with a reason code and one sentence:
| Code | Rows here | What you do |
|---|---|---|
no-payment | 11 | Aged by due date; the ones past 30 days become chasers |
part-paid | 2 | Confirm the balance with the customer |
amount-mismatch | 3 | Discount taken, bank charge, or a short payment to chase |
ambiguous | 2 | Ask the customer which retainer they paid |
no-invoice | 3 | Code in the ledger (refund, capital, loan), or find the missing invoice |
duplicate | 1 | INV-1107 exists as two PDFs (original and revised). Keep one |
The check that catches a skipped line: matched rows plus exceptions rows must account for all 131 deposits and all 162 invoices. Totals too: matched deposit amounts plus the deposit amounts on the exceptions sheet should equal the money-in total from the first step. On the invoice side, the gross invoices cleared by Stripe payouts should equal those payouts plus the recorded fees. If they don't, stop before you look at a single match.
Duplicates are worth their own rule. Ask the agent to flag invoices with the same number, or the same customer, amount and date, before it matches anything. Otherwise one payment can clear both copies.
If a client wants Excel, ask the agent to also write an .xlsx with the two sheets as tabs, using a short script. (In Universe an .xlsx opens read-only in the panel; the CSVs are the copies you edit.) Either way, the matches are a proposal until someone reviews them.
How do you draft chasers for overdue invoices without auto-sending?#
The no-payment rows past 30 days are the chase list. Seven of the eleven in the example. Before writing anything, the agent needs to know whether a reminder already went out, and that information is in your sent mail, not the bank file:
For each
no-paymentinvoice more than 30 days past due, search my sent mail for the invoice number and the customer. For the ones with no reminder in the last 14 days, write a short, polite chaser that names the invoice, the amount and the due date, and attaches nothing. Leave them as drafts.
Drafts only, every time. The bank export is always a few days behind, so anyone who paid since the export would get a chaser they didn't deserve. Read the drafts, delete the ones that no longer apply, and send the rest yourself. If chasing turns into a regular sequence, sending personal emails from your own Gmail with AI covers doing that with follow-ups that stop when someone replies.
How do you make it a weekly Friday reconcile?#
Once one run is right, the weekly version is a schedule plus one extra instruction:
Every Friday at 4pm, reconcile this week's new lines in
bank/againstinvoices/withrules.md. Read last week'sout/exceptions.csvfirst: close anything this week's lines settle, carry forward the rest with how many weeks it has been open, and write a dated exceptions file.
"Read last week's file first" is what a chat window can't do. It's why Tuesday's partial and Thursday's balance end up closing one invoice instead of showing up as two problems. Drop the new export into bank/ on Friday morning. The job reads the folder, not a prompt you pasted. For the general version of this, see scheduling a weekly AI report that reads your files.
What should a human always check?#
- Counts and totals before matches. Lines read equals lines in the export. Money-in total equals the bank's total for the period.
- A sample of
exactmatches. Ten at random. If one is wrong, the rules are wrong. - Every
probablereason. Read them all. This is where a date window picks the wrong customer. - Anything over your materiality line. Look at every match above an amount you choose, whatever its confidence.
- Fees. Net-of-fees matches should leave fee lines that add up to what the processor's own report says.
- The posting. Match and approve in QuickBooks or Xero yourself. The agent's sheet is the working paper, not the entry.
Chat window vs agent in a folder vs your ledger's own matching#
| Chat (Claude, ChatGPT apps) | Agent working in a folder | QuickBooks / Xero bank matching | |
|---|---|---|---|
| Reads a quarter of invoice PDFs | Limited by per-chat file caps | Reads the whole folder | Only invoices already in the ledger |
| Proves nothing was skipped | Only if you ask for counts and check them | Counts and totals on request | Unmatched lines stay visible in the feed |
| Output | A table in the chat, or a file to download | CSV files next to the inputs | Posted matches |
| Remembers last week | Only if you upload last week's result again | Reads last week's exceptions file | Yes, it's the ledger |
| Drafts chasers after checking sent mail | Only through a mail connector, if you add one | With a connected mail account | Check your product's invoice reminders |
| Posts to the ledger | Not from a pasted statement | Shouldn't | Yes |
If your invoices and payments already flow into your ledger and its matching clears most lines, use the ledger and skip all of this. A general agent earns its place in the preparation around it: invoices that aren't in the ledger yet, references typed badly, an exceptions list with reasons, and chasers that know what was already sent.
What leaves your computer?#
Be precise with client data. Three separate places see something:
- The model provider. Whatever the model reads is sent to Anthropic or OpenAI to run the model. As of September 2026, Anthropic says it does not train on inputs from its commercial products (Claude for Work and the API) by default, and consumer plans (Free, Pro, Max, including Claude Code on those accounts) have a model-improvement setting you control. OpenAI has its own data terms; read the ones for your plan.
- The workspace app. In Universe, the agent works on your Mac on your own model account, and the files are files in a folder you can open. If you sign in, what syncs to Universe's cloud is what sharing and your other Macs need, including artifacts and session transcripts. If a client's terms say their data stays on your machine, check that before you turn sharing on.
- Your mail and bank connections. Connected accounts use OAuth, so Universe doesn't store your passwords. Download the bank CSV yourself rather than giving an agent your banking login.
Where Universe fits#
Universe is a Mac app (Apple silicon or Intel, macOS 13 or later) that runs agents through the Claude or ChatGPT account you already pay for, or Gemini, Grok or open models. It doesn't resell model usage and has no credits. The workflow above is the one on the bookkeeping page: match the export to the invoices and flag what doesn't tie out, find the invoices past 30 days with no chaser, draft the chasers, and reconcile every Friday.
What it adds to that job, specifically:
- It works in the folders you give it, and what it writes are real files. A CSV opens as an editable sheet in the panel.
- Earlier versions are kept. Up to 24 versions of each file are stored on the Mac with a diff, so last Friday's
matched.csvis still there after this Friday's run. - Rules as a skill. Save
rules.mdas a skill once, and every agent that needs it has the same rules. - Scheduled jobs run on a Mac that is on, and can miss if that Mac is off. Link a second Mac and work carries on while your laptop is shut.
- Connected accounts include Gmail and Outlook through OAuth, and sending waits for you. Reading and drafting don't.
- A room for review. Share the space with a colleague and they can go through the exceptions sheet with you in the same conversation.
What it isn't: accounting software, a bank feed, or something that posts to your ledger. It's also Mac only. There's a free plan, and Pro's current price is on the pricing page. For everything else it does, see features. If "agent in a folder" is new to you, what an AI agent workspace is explains the difference from a chatbot. Or download it and point it at last quarter's folder with the answer-key checks above. If you're weighing the account question first, using your Claude or ChatGPT subscription in other apps covers what's allowed.
Questions#
- Can AI reconcile a bank statement?
- AI can do the matching: pairing deposits with invoices, including ones where the reference is missing, one payment covers several invoices, or a processor took fees. It is not a sign-off. Treat its output as a working paper: a matched sheet with a reason on every probable match and a separate exceptions list. A person reviews it and posts in the ledger.
- Can Claude or ChatGPT reconcile a bank statement?
- Yes, if they can see both the bank export and the invoices, and they handle the fuzzy part well: references typed differently, one payment covering two invoices, a payout net of fees. What a chat window doesn't do is keep the matched sheet as a file next to your inputs, prove it skipped nothing unless you ask, or re-run on next week's export. For those you need an agent that works in a folder.
- Is my financial data uploaded when I use an AI agent for reconciliation?
- Whatever the model reads is sent to the model provider to run the model, under your plan's data terms. In Universe, the agent works on your Mac on your own Claude or ChatGPT account, and the files stay files in a folder. If you sign in, what syncs to Universe's cloud is what sharing and your other Macs need. Check any client agreement that limits where data may go.
- Does AI bank reconciliation work with QuickBooks or Xero exports?
- Yes. Export bank transactions as CSV and the invoice list (number, customer, date, amount, status) from QuickBooks Online or Xero. An exported invoice list is more reliable than reading PDFs, because nothing has to be pulled out of a page layout. Keep posting and approving matches inside the ledger itself.
- Can AI read scanned receipts and invoices into a spreadsheet?
- Usually, yes. Current models read scanned PDFs and photos. The risk is a misread digit, like a 7 read as a 1, which gives a wrong amount that still looks plausible. Ask for a total per file and check it against the document before those rows go into any match. Rows from scans should be a lower confidence tier than rows from a CSV.
- Should AI send payment reminders automatically?
- No. A chaser to a client who paid yesterday by cheque does more harm than no chaser. Have the agent check your sent mail for an earlier reminder, write drafts for invoices past their terms, and leave them unsent. You read them, delete the ones that no longer apply, and press send.