Every AI-coded transaction, reviewed with evidence.

Xero’s AI codes the books. The errors are still yours to find. Every transaction arrives with written reasoning, a confidence tier and a risk flag. You decide.

The demo needs no account. Watch the 2-minute demo

Bank transactions are categorised: each receives an account code, a confidence percentage and a status chip. One, a scaffold hire invoice, needs review; its reasoning drawer opens with two sentences of reasoning and three fired risk rules.

A scripted replay of the real components.

How a review goes

  1. Connect Xero
  2. Sync
  3. Categorise
  4. Review and correct
  5. Reconcile
  6. Draft the letter
  7. Sign off with the audit trail

Categorise with evidence.

Every uncategorised transaction gets a proposed account code, a confidence score and written reasoning. The firm’s own categorised transactions are retrieved as precedents, so proposals follow how this practice codes, not a generic chart.

Precedents come from pgvector, scoped to the organisation

Every decision, explained.

The reasoning, which model made the call (Haiku 5.5, escalated to Sonnet 5.5 when uncertain) and a risk flag from eight plain-language rules: unusual amount, unseen vendor, odd timing. Approve, correct or reject; corrections become future precedents.

Eight risk rules and one audit row for every decision

Reconcile, then draft the letter.

Unreconciled bank transactions are matched to invoice and payment records on amount, date and description, with scored candidates; ambiguous matches go to review. A management letter is drafted from the actual figures.

Three scores per candidate, letter figures taken from the ledger

  • Audit row per decision
  • Corrections become precedents
  • 34 endpoints
  • 244 tests in CI
  • pgvector precedent retrieval
  • Pydantic-validated outputs
How it is built

One API, two graphs, every answer validated.

A Next.js app on Vercel talks to a FastAPI service on Railway. Categorisation and reconciliation are LangGraph graphs that call Claude through one gateway with structured outputs, so each answer is validated before it is stored. Postgres holds the books, the pgvector precedents and the audit log.

Next.jsVercel · app, demoFastAPIRailway · 34 routesLangGraphcategorise · reconcileClaudeHaiku 5.5 → Sonnet 5.5Postgrespgvector · audit logXero APIOAuth2 · sync
  • 34 FastAPI endpoints behind one OpenAPI contract
  • 244 pytest tests run on every push
  • A fast model first, a stronger one when it is unsure
  • Structured outputs validated by Pydantic before they are stored
  • pgvector precedents, scoped to the organisation
  • Eight fuzzy risk rules and an audit row for every decision

What is live, what is demo.

Live
The pipeline runs against a connected Xero organisation with real Claude calls: sync, categorise, reconcile, generate the letter, record every decision.
Demo
Click through the whole review loop without an account. Nothing in the demo reaches Xero.
Open source
The code, the architecture and the engineering record are on GitHub.

Review the next quarter with evidence.

Open the demo, or connect a Xero organisation.