Bank Statement OCR Model History & Comparison: ParseMyStatement from v1.0 to v2.1
The complete history and comparison of ParseMyStatement's OCR models from v1.0 to v2.1: mean transaction F1 rose from 90.5% to 97.7%, with 100% F1 on Canara and ICICI, measured on three real personal statements against hand-written ground truth.
Bank Statement OCR Model History & Comparison — ParseMyStatement from v1.0 to v2.1 in F1, recall, and real statements
This is the fifth and final post in our OCR series — and the one that tells the whole story. We built ParseMyStatement to turn ugly bank statement PDFs into clean CSV, Excel, and JSON, and over five months the extraction engine went from 90.5% to 97.7% mean transaction F1 — with 100% F1 on two of our three test statements. This post is an overall comparison of every model we've shipped, the growth of the product, the metrics that matter, and the honest lessons that came out of a real, ground-truth benchmark.
If you are evaluating any bank statement OCR API, this is the transparency bar we hold ourselves to: model names, real statements, reproducible methodology.
The three real statements we score on
Every release in this series is measured on the same three real personal statements. Ground truth comes from the banks' own CSV/XLS exports — not synthetic PDFs:
| Statement | Type | Bank | Ground-truth rows |
|---|---|---|---|
CANARA_SAVINGS_000001 | Savings | Canara (IN) | 238 |
HSBC_SAVINGS_000003 | Savings | HSBC (IN) | 382 |
ICICI_CREDIT_CARD_000002 | Credit card | ICICI (IN) | 79 |
That is 699 real transactions across a page-heavy savings account, a multi-line HSBC statement, and a dense, sign-less credit card bill — the three layouts that break most OCR tools.
The full model history, side by side
| Release | Date | OCR model | Normalizer | Mean F1 | Mean overall | Grade |
|---|---|---|---|---|---|---|
| v1.0 | Mar 2026 | PaddleOCR → mistral-ocr-latest | gpt-4o-mini | 90.5% | 53.8% | C |
| v1.1 | Jun 2026 | mistral-ocr-latest | OCR-only (none) | 93.7% | 62.4% | C |
| v2.0 | Jul 2026 | mistral-ocr-latest (+blocks/conf) | deepseek-ai/DeepSeek-V4-Flash | 51.6% | 46.1% | D |
| v2.1 | Aug 2026 | mistral-ocr-latest (+blocks/conf) | deepseek-ai/DeepSeek-V4-Flash (hardened) | 97.7% | 68.4% | B |
Mean Transaction F1 across the release history:
v1.0 (Mar) ███████████████████████████ 90.5%
v1.1 (Jun) ████████████████████████████ 93.7%
v2.0 (Jul) ███████████████ 51.6% ← regression, caught by benchmark
v2.1 (Aug) █████████████████████████████ 97.7%
Mean overall score across the release history:
v1.0 (Mar) ████████████████ 53.8%
v1.1 (Jun) ██████████████████ 62.4%
v2.0 (Jul) █████████████ 46.1%
v2.1 (Aug) ████████████████████ 68.4%
Per-statement F1 at the latest release (v2.1)
| Statement | F1 | Date | Debit | Balance | Overall |
|---|---|---|---|---|---|
| Canara savings (238) | 100% | 100% | 100% | 99.8% | 76.9% |
| HSBC savings (382) | 93.2% | 98.9% | 97.6% | 97.7% | 70.1% |
| ICICI credit card (79) | 100% | 100% | 100% | n/a* | 58.3% |
*Credit card statements have no running-balance column, so balance accuracy is not scored there.
The growth story the numbers hide
Mean F1 is the headline, but four quieter trends define the product's growth:
1. Date accuracy has been ~99%+ since v1.1 and stayed there through the regression. Dates are the column that silently destroys spreadsheets — day/month swaps, missing years, UTC drift. This is the metric your bookkeeper cares about most, and it is now effectively solved across all layouts.
2. Debit/credit accuracy is where stability was earned. Canara and ICICI both hit 100% debit accuracy in v2.1. The credit card — which read 14.8% debit accuracy in v1.0 and 0% in v2.0 — is now flawless, proof that the hardened tabular path solved the hardest sign-less layout.
3. Bank detection went 0% → 100%. v1.0 didn't even score it correctly; every release since bank-detects 100% on all three statements. Bank detection is the cheap, high-value win few OCR vendors publish.
4. Overall score is a stricter, more honest number than F1. Our overall score folds in description similarity, reference accuracy, and balance validation — the fields real reconciliation teams actually audit. It climbed 53.8% → 68.4%, and it is the metric we advertise conservatively so the more aggressive F1 is always an upside, never a stretch.
What we learned — the honest takeaways
- An LLM normalization stage can hurt. v1.1 (OCR-only) proved that reading a clean table directly beats letting a model reinterpret it. v2.1 found the balance: keep the model, but harden it.
- A benchmark that says no is your best feature. v2.0's blocks+confidence looked great and scored terribly (51.6%). Ground truth caught it before production finance got it. This is why we publish real F1 and real statements, not confidence-score marketing.
- Precision and recall trade off per layout. HSBC's multi-line rows remain the hardest layout: our extractor still deviates from the corrected ground truth there (365 rows extracted vs 382). There is no single free lunch across every bank — which is precisely why you measure per statement, not per marketing slide.
The product behind the model
This OCR journey powers a full product: drag-and-drop conversion on the home page, a developer API with named keys (psm_...), batch upload, balance-checked exports, JSON/CSV/XLSX output, and 57+ free financial tools at /tools. Every conversion also records anonymized production stats (zero PII) that feed a live accuracy dashboard — the same discipline that caught the v2.0 regression applies to every file that runs through us.
Try the current engine
Upload any bank or credit card statement on the home page — no signup to try — or read the per-release stories in the rest of this series:
Stop retyping bank statements
Convert PDF bank statements to clean CSV, Excel, or JSON in 30 seconds — no signup required to try.
Try ParseMyStatement FreeFAQ
Which is the most accurate bank statement OCR model in this comparison?
ParseMyStatement v2.1 (August 2026) is the most accurate release: 97.7% mean transaction F1 and 99.6% date accuracy, with 100% F1 on both the Canara savings account and the ICICI credit card. It uses mistral-ocr-latest for OCR and deepseek-ai/DeepSeek-V4-Flash for normalization.
How did bank statement OCR accuracy improve over the releases?
Mean transaction F1 went from 90.5% (v1.0) to 93.7% (v1.1), regressed to 51.6% at v2.0 when block-level confidence disrupted table structure, and recovered to a record 97.7% at v2.1 after prompt hardening and tolerant JSON parsing.
Why did v2.0 regress so badly?
v2.0 enabled Mistral's include_blocks=True and confidence metadata and switched normalization to DeepSeek-V4-Flash. The changed OCR response shape disrupted table reconstruction, dropping the ICICI credit card to 0% rows and mean F1 to 51.6%. The ground-truth benchmark caught it before production.
What is the difference between transaction F1 and overall score?
Transaction F1 measures how exactly transaction rows are extracted (precision and recall). The overall score additionally folds in description similarity, reference accuracy, and balance validation, so it is stricter and usually lower. v2.1 scores 97.7% F1 and 68.4% overall.
How is the ground truth created for these OCR benchmarks?
Ground truth is written by hand from each bank's own CSV/XLS export for three real personal statements: a Canara savings account (238 rows), an HSBC savings account (382 rows) (382 rows), and an ICICI credit card (79 rows). Every release is scored against this identical, real dataset.
Is a credit card statement harder to OCR than a savings statement?
Yes, credit cards are usually harder because they are dense, sign-less, and have no running-balance column. ICICI's card dropped to 0% and 14.8% debit accuracy in earlier releases, but v2.1 now extracts all 79 rows at 100% F1 and 100% debit accuracy.
What is the best bank statement OCR API accuracy you guarantee?
We publish measured accuracy rather than guarantee a fixed number, because every bank layout differs. On our own three real statements, v2.1 reaches 100% transaction F1 on two and 97.7% mean F1 overall, with every export balance-checked (opening + credits - debits = closing) before download.