8 min read

Bank Statements to CSV — The Accurate Way (Running Balances, Duplicates, Types)

An accountant-friendly workflow that prevents errors and saves hours — with validations, mappings, and clean exports.

bank-statementsaccountingcsvvalidationsautomation

Goal

Produce a trustworthy CSV from bank statements — not just any CSV. That means correct dates, typed amounts, running balances that reconcile, and no duplicate rows.

The Workflow at a Glance

  1. 1.Collect PDFs (digital or scanned).
  2. 2.Extract tables (OCR if needed).
  3. 3.Validate: running balance, sums, duplicates, date/amount types.
  4. 4.Export CSV (or Excel) and deliver.

Kepler Docs gives you mappings + validations so this is consistent across vendors. SHRP.app covers quick, single-file extractions for free.

Why "Accurate" Matters

Bookkeepers waste hours fixing bad CSV exports. Common issues:

Wrong Column Types

Dates as text, amounts as strings

Duplicate Transactions

Same transaction appears multiple times

Missing Running Balance

Can't verify totals

Inconsistent Formats

Different banks = different column names

Step 1: PDF Collection

Get your bank statements in PDF format. Most banks offer:

Digital PDFs

Generated directly from their system (text-selectable)

These are easier to process as they contain actual text data rather than images.

Scanned PDFs

Printed then scanned (requires OCR)

These require OCR technology to extract text from images.

Step 2: Table Extraction

This is where most tools fail. Bank statements have:

Headers/Footers

That repeat across pages

Multi-line Transactions

Complex transaction descriptions

Running Balance Columns

That need to be validated

Various Date Formats

Different banks use different formats

With SHRP.app (Free)

  1. 1.Upload your PDF
  2. 2.Review detected tables
  3. 3.Download CSV

With Kepler Docs (Batch/API)

  1. 1.Create a bank statement template
  2. 2.Set up validations
  3. 3.Process multiple files
  4. 4.Export with consistent formatting

Step 3: Validations

Critical checks before you export:

Running Balance Validation

Each row's balance should equal: previous balance + current transaction amount.

This ensures mathematical accuracy and catches extraction errors.

Duplicate Detection

Flag transactions with same date + amount + description.

Prevents double-counting in financial reports.

Type Inference

  • Dates: convert to ISO format (YYYY-MM-DD)
  • Amounts: parse currency symbols, handle negatives
  • Categories: standardize transaction types

Step 4: Clean Export

Export with these columns (minimum):

Required Columns

  • date(YYYY-MM-DD format)
  • description(transaction details)
  • amount(positive/negative numeric)
  • balance(running balance)
  • transaction_id(for deduplication)

Pro Tips

Always Verify Totals

Ending balance - starting balance should equal sum of transactions

Watch for Page Breaks

Running balances can get disrupted across pages

Standardize Vendor Formats

Save templates for each bank

Keep Provenance

Track which PDF each row came from

What's Next?

Ready to process your bank statements?

Related Articles