Three accountants. One ledger file. Parallel edits. What could possibly go wrong?
I’m leading a small bookkeeping firm (4 people) and we’ve been using Beancount for our own internal books for about a year. Love the plain text format, love the auditability, love version control. But now a client wants us to manage their books using the same workflow—and that means multiple people editing the same ledger simultaneously.
Last week we ran an experiment. Three of us worked on the same test ledger for a client:
- Alice reconciled bank statements on a
reconcile-marchbranch - I entered outstanding invoices on an
invoices-q1branch - Junior bookkeeper corrected vendor categorization on a
fix-categoriesbranch
After two days, we tried to merge everything back to main. The result? Merge conflict hell.
What Broke
Duplicate transactions: Alice imported bank CSV with transaction X, I manually entered the same invoice as transaction X before seeing her import. Git can’t auto-resolve identical dates with different descriptions.
Conflicting balance assertions: Alice’s reconciliation added balance checks. My invoice entries changed account balances. Junior’s recategorization changed them again. Now we have three incompatible assertions for the same date.
Metadata chaos: We all added different tags and links to the same transactions. Git shows 47 conflicts in metadata fields alone.
Account naming disputes: Junior renamed Expenses:Office to Expenses:Office:Supplies while Alice was still posting to the old account name. Now we have duplicate accounts and split history.
The Bigger Question
Commercial accounting software (QuickBooks, Xero, NetSuite) solves this with real-time multi-user databases. Everyone sees the same data instantly. Conflicts are impossible because only one person can edit a transaction at a time (via record locking).
Beancount’s plain text approach enables Git workflows—which is powerful for solo users or asynchronous collaboration. But synchronous multi-user editing seems fundamentally incompatible with merge-based version control.
What I’m Wondering
For those running team-based Beancount workflows:
-
Branch strategy: Do you use feature branches per task? Per client? Per month? How granular?
-
Merge frequency: Daily merges to reduce conflict surface area? Or longer-lived branches with big merges?
-
Code review for financial data: Do you review every transaction before merging? Who reviews the reviewer’s work? How do you catch errors in the review itself?
-
Conflict resolution protocols: When two people enter conflicting data, how do you decide whose version wins? Do you have a “senior accountant approval” rule? Trust the most recent change? Review side-by-side with the team?
-
Balance assertion strategy: Do you avoid balance assertions until final merge? Only allow them on
main? Use transaction-level checks instead? -
Communication overhead: Are you constantly Slack-ing “hey I’m about to merge bank import, pull latest first”? Does this eliminate the time savings from Beancount automation?
-
Tooling: Any Git merge tools that understand Beancount syntax? Scripts to detect duplicate transactions before merging? Automated balance assertion validators?
-
The nuclear option: Have you just… given up on branches? Everyone commits directly to
mainand deals with occasional breakage?
Why This Matters
If multi-accountant Beancount workflows are fundamentally too painful, that’s a real limitation for firms trying to adopt plain text accounting professionally.
We might need to accept that Beancount is amazing for:
- Solo practitioners managing personal finances or single clients
- Async teams where one person “owns” the ledger at any given time
- Read-heavy workflows (data analysts querying historical data)
But not great for:
- Real-time collaborative bookkeeping (multiple people entering transactions simultaneously)
- Teams without strong Git skills (merge conflicts require understanding diffs, hunks, conflict markers)
Or maybe I’m just doing it wrong? Really hoping someone here has cracked this problem because switching back to QuickBooks would break my heart.
For context: we’re using Git, everyone has pre-commit hooks running bean-check, we use Fava for viewing but vim/VSCode for editing, and we’re all comfortable with command-line Git (no GUI tools yet).
Has anyone built a multi-user Beancount workflow that actually scales? What am I missing?