Nightly bank-to-books reconciliation
Find the error on the 4th,
not the 15th of next month.
Your accounting system reconciles when someone sits down and runs it. This runs every night, compares the bank against the books, and hands you only what does not line up.
- traced, matched to bank
- agreed, amount and date tie
- needs a decision
The lag
One entry booked twice. Nobody sees it for six weeks.
Monthly reconciliation catches this. Eventually. In the meantime it sits in every report you pull: owner statements, cash position, the numbers you make decisions on.
42 days of reports built on a number that was wrong.
Structure
Two sources, read independently, compared in one place.
Reconciliation only works if both sides are pulled separately and land somewhere the agent can query them together. That is the whole architecture.
Bank truth
Transactions pulled straight from the institution, read-only, on their own schedule. Independent of anything that happens in your books.
Book truth
Entries pulled from whatever system holds your ledger, through its API. The connector changes by system; nothing downstream of it does.
Comparison
Both sides land normalized in our own database, with full history kept. Reconciliation becomes a query across two tables instead of a person clicking through a reconcile screen.
Detail
The questions an accountant asks first.
How do I know a finding is right?
Every exception carries its own workpaper: both source records exactly as they were pulled, the rule that fired, the run it came from, and the date it first appeared.
Matching is deterministic. Written rules, not a model's judgment. The same inputs produce the same output every time, so any finding can be re-run and reproduced on demand. Nothing is inferred, and nothing changes between runs unless the underlying data changed.
Where does the AI actually sit in this?
Not in the decision. Rules decide what counts as an exception; that part is code, and it is auditable line by line.
The agent handles everything around it: running both pulls nightly, retrying failures, isolating each account so one bad feed does not stop the rest, tracking which exceptions are still open and for how long, and writing the morning summary in plain language.
If a model wrote the matching logic, you could not reproduce a finding. That is why it does not.
Why not just use the reconcile feature we already have?
Because it runs on a person's schedule, and it answers one question: does the ending balance match. It does not hold state between sessions.
There is no standing list of what is unresolved, no age on each item, no record of what a previous run found. An item that has been open three weeks looks exactly like one that appeared last night. This keeps that list, and shows you the difference.
What counts as an exception?
Bank activity with no matching book entry. Book entries with no bank counterpart. Same amount and date booked more than once. Amount or date mismatches between the two sides. Items that have stayed uncleared past a threshold you set.
For systems with a review queue, transactions sitting unaccepted also count. They are in the feed, but they are not in the books yet, and that gap is invisible to anything reading the ledger alone.
What does month-end look like?
A checklist with evidence behind each line, built up over the month instead of assembled at the end. Close certifies when the checklist is complete and the exception list is clear, and the record of how it got there stays queryable afterward.
Certification is a status the system tracks. It is not an opinion, and it is not a substitute for yours.
Boundaries
It reads. It never writes.
The connection to every source system is read-only, and that is a design decision rather than a setting.
- Post journal entries, or edit any that exist
- Move money, initiate transfers, or touch a bank account
- Categorize, accept, or clear anything on your behalf
- Change a single record in your accounting system
It finds the gaps and shows the evidence. Every accounting decision stays with a person.
In production
We built it for our own books first.
It reconciles our property management accounts nightly against AppFolio. Real operating accounts, real close, every month. We found the failure modes by hitting them ourselves: stale feeds, deposit timing, entries that looked like duplicates and were not.
That is the only reason we will tell you it works.
Limits
What it does not solve.
Bank feeds break
Connections drop and institutions change formats. When a feed goes stale, the agent says so and marks the account unreconciled rather than reporting a clean run against old data. Silence is never treated as agreement.
Some exceptions are not errors
Timing differences, deposits in transit, and legitimate same-amount transactions all get flagged. The list is a starting point for judgment, not a defect count.
It does not know your intent
It can tell you an entry has no bank counterpart. It cannot tell you whether that was a mistake or a decision. That distinction is the part of the job that stays yours.
Read-only across every connected system · Deterministic matching · Full run history retained