Running two or more legal entities out of a single ERP is one of the more demanding things you can ask an accounting system to do. Get it right and your consolidation closes in hours, not days. Get it wrong and you're reconciling intercompany payables by hand every month while your auditor waits. This post explains how Odoo's multi-company accounting architecture actually works, where it performs well, and where you'll want to think carefully before assuming the default configuration covers your situation.
How Odoo Structures Multiple Companies
The Single-Database Model
Odoo runs all your companies inside one database. Each entity gets its own chart of accounts, fiscal positions, tax settings, bank journals, and currency configuration. Users can be granted access to one company, a few, or all of them, and they switch between companies from a menu in the top bar without logging out.
This is a meaningful architectural difference from systems where "multi-entity" means separate databases linked by an integration. A single database means a shared master data layer: your products, vendors, customers, and employees exist once and can be shared across entities or scoped to individual companies depending on your setup. That alone eliminates a category of data-sync problems that plague multi-instance setups.
Chart of Accounts: Shared or Separate
When you create a new company in Odoo, you assign it a localization package (the country-specific chart of accounts and tax configuration). From there, you can:
- Keep each company's chart of accounts entirely independent, which is the right call if your entities operate in different countries or industries with genuinely different account structures.
- Build a shared chart of accounts by creating accounts at a parent company level and pushing them to subsidiaries, keeping the account codes and names consistent across entities.
The shared-chart approach makes consolidation significantly cleaner because your reporting layer doesn't have to map mismatched account codes. If you're setting up multiple entities from scratch, your implementation partner will almost always recommend standardizing the chart before going live rather than trying to harmonize it later.
Currencies and Fiscal Years
Each company sets its own functional currency and can transact in any other currency Odoo has configured. Exchange rate revaluation runs per entity, and gains and losses post to accounts you define in each company's settings. Fiscal years can also differ per entity, which matters if you have a subsidiary in a jurisdiction with a non-calendar fiscal year.
Intercompany Transactions: The Mechanics
Automated Intercompany Rules
The part most finance teams want to understand first is how intercompany transactions are created and matched. Odoo has a built-in intercompany rule system that can automate the mirror-entry creation when one entity transacts with another.
Here's what the flow looks like in practice: Company A raises a purchase order from Company B. With intercompany rules active, Odoo automatically creates the matching sales order in Company B. When Company A validates its vendor bill, the corresponding customer invoice appears in Company B. Both sides of the transaction are generated in the correct entity, with the correct accounts, without anyone manually keying data into the second company.
You configure these rules in the Accounting settings under the intercompany transactions section. The key choices are:
- Synchronize purchase/sales orders, creates the mirror order automatically.
- Synchronize invoices/bills, creates the mirror invoice when one side posts.
- Whether to auto-validate the mirror document or leave it in draft for review.
For most groups, leaving mirror invoices in draft until reviewed is the safer starting point. It adds a manual confirmation step, but it also catches cases where the originating transaction had an error before both sides are posted and reconciled.
Intercompany Accounts and Elimination
Every intercompany transaction needs to be routed through dedicated intercompany receivable and payable accounts (e.g., account 1601 "Due from Subsidiaries" and 2601 "Due to Subsidiaries"). These accounts are what you eliminate during consolidation to avoid double-counting revenue and expenses across the group.
If your intercompany accounts aren't clean going into consolidation, the elimination entries become a research project instead of a routine close step.
Odoo doesn't automatically eliminate intercompany balances at the consolidated level. That step happens in the reporting layer, either through manual journal entries in a consolidation company or through your external consolidation tool. This is a real constraint worth understanding: Odoo handles the transaction creation and matching well, but the formal elimination and consolidation journal entries typically require either a structured consolidation company setup or an external spreadsheet / consolidation tool depending on the complexity of your group.
Reconciling Intercompany Balances
At period close, your intercompany receivable in Company A should match the intercompany payable in Company B to the penny (adjusted for timing and currency). In Odoo, the standard reconciliation tools work well for this: you can filter the intercompany accounts by partner (using each entity as a contact) and match outstanding items.
Where this gets more complex is with currency differences. If Company A is USD-functional and Company B is EUR-functional, the same transaction will land at a different converted amount on each side depending on the rate used. Your implementation partner will set up the revaluation and translation rules to handle this, but it's something to scope explicitly before go-live rather than discover at first month-end.
Consolidated Reporting in Odoo
The Consolidation Company Approach
The most common approach for groups running Odoo is to set up a consolidation company (sometimes called a "holding" company in Odoo) that consolidates financial data from the subsidiaries. This entity holds no operational transactions of its own; its journals receive the rolled-up figures from child companies.
Within this structure, you run the consolidation journals by posting entries that pull balances from each subsidiary into the holding company's accounts. Elimination entries for intercompany transactions are posted here as manual journal entries or as recurring entries if the intercompany relationships are stable month over month.
The consolidated P&L and balance sheet then come out of the holding company's reports. Because it's still inside Odoo, you have access to the same financial reporting tools: the Balance Sheet, Profit & Loss, Cash Flow Statement, and the General Ledger report, all filterable by date range and comparison period.
Multi-Company Reporting Without a Consolidation Entity
For smaller groups (two or three entities with simple intercompany relationships), Odoo's financial reports can be run across multiple companies simultaneously by selecting multiple companies in the company switcher before generating the report. This gives you a combined view of the selected entities, though it's an aggregation, not a true consolidation: intercompany transactions are not eliminated, and the output is the sum of both balance sheets.
This works well for quick management reporting or cash-position reviews across the group. It's not a substitute for audited consolidated financials, where eliminations are required. Know which one you need before deciding whether the built-in multi-company report view is sufficient for your use case.
Where External Consolidation Tools Still Make Sense
For groups with more than four or five entities, complex minority interests, partial ownership stakes, or statutory consolidation requirements under IFRS or US GAAP, a dedicated consolidation tool (Tagetik, Vena, or even a well-structured Excel model maintained by your controller) is often used alongside Odoo rather than replacing it.
Odoo exports trial balance data cleanly in Excel and CSV, which feeds into those tools without friction. The honest positioning here is that Odoo handles the transaction layer and entity-level reporting very well; the group consolidation layer for large, complex corporate structures is an area where dedicated tools earn their place. For a group of two to five entities with straightforward ownership, Odoo's native setup handles it.
Audit Readiness Across Entities
Audit Trail by Company
Every journal entry in Odoo is locked once the period is closed, with a full audit trail showing who created it, when, and what was changed if any modification occurred before posting. This applies per company, so your auditor can review entity-level journals without seeing unrelated transactions from sibling companies (assuming user access is scoped appropriately).
The lock date feature in Odoo Accounting is worth configuring carefully in a multi-entity setup. Each company has its own lock date for both the tax period and the accounting period. Closing these consistently across entities, on the same schedule, prevents after-the-fact entries from distorting the intercompany reconciliation you just completed.
Access Control and Segregation of Duties
One practical advantage of Odoo's single-database architecture is that access control is granular at the company level. An accountant for Subsidiary A can be blocked from viewing Subsidiary B's financials entirely. An internal auditor or CFO can be granted read access to all entities without posting rights. Your implementation partner sets this up in the user and group configuration during onboarding.
Segregation of duties within a company (the person who creates a vendor bill shouldn't be the one who approves payment) is handled through Odoo's approval workflows and user group assignments. These can differ per entity if your operational structure requires it.
Tax Reporting Across Jurisdictions
Each company files its own tax returns in its own jurisdiction using Odoo's tax report, which is pre-configured by the localization package. VAT returns, GST filings, and sales tax summaries are all entity-scoped. If you have entities in multiple countries, each one gets the relevant tax report for its country without interference from the others.
This is one area where Odoo's single-database, multi-company model genuinely earns its keep: you configure the tax rules once per jurisdiction, and every transaction in that entity flows through the correct tax logic automatically.
The broader picture worth keeping in mind: multi-entity accounting in Odoo works best when it's set up deliberately, with a consistent chart of accounts, clear intercompany account assignments, and a defined consolidation process established before the first entities go live. The native tools cover most of what a five-entity group needs. For larger or more structurally complex groups, the transaction layer in Odoo still holds up, and the consolidation work typically shifts to a specialist tool fed by Odoo's data. Either way, your implementation partner should be walking through the entity structure, ownership, and reporting requirements with you before any configuration begins.
Is Odoo What You Need?
Our team will help you discover if Odoo is the right fit, and get you a tailored demonstration of Odoo for your use case.
Frequently Asked Questions
All your companies run inside a single Odoo database. Each entity gets its own chart of accounts, tax configuration, bank journals, and currency settings, but shared master data like products, vendors, and customers exists once and can be scoped to individual companies or shared across all of them. This is a real architectural advantage over systems that link separate databases through an integration, where data-sync issues are a constant maintenance burden.
Odoo can automatically generate a corresponding bill in the buying entity when a sale is posted in the selling entity, using its intercompany rules configuration. That means a sale in Company A creates a purchase bill in Company B without manual entry on either side. The setup requires some upfront configuration, typically done by your implementation partner, to map accounts correctly and ensure the automated entries match your intercompany elimination needs at consolidation.
Odoo supports consolidated reporting through its accounting module, where you can pull combined P&L and balance sheet views across companies in the same database. Because all entities share one database, there's no file import or manual aggregation step, the data is already in one place. That said, if your consolidation involves complex minority interests, multi-currency eliminations at a sophisticated level, or statutory group reporting requirements, you should evaluate whether the standard reporting covers your auditor's expectations or whether a supplementary reporting layer is needed.
Each company in Odoo can be configured with its own functional currency, and Odoo handles currency conversion on intercompany transactions using the exchange rates you define. Unrealized and realized foreign exchange gains and losses are tracked separately per entity. For groups with significant multi-currency volume, it's worth having your implementation partner walk through the revaluation and elimination workflow before go-live, since the default setup may need adjustment to match your reporting standards.
In Odoo, a single user account can be granted access to one company, several, or all of them, and switching between companies is done from a menu in the top bar without logging out or opening a separate session. Permissions are additive, meaning a user can have different roles in different companies, read-only access in one, full accounting access in another. This makes it practical for shared-services teams, like a central AP function, to process transactions across entities without needing multiple logins or licenses.