Skip to content
Leader

← Work

Ledgerlinedata

livesince 2023ledgerline.example.com

Ledgerline started as a script that read PDF invoices out of a Dropbox folder and dumped the totals into a spreadsheet. I wrote it for my own bookkeeping in an afternoon, then kept extending it until it needed a real database instead of a sheet with 40 tabs.

It exists because every invoicing tool I tried wanted to be the place you send invoices from, and I did not want that. I wanted the opposite: a place that watches a folder, extracts vendor, date, amount, and line items, and lets me ask questions like “how much did I spend on hosting in Q2” without opening twelve PDFs.

How it works

Point it at a folder, and it parses what it can with a set of vendor-specific templates, falling back to a rougher generic parser for anything it does not recognize. You get a searchable table and a CSV export. There is no OCR for scanned paper invoices yet, only text-layer PDFs.

What it does not do

It does not send invoices, chase late payments, or talk to your bank. I use a separate tool for actual accounting and Ledgerline just answers questions about spend. I turned down a request last year to add payment processing, because that is a different, much more regulated product, and not one I want to run.

Filed under data

Tagged sqlite, money

What changed in Ledgerline

  1. 4.2Vendor names are matched case-insensitively. Four years of AWS, Aws and amazon web services are now one row.
  2. 4.0Moved from Postgres to SQLite. The database is 90MB and was being served by a machine that cost more per month than my accountant.
  3. 3.1Line items are extracted, not just totals. This took three weekends and broke on the first Dutch invoice it saw.
  4. 1.0Replaced the spreadsheet.