Ledgerbox

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. 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. 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. 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. 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. 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

What it cannot do yet

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.