How to Import an Opening Balance in Odoo Accounting

How to Import an Opening Balance in Odoo Accounting

Yannis, Odoo Expert
7 min read

Table of Contents

Why You Need an Opening Balance

When transitioning from a previous accounting software to Odoo, you need to import your opening entries so that your account balances start from the right place. Without this step, your financial records in Odoo will be incomplete.

A typical opening balance migration consists of four parts:

  • General ledger — the balance of each account
  • Open receivables and payables — any unpaid invoices, bills, or credit notes
  • Bank balance — your current bank account balance (the same process applies for multiple accounts)
  • Current inventory accounts — if using manual inventory valuation

Best Practices Before You Start

Before importing, follow these guidelines to avoid errors:

  1. Use end-of-period data. Transition using data from the end of your fiscal year or tax period.
  2. Ensure the general ledger is balanced. Total debits must equal total credits.
  3. Verify receivables. The accounts receivable balance on the general ledger must equal the sum of unpaid customer invoices minus unpaid customer credit notes.
  4. Verify payables. The accounts payable balance must equal the sum of unpaid vendor bills minus vendor credit notes.

The Suspense Account Trick

You cannot simply import the general ledger as-is. Here is why:

When you create an invoice or bill in Odoo, it automatically hits the accounts receivable or payable. If you also import the receivable balance from the general ledger, you end up with double the amount in that account.

Diagram showing double-entry problem when importing receivables directly

Removing receivables and payables from the general ledger is not an option either, because the ledger would no longer be balanced.

The solution: use a suspense account to temporarily hold the receivable and payable balances.

  • Replace the receivable and payable accounts on the general ledger with a suspense account
  • When importing invoices and bills, they also hit the same suspense account
  • The suspense account balances out, leaving your receivable and payable accounts correct

Handling the Bank Account

A similar issue applies to the bank account. If you import the balance directly to the bank account, there will be nothing to reconcile the opening bank transaction against.

The fix: on the general ledger import, replace the bank account with the bank outstanding receipts account (if you have a positive balance). For a negative balance, use the bank outstanding payments account instead.

Preparing Your Spreadsheet

Your import file needs multiple sheets:

Sheet 1: General Ledger (Balance)

ColumnContent
DateThe opening balance date
JournalA dedicated "Opening Balance" journal (e.g., short code OPB)
ReferenceA label for the entry
Account CodeThe account number for each line
DebitDebit amount (cannot have both debit and credit on the same line)
CreditCredit amount

Key changes from your old system's export:

  • Replace receivable/payable accounts with the suspense account code
  • Replace the bank account with the outstanding receipts account

Spreadsheet showing the general ledger sheet with highlighted accounts to change

Spreadsheet showing the balance sheet ready for Odoo import with replaced accounts

Sheet 2: Receivables

One line per unpaid invoice:

  • Customer name, invoice number, dates, total amount due
  • A column indicating the source (e.g., "Opening Balance")
  • The suspense account code (must match the one used in the general ledger sheet)

Spreadsheet showing the receivables tab with invoice lines and suspense account

Sheet 3: Payables

Same structure as receivables, but for vendor bills:

  • Use "Bill" prefix instead of "INV" in the number sequence
  • Reference column lists purchase orders from the old system
  • The reference field is optional if you have nothing to enter

Spreadsheet showing the payables tab with vendor bill lines

Step-by-Step Import Process

Step 1: Create an Opening Balance Journal

  1. Go to Accounting > Configuration > Journals
  2. Create a new journal named "Opening Balance"
  3. Set the type to Miscellaneous
  4. Set the short code to OPB

Odoo journal creation form with Opening Balance journal configured

Step 2: Import the General Ledger

  1. Go to Accounting > Journal Entries
  2. Click Action > Import Records
  3. Upload your spreadsheet and select the general ledger sheet

Odoo import records dialog with file uploaded and balance sheet selected

  1. Odoo auto-maps columns by name — verify the mappings are correct
  2. Skip the "Account Name" column if you are identifying accounts by code

Column mapping screen showing auto-mapped fields with Account Name skipped

  1. Click Test to validate before importing
  2. Click Import
  3. Remove the "Posted" filter to find your draft entry
  4. Open it, review, and click Post

Draft journal entry ready to be posted in Odoo

Step 3: Import Customer Invoices

  1. Go to Customers > Invoices
  2. Click Action > Import Records
  3. Upload the same file and select the receivables sheet
  4. Test, then import
  5. Select all imported invoices and post them at once

Imported customer invoices selected for bulk posting

Step 4: Import Vendor Bills

  1. Go to Vendors > Bills
  2. Click Action > Import Records
  3. Upload the file and select the payables sheet
  4. Test, then import
  5. Select all imported bills and post them at once

Imported vendor bills selected for bulk posting

Step 5: Reconcile the Bank Balance

  1. Go to the Accounting Dashboard
  2. Click New Transaction on your bank account

Accounting dashboard with New Transaction button highlighted

  1. Enter "Opening Balance" as the label
  2. Set the date to your opening balance date
  3. Paste in the bank balance amount
  4. Save and close

Bank transaction form with opening balance details filled in

  1. Click Reconcile — Odoo will suggest the matching opening entry
  2. Select it and click Validate

Bank reconciliation screen showing suggested opening entry match

Verify Your Results

After completing all steps, check your general ledger:

  • The suspense account should be fully balanced (zero balance)
  • Receivable and payable accounts should show the correct balances
  • The bank account should reflect the correct balance
  • The outstanding receipts/payments account should be balanced
  • Your general ledger should match the one from your old system

Final general ledger showing all accounts correctly balanced after import

Summary

StepActionImport Model
1Create OPB journal
2Import general ledgerJournal Entry
3Import open invoicesCustomer Invoice
4Import open billsVendor Bill
5Reconcile bank balanceBank Transaction

This method provides a standard, reliable approach for importing opening balances into Odoo. While complex scenarios may require additional adjustments, this workflow covers the needs of most businesses migrating to Odoo Accounting.


References

Tags

OdooAccountingData MigrationOpening BalanceGeneral Ledger
Professional businesswoman working with data and analytics in modern office environment

Need Help with Odoo Implementation in Hong Kong?

Zoo AI is a certified Odoo partner in Hong Kong, delivering expert ERP implementation and AI automation for SMEs. Get in touch to learn more.