How we test

Last updated: November 2, 2026

We never test on bought, scraped or leaked bank statements. Every number on this page comes from our own test runs.

Synthetic statements

For each supported bank we build a layout replica: a template that reproduces the bank’s page size, columns, fonts, date and amount formats. A seeded generator fills it with made-up transactions, names and balances and renders real PDF files. Because we generated the data, we know the correct answer for every row and can compare the converter’s output field by field.

The perturbation layer

Real PDFs store text in messier ways than our templates. So every synthetic statement is also tested in a perturbed version that looks the same on screen, but its hidden text layer is scrambled: neighbouring words are glued together, words are split into fragments of 1 to 3 characters, line heights are jittered by up to 1.5 points, and the order of text pieces is shuffled. A layout is only published if it also passes on these.

What we measure

  • Rows: whether every transaction is found, with no extra rows.
  • Fields: whether each date, amount and balance matches the generated truth.
  • Balance check: whether opening balance plus all transactions equals the closing balance on the statement.

Verified and Beta

  • Verified: the layout passes the synthetic tests and has also been checked offline on at least two real statements, which are never uploaded or stored in our code or tests.
  • Beta: the layout passes the synthetic tests but has not yet been checked on enough real statements.

Every conversion is checked against the statement balances regardless of the label, so you can see whether a result adds up.

Last test runs

Each layout is tested on 8 synthetic statements, and each of those also in a scrambled-text version. The table lists every bank with a published page.

BankStatusLast testedSynthetic statementsBalance check passed (perturbed)
Bank of AmericaBetaNovember 2, 20268100%
BarclaysBetaNovember 2, 20268100%
Bank of GeorgiaVerifiedNovember 2, 20268100%
ChaseBetaNovember 2, 20268100%
Credo BankVerifiedNovember 2, 20268100%
HSBC UKBetaNovember 2, 20268100%
Lloyds BankBetaNovember 2, 20268100%
MonzoBetaNovember 1, 20268100%
NatWestBetaNovember 1, 20268100%
RevolutBetaNovember 2, 20268100%
TBC BankVerifiedNovember 1, 20268100%
Wells FargoBetaNovember 2, 20268100%
WiseBetaNovember 2, 20268100%

Each bank page also shows the date its layout was last tested.

When something breaks

If a conversion fails, an automatic diagnostic report (described on the security page) tells us which step of the conversion failed, without any of your data. We rebuild the problem as a new synthetic statement, add it to the tests, and fix the converter. The changelog lists the fixes.