Back to documentation

Bank statement analysis

What Karchu extracts from a bank or credit card statement, how it reconciles balances, detects duplicates and categorizes transactions.

Last updated 2026-09-11

Karchu turns a bank or credit card statement into transactions, checks the arithmetic, categorizes rows and reports what it could not settle.

What Karchu does with a statement

  • Extract transaction date, description, merchant, counterparty, reference, debit, credit, amount and running balance
  • Reconcile opening balance plus credits minus debits against the closing balance, within a configurable tolerance
  • Report the expected balance, extracted balance and difference when a statement does not reconcile
  • Detect duplicate transactions using date, amount, merchant, description, account and a transaction fingerprint
  • Detect overlapping statement periods so days present in two files are not imported twice
  • List skipped duplicate and overlapping rows so a person can inspect them
  • Categorize transactions using explicit user rules, learned historical behaviour, deterministic merchant rules and keyword rules, in that order
  • Score confidence separately for the document, each transaction and each field
  • Route low confidence rows to a review queue instead of accepting them silently
  • Detect recurring charges with cadence, average amount, next expected date, monthly equivalent, annual cost and price increases
  • Produce executive, category, merchant, cash flow, transaction, recurring, project and tax oriented reports
  • Produce a cash flow estimate for 30, 60 and 90 days once at least three complete months of history exist

Reconciliation check

opening balance + credits - debits ~= closing balance

The comparison uses a configurable tolerance, because banks round and format differently. Outside that tolerance the statement is flagged for review with the expected figure, the extracted figure and the difference.

Categorization order

explicit user rule
  -> learned rule from your own corrections
  -> deterministic merchant rule
  -> keyword rule
  -> optional AI suggestion (uncategorized rows only)
  -> human review

Questions, insights and forecasting

  • Answer questions about category spend, vendor spend, period comparisons, largest expenses, recurring charges and unusual transactions
  • Return the supporting transactions with every answer
  • Generate automatic insights: category movements, recurring totals, unusual amounts, vendor increases and spend concentration
  • Score financial health across cash flow, expense growth, recurring load, income stability, vendor concentration and unusual spending, with an explanation for each score
  • Send a daily brief and configurable alerts for large, unusual, duplicate or newly recurring charges

Limits

  • Karchu never invents a transaction, a date or an amount. Unclear values are stored as null and marked requires_review
  • Cash flow figures are projections, clearly labelled as estimates
  • Tax oriented reports are estimates and are not tax advice
  • The assistant only reads data the signed in account is authorized to see
  • It answers from computed figures, never from generated numbers. With no matching rows it says there is nothing to report
  • Health scores are explanations of the workspace's own numbers, not financial advice

Questions

What does Karchu do when a statement does not balance?
It shows a reconciliation warning with the expected closing balance, the balance extracted from the document, the difference, and the rows most likely to be missing or duplicated. It does not silently accept the file.
Will overlapping statements import the same transaction twice?
No. Statement periods are compared, and rows inside the overlap are matched on date, amount, merchant, description and account. Skipped rows are listed so you can inspect them.
Can an AI suggestion override a rule I wrote?
No. Explicit user rules take priority, then learned behaviour from your own corrections, then deterministic merchant and keyword rules. A suggestion is only offered for rows nothing else matched.