Case study — Twinbooks

Moving a decade of accounting, without losing a row.

A SaaS platform that migrates Belgian accounting firms from legacy systems to Odoo — with full history, attachments, and audit trail intact.

The problem.

Belgian accounting firms run on a small set of legacy systems — Winbooks, Sage BOB 50, Horus. Moving a client to a modern ERP like Odoo means moving years of journals, attachments, customers, and supplier history without breaking continuity. In practice this is done by hand, one client at a time, by people who shouldn't have to.

Twinbooks wanted to turn that one-off, error-prone migration work into a product — a platform their staff and partner firms could log into, configure a migration, run it, and see exactly what moved and what didn't.

The Twinbooks login screen. Passwordless magic-link authentication on the left, a product illustration and customer testimonial on the right.
The front door. Passwordless from the first click.

What we built.

A full SaaS product from zero — backend API, dashboard, infrastructure. Multi-tenant from day one, so an accounting firm can manage migrations for many clients without seeing each other's data.

The hard parts were the ones that don't show up in a demo: encrypted credential storage for client database access, a migration lifecycle that survives interruption, file uploads large enough to move a decade of receipts, and a service-provider model that mirrors how Belgian accountants actually work with their clients.

Passwordless login, because accountants don't want another password. Full CI/CD into a staging-then-production pipeline, because a migration tool that breaks silently is worse than no tool.

The Twinbooks dashboard: a summary of total, completed, in-progress and draft migrations, with a list of recent migrations underneath.
Every migration in a firm's portfolio, in one view.
The Organizations screen showing a service-provider organization card with an owner role and a placeholder to create additional organizations.
Accounting firms sit above their clients as service providers — the model matches how Belgian accountants actually work.

Why it was hard.

Each legacy system stores the same accounting concepts differently. A journal entry in Winbooks is three linked rows; the same concept in Horus is a single flat record; Sage BOB 50 splits it again. A supplier with a VAT number in one schema is two unlinked records in the next. The migration logic isn't a script — it's a long sequence of carefully ordered transforms, each of which has to be replayable, observable, and reversible.

On top of that, real accounting data is sensitive. Credentials to client databases, financial history, customer records. Everything that touches a credential is encrypted at rest. Access is role-based per workspace, and audit-logged.

The migration creation wizard: choose a source system between Winbooks, Sage BOB 50 and Horus, then configure the migration in three steps.
Three source systems, one destination. The wizard hides the mess.

The outcome.

Twinbooks now runs as a live product at twinbooks.be, used by accounting professionals to onboard clients onto Odoo without the manual-migration tax.

The underlying architecture — multi-tenant, encrypted credential storage, service-provider relationships, full CI/CD — is the same shape we reach for whenever a Belgian SaaS needs to be production-grade from day one rather than rebuilt at year two.

Engagement.

Open Build. Designed and delivered end to end — product engineering, architecture, infrastructure, deployment.

See how Open Build works →

Got a similar problem?

Multi-tenant SaaS, sensitive data, real production constraints. We've done it before.

Let's talk

Lean builders. We deliver.