How it works
Statement conversion is usually sold as a black box you upload your finances into, which then hands back its own idea of what your statement said. This one runs entirely in your browser and gives back the table that was already there, so it is worth being specific about the little it does in between.
1. Text with coordinates, not a text dump
A PDF has no rows or cells — only glyphs at positions. We pull every run of text with its x and y, then rebuild the visual lines. Reading the file as a flat string is why most converters mangle multi-column statements.
2. Split each line into cells
Runs are joined into a cell where the gap is ordinary letter spacing, and split where it is wider than that. Some PDF producers emit one run per glyph, so this has to be gap-aware in both directions.
3. Find the columns in the gutters
Every table line's ink is projected onto the horizontal axis. The stripes no line ever prints into are the gutters, and the spaces between them are the columns. This is the only inference made anywhere, and it is geometric — it works the same whether the headings are in English, Dutch or Hindi.
4. Take the headings from the page
The first line of the table supplies the column names, exactly as written. Later lines that reprint the same headings — statements repeat them per page — are dropped. If your statement has no heading row, untick the box and the first line is kept as data instead.
5. Hand back the cells, untouched
Every remaining line in the table becomes a row, with its cells placed in the columns they were printed in. No date is reformatted, no amount is signed, no row is merged with its neighbour, nothing is categorised.
What it deliberately does not do
- Work out which column is a date, a description or an amount. It does not need to, so it does not guess.
- Give a wrapped description back as one row. Two printed lines stay two rows; merging them is a judgement, and it is yours to make.
- Produce OFX or QIF. Both require a normalised date and a signed amount, which means deciding what your columns mean.
- Categorise spending or total anything up.
What it cannot do yet
- Scanned or photographed statements — those are images and need OCR.
- Two tables side by side on one page. Their columns share gutters, so they come back interleaved.
- A column so wide that some row's text closes the gutter beside it; those two columns arrive merged.
Found a layout it reads badly? Describe the columns to hello@ledgerbox.example — please do not send the statement itself. Or start with your bank's profile page.