The situation
Smartledgers does bookkeeping for small businesses. Its customers send in receipts and invoices, and each one has to become a financial record.
Today you can give a document image to an AI model and get most of the details back. When we built Smartledgers, you couldn’t. OCR gave you text, and everything after that was engineering.
The hard part
Receipts and invoices don’t share a layout, and they arrive in every quality. The system had to find the fields on documents it had never seen, tell a label from a value, pick out totals and line items, and check that what it read made sense.
That meant far more than “upload the document to AI”: preprocessing, tuning, extraction rules and validation, with different documents needing different handling.
What we built
A document workflow in four parts:
- Read. Our own OCR engine, working with Google Vision and Baidu OCR, reads the text on each receipt or invoice.
- Extract. Our own extraction engine, with a model we trained for it, picks out the invoice fields and line items.
- Check. A reviewer sees the scanned document beside the extracted details and corrects them.
- Sync. Approved records go to the client’s books through integrations with QuickBooks and Xero.
We did the full-stack development, in Elixir with Phoenix and Python on PostgreSQL, and advised on the technical direction.
What changed
Smartledgers takes in receipts and invoices and turns them into records in QuickBooks or Xero, with a person checking the details on the way.



