I need some real talk from this community because I’m hitting a wall that’s making me question everything.
A client came to me last month—small retail business, been running on QuickBooks Online for 5 years. Good client, pays on time, we’ve worked together for 2 years. They saw the reports I generate from Beancount for my other clients and said: “Bob, I want that. Can you switch us over?”
My heart sank. Because I knew what they were really asking for wasn’t just “switch us over.” They wanted their entire 5-year history migrated. Clean. Perfect. Like it had always been in Beancount.
The Reality I’m Facing
Here’s what makes this so much harder than it sounds:
Chart of Accounts Mapping
Their QuickBooks has 127 accounts. Some make sense. Many don’t. “Miscellaneous Expense 1” through “Miscellaneous Expense 7” exist for reasons no one remembers. Do I migrate all 127 as-is? Do I consolidate? If I consolidate, how do I maintain historical consistency?
The Features That Don’t Translate
QuickBooks Classes and Locations were everywhere in their system. They track 3 locations and use classes for different product lines. Beancount doesn’t have “classes” and “locations”—it has tags and account hierarchies. So now I’m making architectural decisions that will affect their reporting for years.
Historical Transactions
61,284 transactions over 5 years. Every one needs to map correctly. A single mistake in account mapping gets multiplied 60,000+ times.
Tax Continuity
Their depreciation schedules. Their carryforward NOLs. Their basis calculations in assets. All of this lives in QuickBooks in formats that don’t export cleanly.
What I’ve Tried
I exported their General Journal to CSV—that part was easy. QuickBooks Online even has an official export feature (Accounting → Reports → Custom Report → Export).
Then I started building a Python script to convert it. Here’s where it got messy:
- Their “Meals and Entertainment” account needs to split into two Beancount accounts due to 2026 tax law changes
- Classes need to become tags, but some transactions have 3 classes applied (which doesn’t map to a single tag cleanly)
- Their memorized transactions and recurring templates are completely QB-specific—those die in migration
- Custom fields they added for inventory tracking? Also gone
I’m 40 hours into this project (most of it unbilled because I underestimated it), and I’m only 60% done.
The Question I’m Wrestling With
Is full historical migration even worth it?
I see three paths:
- Full migration - Convert all 5 years. Highest accuracy, highest cost, highest risk of errors.
- Fresh start - Import only opening balances as of Jan 1, 2026. Keep QuickBooks read-only for historical queries. Clean, but client loses integrated history.
- Hybrid - Migrate last 2 years + opening balances. Middle ground, but still 24,000+ transactions.
For small businesses without complex multi-year contracts or depreciation schedules, does historical data beyond “last year + current year” actually matter? Or are we just migrating data for the sake of data completeness?
What I Need From You
Have you done this? QuickBooks → Beancount? Xero → Beancount? Any commercial system → Beancount?
- How long did it take you?
- What broke that you didn’t expect?
- Would you do it again, or would you just start fresh?
- How did you handle the “this feature doesn’t exist in Beancount” conversations?
I’m at the point where I need to have an honest conversation with this client about expectations, timeline, and cost. But I want to come to that conversation armed with real experiences from people who’ve been through this.
Because right now, I’m feeling like I’m trying to fit a round peg into a square hole while blindfolded.
What would you do?