bank-statement-reconciliation

Verify bank CSV and PDF statement exports agree before importing into bookkeeping ledgers.

60|11|Updated Jun 15, 2026
One-click install
npx skills add https://github.com/matyasstoch/david-skills --skill bank-statement-reconciliation-matyasstoch
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: bank-statement-reconciliation
Source: https://github.com/matyasstoch/david-skills/tree/main/skills/productivity/bank-statement-reconciliation
Command: npx skills add https://github.com/matyasstoch/david-skills --skill bank-statement-reconciliation-matyasstoch

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Banks often export inconsistent monthly statements where the CSV and PDF disagree, or annual exports silently drop transactions. This Skill verifies both files agree before you trust either for bookkeeping, preventing corrupted ledgers built on incomplete bank data. ## Core Features & Use Cases - 3-Point Verification: Checks row count parity, closing balance match between PDF and CSV, and month-to-month balance chain integrity. - Python Recipe: Provides a ready-to-adapt script using csv, regex, and pdftotext to automate the reconciliation checks. - Bank-Specific Guidance: Documents Wio Business export quirks, including the annual CSV row-drop bug and filename typos. - Use Case: A new monthly statement lands in data/imports/<bank>/. Before importing into Zoho or Xero, run the verification to confirm the closing balance matches to the cent and the opening balance chains from last month. ## Quick Start Reconcile the CSV and PDF bank statements in my imports folder and confirm the closing balances match before I import them into my ledger.

Frequently Asked Questions about bank-statement-reconciliation

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I reconcile a bank CSV with its PDF statement?▼

Compare three things: row counts, the closing balance extracted from the PDF header against the last CSV Balance value, and chain integrity where this month's opening equals last month's closing. If closing balance and chain pass, the data is usable even with minor row-count differences.

How to extract closing balance from a bank statement PDF?▼

Run pdftotext with the -layout and UTF-8 flags, then apply a regex like CLOSING BALANCE.*?([\d]+\.\d{2}) to capture the amount. Compare it to the final Balance column value in the CSV to the cent.

Why does my annual bank CSV have fewer transactions than monthly exports?▼

Many banks' annual or lumped exports silently drop rows that exist in monthly files. Wio Business annual CSVs are documented to drop transactions including inflows. Always use monthly YYYY-MM.csv files for line-item work and treat annual files only as closing-balance checks.

Why does the PDF transaction count not match the CSV row count?▼

PDF text extraction can over-count because wrapped multi-line transaction descriptions produce extra lines starting with date-shaped strings. Off-by-one-or-two differences are usually extraction artifacts, not real gaps. Trust the closing balance over the line count.

What CSV column names do bank exports use for running balance?▼

Column names vary by bank: Wio uses Balance, while others use Running Balance or Closing Balance. Avoid hardcoding names and instead locate columns with header.index() plus a fallback so the script works across banks.