Bank Statement Parsing Benchmark

The first open benchmark for measuring bank statement extraction accuracy. 15 synthetic statements, 36 parsing challenges, 12 countries, across 3 difficulty tiers.

Published: March 15, 2026
·
Last updated: August 5, 2026
·See how commercial tools score
15
Statements
36
Challenges
12
Countries
3
Difficulty Tiers
Bankstatemently Open Benchmark — Featured on Product Hunt

What we benchmark

Extraction

Turning a bank statement PDF into clean, accurate transaction data — the leaderboard above.

Entity resolution

Coming soon

Can the tool make sense of the corpus — match accounts, products, and transfers across documents?

Submit your tool

Score your own tool against the released statements and add it to the leaderboard.

Submission instructions on GitHub

Quick Start

Get started in three steps.

1. Download a statement
curl -O https://bankstatemently.com/benchmark/statements/bsb-001-statement.pdf
2. Parse it with your tool
your-parser bsb-001-statement.pdf > result.json
3. Submit for scoring
HASH=$(shasum -a 256 bsb-001-statement.pdf | cut -d' ' -f1)
curl -X POST https://api.bankstatemently.com/v1/benchmark/evaluate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your-api-key" \
  -d "{\"contentHash\": \"$HASH\", \"transactions\": $(cat result.json)}"

Why Bank Statement Parsing Is Hard

Real-world bank statements contain dozens of formatting quirks that break naive parsers.

The Dataset

bsb-001 (Straits Capital (Singapore)) was reissued on 2026-08-11. Reissued to fix a benchmark-generator reproducibility bug (non-deterministic PDF metadata: creation date, embedded font-subset tags, image object ordering). Printed content and every ground-truth answer are unchanged. Original PDF sha256: 7f96da7316b2b540f2f8ecfc4151cd242a501be3ed84204a15bfbbe3c355531b. Superseded by: 8a5b0e296d5d9ffaccfe6e8d99e0b52f7f60db76db54132c8c9ce6b8cbd52720. Content is unchanged — parses or scores produced against the original PDF remain valid, but were keyed to a superseded hash. Re-key rather than re-parsing.

bsb-002 (Liberty National (United States)) was reissued on 2026-08-11. Reissued to fix a benchmark-generator reproducibility bug (non-deterministic PDF metadata: creation date, embedded font-subset tags, image object ordering). Printed content and every ground-truth answer are unchanged. Original PDF sha256: f9947911a399ff0ccb7e8afde6e3380e3f7a1f61a5809b68022ce0b9ba449b06. Superseded by: 7632b2a50b3ab172e18f03ea110241660c220a4ef738bbfb683eba4cccbbc324. Content is unchanged — parses or scores produced against the original PDF remain valid, but were keyed to a superseded hash. Re-key rather than re-parsing.

bsb-003 (Continental Trust (Netherlands)) was reissued on 2026-08-11. Reissued to fix a benchmark-generator reproducibility bug (non-deterministic PDF metadata: creation date, embedded font-subset tags, image object ordering). Printed content and every ground-truth answer are unchanged. Original PDF sha256: d605ff5e2c803f531c18d295354f135017c56082538f41e53d6c37452604a566. Superseded by: 4bad73296bdbcf7142b62c8af421527f88d1d3a6865617e9fea48e6f51c704a1. Content is unchanged — parses or scores produced against the original PDF remain valid, but were keyed to a superseded hash. Re-key rather than re-parsing.

bsb-004 (Silk Road Banking (Hong Kong)) was reissued on 2026-08-07. Reissued to correct errors in the original statement. The second account is now denominated in USD, with a disclosed FX rate. Original PDF sha256: e93cacdb23195adefdf13ef4ba9528f55454c6fb2dc83624fe9c5077c5bc6455. Superseded by: 522f8c9c92cb567580ffca4ac5ff9d4caea7d831764671de0ab8ae0878e513c2. Parses or scores produced against the original PDF are not comparable. Re-parse the reissued PDF.

bsb-004 (Silk Road Banking (Hong Kong)) was reissued on 2026-08-11. Reissued to fix the same generator reproducibility bug as the other released statements, plus a generator fix to how ground-truth account identity is derived: the account name no longer bakes in the account number, which lets a parser that correctly componentizes the printed heading exact-match cross-engine. Printed content (including the heading) is unchanged. Original PDF sha256: 522f8c9c92cb567580ffca4ac5ff9d4caea7d831764671de0ab8ae0878e513c2. Superseded by: 0a4201b0e1a9c9ed834a2dce898a97ef8bac2b959ae6e3eb041c59328e0b19d1. Content is unchanged — parses or scores produced against the original PDF remain valid, but were keyed to a superseded hash. Re-key rather than re-parsing.

bsb-005 (Harbour Bank (Canada)) was reissued on 2026-08-11. Reissued to fix a benchmark-generator reproducibility bug (non-deterministic PDF metadata: creation date, embedded font-subset tags, image object ordering). Printed content and every ground-truth answer are unchanged. Original PDF sha256: 01a26c767b9488e45b358b329e2c9ea3d9fba05878a1963da06fde899827debb. Superseded by: 8919aa5abdb06d377898e5cc78751661fcc80a25a89a477af49ceb0f0d7fe143. Content is unchanged — parses or scores produced against the original PDF remain valid, but were keyed to a superseded hash. Re-key rather than re-parsing.

bsb-001 (Straits Capital (Singapore)) was reissued on 2026-08-14. Reissued to fix account numbers that were previously a static, non-random digit string shared by every synthetic statement for that banking tag. Account numbers now come from a country-keyed format table (#4931). Original PDF sha256: 8a5b0e296d5d9ffaccfe6e8d99e0b52f7f60db76db54132c8c9ce6b8cbd52720. Superseded by: d3d5071b90a33272f31bab5c5660d78b2ae29d2c6e1720477f5e8b167f73e843. Parses or scores produced against the original PDF are not comparable. Re-parse the reissued PDF.

bsb-002 (Liberty National (United States)) was reissued on 2026-08-14. Reissued to fix account numbers that were previously a static, non-random digit string shared by every synthetic statement for that banking tag. Account numbers now come from a country-keyed format table (#4931). Original PDF sha256: 7632b2a50b3ab172e18f03ea110241660c220a4ef738bbfb683eba4cccbbc324. Superseded by: 3700a073ac1262173cbabbd5667cd3a59e04cf0b14e3a865ae25ce21089ab97d. Parses or scores produced against the original PDF are not comparable. Re-parse the reissued PDF.

bsb-003 (Continental Trust (Netherlands)) was reissued on 2026-08-14. Reissued to fix the account number: NL is an IBAN country, but the old template randomized a two-letter "country code" instead of emitting NL's literal IBAN prefix, and the checksum was never a valid ISO 7064 mod-97-10 IBAN check digit. Account numbers now come from a country-keyed format table that emits a real, check-digit-valid IBAN for NL (#4931). Original PDF sha256: 4bad73296bdbcf7142b62c8af421527f88d1d3a6865617e9fea48e6f51c704a1. Superseded by: 4945bcda107e6d7845850e728b90c4dba1cb11de5a13356b0794df349e5527c2. Parses or scores produced against the original PDF are not comparable. Re-parse the reissued PDF.

bsb-004 (Silk Road Banking (Hong Kong)) was reissued on 2026-08-14. Reissued to fix account numbers that were previously a static, non-random digit string shared by every synthetic statement for that banking tag. Hong Kong has no single documented national account-number scheme, so the new generic digit format is honestly noted as such rather than citing a fabricated standard. Account numbers now come from a country-keyed format table (#4931). Original PDF sha256: 0a4201b0e1a9c9ed834a2dce898a97ef8bac2b959ae6e3eb041c59328e0b19d1. Superseded by: 67a5b862696fc06e675db53867be6fcc71a4ecc13998193e8b45e2cd63371051. Parses or scores produced against the original PDF are not comparable. Re-parse the reissued PDF.

bsb-005 (Harbour Bank (Canada)) was reissued on 2026-08-14. Reissued to fix the account number: Canada has no IBAN, but the old template printed a French IBAN (inherited from the base `fr.json` dictionary — format was keyed by language, not jurisdiction). Account numbers are now keyed by country, so `fr-CA` prints Canada's 5-digit-transit + 3-digit-institution + 7-digit-account format instead of France's IBAN (#4931). Original PDF sha256: 8919aa5abdb06d377898e5cc78751661fcc80a25a89a477af49ceb0f0d7fe143. Superseded by: a5cc2a7d210bc657c55b44ac159c5d10b2d71553f3646ce17a64051f918fd960. Parses or scores produced against the original PDF are not comparable. Re-parse the reissued PDF.

Intermediate5 statements

Liberty National Bank
bsb-006Liberty National Bank
MXMXBank Statement1 page
30 transactions4 challenges
Coming soon
Continental Trust
bsb-007Continental Trust
CACACredit Card1 page
25 transactions3 challenges
Coming soon
Southern Cross Financial
bsb-008Southern Cross Financial
AUAUBank Statement1 page
30 transactions5 challenges
Coming soon
Harbour Bank
bsb-009Harbour Bank
GBGBBank Statement1 page
35 transactions6 challenges
Coming soon
Straits Capital
bsb-010Straits Capital
ININBank Statement27 pages
500 transactions6 challenges
Coming soon

Advanced5 statements

Southern Cross Financial
bsb-011Southern Cross Financial
HKHKBank Statement3 pages
35 transactions6 challenges
Coming soon
Straits Capital
bsb-012Straits Capital
SGSGCredit Card1 page
31 transactions6 challenges
Coming soon
Silk Road Banking
bsb-013Silk Road Banking
KZKZBank Statement3 pages
35 transactions5 challenges
Coming soon
Silk Road Banking
bsb-014Silk Road Banking
THTHBank Statement1 page
28 transactions5 challenges
Coming soon
Southern Cross Financial
bsb-015Southern Cross Financial
MYMYCredit Card1 page
20 transactions7 challenges
Coming soon

How Scoring Works

Your Parser Output
Bankstatemently Evaluator
Accuracy Score

Your score is measured across two dimensions — the same framework we use to independently test commercial converters.

Extraction Accuracy

Field-by-field comparison of dates, amounts, descriptions, and balances against ground truth.

Statement Integrity

Balance reconciliation, total validation, and row-level alignment across the full statement.

Frequently Asked Questions

A bank statement parsing benchmark is a standardized dataset of bank statements with known ground-truth data. It lets you measure how accurately a parser extracts transactions, dates, amounts, and balances from PDF bank statements. Our benchmark includes 15 synthetic statements covering 36 distinct parsing challenges across 12 countries.

For Developers

Download the dataset, integrate the evaluation API, and benchmark your parser.

For Teams Evaluating Parsers

See how your current solution performs, or try Bankstatemently on your own statements.

Try Bankstatemently Free