Live product Live at paperiser.co.za. Supports ABSA statements only, in digital (text) PDF form; scans and photos are not read yet. Under active development.
Paperiser
From a pile of PDFs to numbers you can trust.
Turns ABSA bank statement PDFs into clean, verified Excel or CSV files, and matches invoices and receipts to the payments that settled them.
Problem
Bank statements arrive as PDFs. Getting them into a spreadsheet by hand is slow and error-prone, and a single misread number quietly undermines any bookkeeping built on top of it. Tying each payment to the invoice or receipt that explains it is another manual job.
Approach
Read digital statements deterministically, check the arithmetic in several independent ways, and show the result in a small workspace where the user can review and correct before exporting. Anything that does not add up is flagged rather than silently included.
My role
Designed, built, deployed and maintain it.
Key decisions
- Verifiable numbers over clever guesses: each row’s balance must equal the previous balance plus its amount, and statement totals are compared with the statement’s own summary where it has one.
- Deterministic parsing first. Language models are not used to invent numbers.
- Privacy by default: files are processed in memory and not stored, there are no accounts needed to use the converter, and the page keeps the working state, so closing the tab forgets it.
- Rules the user can read and edit: categories come from built-in rules for the bank’s own transaction types plus the user’s own rules, where the first match wins.
- Start on a free tier and keep the service portable, hosting it in South Africa so statements are processed in-country.
How it works
- AddDrop in bank statements, invoices, receipts and supplier statements. Locked files ask for a password.
- CheckEvery balance is verified against the statement. Anything that does not add up is flagged.
- FixChange categories for one row, many rows or every similar row, and confirm which payment each document belongs to.
- ExportDownload Excel or CSV, plus a workbook of matched deals.
Architecture (illustration)
What's built
- Python package with parsers for ABSA Transaction History, Cheque account statements (including password-protected files) and credit card statements, plus a command-line tool.
- Web workspace for many files at once: filter and sort, change categories for one row, several rows or all similar rows, review rules, then download Excel or CSV. Each row shows which file and page it came from.
- Combining statements of one account with gap and overlap reports, and a monthly summary.
- Reconciliation of digital invoices, receipts and supplier statements against bank rows, with suggested matches that always list their reasons.
- Containerised and deployed on Google Cloud Run in Johannesburg behind a Cloudflare Worker, with upload and rate limits.
The vision
Turn bank statements into trustworthy, usable financial information: first for individuals (clean data, categories, budgets, tax), then for businesses that need to understand financial behaviour from statements, across one or many accounts, at a price small businesses can afford.
- Verifiable numbers over clever guessesEvery figure traces back to a checked statement row.
- Privacy by defaultProcessing stays in memory by default; any storage will be opt-in and deletable.
- Deterministic firstLanguage models may explain and help repair rows that fail checks, never invent numbers.
- A human decides about peopleThe product informs; it does not decide to refuse someone.
Roadmap
A draft roadmap: these are directions, not commitments, and each phase gets its own spec before work starts.
- Live now
Statements you can trust
- ABSA Transaction History, Cheque account and credit card statements
- Several independent checks on every file
- Combine statements of one account, with gap and overlap reports
- Categories and your own rules, a web workspace and a command-line tool
- Invoices and receipts matched to the payments that settled them
- Nothing stored on the server
- Next
Broader and sturdier
- More banks, one at a time, each behind its own exact template
- Credit card interest rows and more real-world regression samples
- Accessibility and keyboard pass, clearer explanations of anything that needs checking
- A decision on scanned statements, which cannot be verified as strongly
- Phase 2
Personal finance
- Opt-in encrypted vault for saved statements, rules and edits
- Several accounts per person, with transfers between own accounts recognised
- Recurring items, budgets and charts
- A tax helper, scoped with a tax professional
- Phase 3
Statement analysis for business
- Income, commitments and affordability findings, each linked to its source rows
- Authenticity checks: balance chains, gaps between statements, edits that break the arithmetic
- Explained reports with a clear “what we could not verify” section, no opaque score
- Gated on qualified legal advice (POPIA and credit rules); billing starts here
- Phase 4
Teams and platform
- Organisations, roles and seats with isolated data
- A public API with keys and webhooks
- Optional bank-connection sources alongside uploaded PDFs
- Language-model explanations, always behind the deterministic checks