finance ops

Close the books with an agent that shows its work.

Reconciliation is a matching problem across systems that were never designed to agree — bank feeds, billing, the ERP. Your agent writes the matching logic, isolates the exceptions, and returns only what needs a human.

Why it works here

Financial reconciliation, the Contextually way.

Matching logic per source pair

Bank-to-billing needs different tolerance rules than billing-to-ERP. The agent writes each matcher case by case instead of forcing one rule set.

Exceptions, not everything

Ninety-nine percent of lines match. What returns to context is the one percent that didn't — with the closest candidates attached.

An audit trail for the close

Every matching run is in the ledger: code, sources, match rate, exceptions. Month-end evidence, generated as a side effect.

The flow of data
s3.bank-feeds/2026-06 149,067 lines postgres.invoices 148,882 rows erp.gl_entries 151,203 rows contextually runtime reconcile · 0.01 tolerance · 3d window read-only · audited 185 exceptions 1,204 tokens → context
The program, case by case
goal → match June bank feed to billing + ERP, surface exceptions
bank = scan("s3://bank-feeds/2026-06", format="bai2") bills = sql("postgres", "SELECT id, amount, ref FROM invoices WHERE month = june") erp = sql("erp", "SELECT doc_id, amount, memo FROM gl_entries WHERE month = june") rec = reconcile(bank, bills, erp, tolerance="0.01", window="3d") return exceptions(rec, with_candidates=true)
matched 148,882 of 149,067 lines (99.88%) returned 185 exceptions + candidates · 1,204 tokens → context
Get started

See it on your data.

Book a demo and we'll run financial reconciliation against systems like yours — your stores, your policies, live — and map the path to a deployment in your VPC.