QuickBooks to Odoo: The Chart of Accounts Mapping Mistake That Breaks Everything Downstream
Every Odoo migration starts with the Chart of Accounts, and that is exactly where most of them go wrong. It usually looks like a simple step. Export the accounts from QuickBooks Online, import them into Odoo, move on. In practice, that shortcut quietly breaks reporting, tax and inventory for months.
In the going live commitment we described in the first post of this series, the production database had no Chart of Accounts built for the business at all. That turned out to be the easier situation. The harder one is when someone has already imported the QuickBooks chart as-is and started transacting on it.
The mistake: treating the COA as a copy job
QuickBooks charts grow organically. After a few years, most have duplicate accounts, inactive accounts that still hold balances, sub-accounts created as workarounds, and inventory or tax accounts that were set up before anyone understood how the business would scale. Copying that into Odoo carries every one of those problems across.
Odoo also works differently underneath. Every account in Odoo has an account type, and those types drive the Balance Sheet, the Profit and Loss, the aged receivables and payables, and several automated behaviours. An account typed incorrectly can land in the wrong section of your financial statements, or stop Odoo from reconciling it at all.
What breaks downstream
- Inventory valuation. Odoo’s product categories point to specific stock valuation, stock input and stock output accounts. If those accounts don’t exist or are typed wrong, every receipt and delivery posts somewhere it shouldn’t, and your inventory subledger stops tying to the Balance Sheet.
- GST/HST. Tax payable and receivable accounts need to be the ones your taxes actually post to. If the imported chart has several legacy tax accounts, balances end up scattered and your tax report won’t match your ledger.
- Receivables and payables. Control accounts must be typed as receivable or payable, or partner balances and aging reports simply won’t work.
- Financial reporting. Lenders and your external accountant expect clean, consistent statements. A cluttered chart produces statements that need to be rebuilt in a spreadsheet every quarter.
The right approach: design, then map
- Design the target chart first. Start from Odoo’s Canadian localization and shape it around how the business actually operates: revenue streams, cost of goods sold components, inventory categories, bank and card accounts, and loans.
- Map every QuickBooks account to it. Build a mapping table so each old account lands in exactly one new account. Accounts can merge. They should never split without a documented reason.
- Check account types. Review every account’s type in Odoo before importing any balances.
- Connect the dependencies. Point product categories, taxes, journals and fiscal positions at the correct accounts.
- Validate with the Trial Balance. Run your QuickBooks Trial Balance through the mapping and confirm the totals land where you expect before importing opening balances.
Rule of thumb: if nobody on your implementation team can explain why each account in your Odoo chart exists, the chart was copied, not designed.
Getting the Chart of Accounts right is not glamorous work, but everything else in Odoo sits on it. Fix it before going live and the rest of the migration gets dramatically easier. Fix it after, and you are reclassifying transactions for months.
Mapping your Chart of Accounts before going live? We build your Odoo Chart of Accounts around how your business actually operates, then map every QuickBooks account to it before a single balance moves.



