Odoo Multi-Company Setup: Intercompany Transactions and Consolidation
Managing a group of companies from a single ERP platform is one of the most complex yet strategically vital requirements for enterprise organizations. Odoo 19 Enterprise's multi-company architecture delivers a unified environment where each entity operates independently while sharing resources, workflows, and financial visibility across the entire group.
Whether you're consolidating financials for a holding company, managing intercompany sales between subsidiaries, or centralizing procurement across regional entities, this guide walks you through every configuration step, best practice, and common pitfall of Odoo's multi-company framework.
Key Takeaways
- Odoo 19 supports unlimited companies in a single database instance
- Intercompany rules automate purchase-to-sale and invoice generation between entities
- Shared chart of accounts enables group-level financial consolidation
- Access rights can be scoped per user across multiple companies simultaneously
- Currency management handles multi-currency group consolidation natively
- Branch-level accounting is distinct from company-level and requires careful planning
- Data isolation ensures each company only sees its own records by default
- Consolidation journals eliminate intercompany balances automatically
Understanding Odoo's Multi-Company Architecture
Odoo's multi-company feature operates at the database level. All companies share a single PostgreSQL database, with transactional data isolated through a company_id field on virtually every record. This architecture delivers significant advantages: shared master data (products, partners, users), centralized administration, and cross-company reporting without ETL pipelines.
Single database vs. multiple databases
Some ERP vendors implement multi-company by deploying separate database instances and federating them. Odoo takes the opposite approach — one database, one codebase, field-level isolation. This means:
- A product defined once can be sold by Company A and purchased by Company B
- A user can be granted access to multiple companies and switch between them via the company switcher in the top-right corner
- System administration (modules, configurations, email servers) applies globally unless overridden per company
Company hierarchy
Odoo supports a flat list of companies with optional parent-child relationships. You can designate a parent company for organizational purposes, but accounting consolidation is managed through the consolidation module rather than automatic parent-child aggregation. This distinction matters when designing your chart of accounts structure.
Branch accounting (Odoo 17+)
Starting with Odoo 17, branches were introduced as a lightweight alternative to full companies. Branches share the same legal entity and chart of accounts as their parent company but can have separate addresses, bank accounts, and reporting dimensions. Use branches when your legal structure is a single entity with operational divisions; use companies when each entity files separate tax returns or has distinct ownership.
Creating and Configuring Companies
Navigate to Settings → Companies to manage your company list. Each company requires the following base configuration before enabling intercompany workflows.
Essential company settings:
- Company name and legal name — the legal name appears on invoices and official documents
- Currency — each company can have its own functional currency; the group consolidation currency is set separately
- Country and tax localization — install the correct fiscal localization package per country (Odoo 19 ships with 70+ localizations)
- Chart of accounts — use the localization's default chart or a custom one; for group consolidation, align account codes across entities
- Fiscal year — can differ per company (e.g., calendar year vs. April–March)
- Bank accounts — each company maintains separate bank journal entries
Sharing the chart of accounts
For consolidation to work efficiently, design a shared account code structure before creating companies. A common pattern:
1xxx — Assets
2xxx — Liabilities
3xxx — Equity
4xxx — Revenue
5xxx — Cost of Goods Sold
6xxx — Operating Expenses
7xxx — Other Income/Expense
Each company gets its own instance of these accounts, but keeping codes consistent allows consolidation reports to map accounts automatically.
Tax configuration per company
Taxes are company-specific in Odoo. When you install a fiscal localization, it creates taxes for that company only. If multiple companies operate in the same country, you can duplicate tax configurations but must maintain them separately. Use the tax groups feature to aggregate similar taxes across companies for reporting.
User Access and Company Switching
User management is the most common source of confusion in multi-company setups. Understanding how access works prevents security gaps and permission conflicts.
Assigning users to companies
Each user record has an Allowed Companies section. The distinction:
- Allowed Companies: companies the user can access — they appear in the company switcher
- Current Company: the company context the user is currently operating in
Users can work across multiple companies simultaneously by enabling multiple companies in their switcher. Records they create will be assigned to their primary active company — the topmost selected company in the switcher.
Access rights per company
User roles (Sales Manager, Accountant, etc.) are global across all companies the user has access to. If you need a user to have different roles in different companies, use record rules in conjunction with groups to restrict access to specific company records.
Security model
Odoo enforces company isolation via domain filters on all model queries. When a user is in Company A's context, they see only Company A's sales orders, invoices, and contacts. Administrators must explicitly design shared master data to be visible across companies.
Configuring Intercompany Rules
Intercompany rules automate the generation of mirrored documents between companies. Navigate to Accounting → Configuration → Intercompany Rules to configure them.
Rule types:
| Rule Type | Trigger | Result |
|---|---|---|
| Synchronized | Create Sales Order in Company A | Auto-create Purchase Order in Company B |
| Bill on PO Confirmation | Confirm PO in Company B | Auto-create Vendor Bill in B and Sales Invoice in A |
| Bill on Product Delivery | Deliver goods from Company A | Trigger invoice generation |
Setting up a basic intercompany rule:
- Go to Settings → Technical → Intercompany Rules
- Click New and name the rule (e.g., "A sells to B")
- Set Invoicing/Refunding: choose auto-post or draft for review
- Set Purchase: enable if a confirmed PO should auto-create a SO in the selling company
- Define the Source Company and Destination Company
- Save and test with a sample sales order
Product mapping for intercompany
When Company A sells a product to Company B, both companies must have the product in their catalog. Best practice: create products at a global level — define the product once and ensure both companies' pricelists include it. For intercompany transactions, the internal transfer price (cost or marked-up cost) determines the value that flows between entities.
Journal configuration for intercompany entries
Each company needs dedicated intercompany journals:
- Intercompany Receivable journal in the selling company
- Intercompany Payable journal in the buying company
These journals use intercompany receivable/payable accounts that will be eliminated during consolidation.
Intercompany Inventory Transfers
Beyond financial transactions, multi-company setups often require physical goods to move between entities. Odoo handles this through intercompany stock moves linked to intercompany rules.
Route configuration:
- Enable the Multi-Step Routes inventory option
- Create a route named "Intercompany Transfer" with source location = Company A's warehouse and destination = Company B's warehouse
- Link this route to products that can be transferred between entities
- When an intercompany PO is confirmed, a delivery order in Company A and a receipt in Company B are generated automatically
Valuation across entities
Inventory valuation must account for the transfer price between companies. If Company A transfers goods at cost to Company B:
- Company A records the outgoing transfer: Debit Intercompany Receivable / Credit Inventory
- Company B receives goods: Debit Inventory / Credit Intercompany Payable
During consolidation, these intercompany balances are eliminated.
Financial Consolidation in Odoo 19
Odoo 19 Enterprise includes a Consolidation module under Accounting that provides formal group financial statements.
Setting up a consolidation chart:
- Navigate to Accounting → Consolidation → Consolidation Charts
- Create a chart of accounts mapping each subsidiary's accounts to group-level consolidated accounts
- Define elimination rules for intercompany balances
Currency translation
For subsidiaries with currencies different from the consolidation currency:
- Monetary items (receivables, payables, cash) are translated at closing rate
- Non-monetary items (fixed assets, inventory) are translated at historical rate
- Income/expense items are translated at average rate for the period
- Translation differences are recorded in a Currency Translation Adjustment equity account
Elimination entries
Intercompany eliminations remove:
- Intercompany receivables and payables
- Intercompany revenue and cost of goods sold
- Unrealized profit in intercompany inventory
Odoo 19's consolidation module automates most eliminations if intercompany accounts are consistently coded. Manual elimination journals can be entered directly in the consolidation period.
Generating consolidated financial statements
Once all subsidiaries have closed their periods and eliminations are complete:
- Consolidated Balance Sheet: assets, liabilities, equity across all entities minus eliminations
- Consolidated P&L: revenues and expenses with intercompany eliminations
- Consolidated Cash Flow: generated automatically from the other statements
Reporting and Analytics Across Companies
Cross-company report filters
Most standard reports (sales analysis, purchase analysis, inventory valuation) include a Company filter that allows selecting multiple companies and aggregating results. This is useful for operational reporting that doesn't require formal eliminations.
Analytical accounting across companies
Analytic accounts (cost centers, projects) can be shared across companies, enabling cross-entity project costing. A project spanning multiple legal entities can accumulate costs from each entity's timesheets and expenses into a unified analytic view.
Custom dashboards
The Odoo 19 Dashboard module supports widgets that pull data from multiple companies. You can build an executive dashboard showing group-level revenue vs. target, cash position across all entities, intercompany balance summary, and overdue receivables by entity.
Common Pitfalls and Best Practices
Pitfall 1: Inconsistent chart of accounts
Setting up each company's chart of accounts independently leads to consolidation mapping headaches. Design a group chart template before creating companies.
Pitfall 2: Intercompany rules creating duplicate documents
Bidirectional rules without careful filtering can create circular document generation. Always test rules in staging with a small transaction volume before enabling in production.
Pitfall 3: Transfer pricing compliance
For international groups, intercompany transfer prices must comply with OECD guidelines. Configure Odoo's intercompany pricelists to enforce arm's-length pricing and document your pricing policies.
Pitfall 4: User switching mistakes
Users who switch companies without understanding the implications create records in the wrong entity. Train all multi-company users on the company switcher and implement approval workflows for high-value intercompany transactions.
Best practices checklist:
- Finalize group chart of accounts before any company goes live
- Define intercompany pricing policy and document it
- Create an intercompany reconciliation process for month-end close
- Implement approval workflows on intercompany transactions above a threshold
- Schedule automated intercompany balance reports for finance teams
- Test all intercompany rule combinations in staging before production deployment
Frequently Asked Questions
Can different companies in Odoo use different fiscal year end dates?
Yes. Each company has its own fiscal year configuration under Settings → Company. A UK subsidiary can use April–March while the US parent uses January–December. The consolidation module handles different period alignments, though it requires manual mapping when periods don't align exactly.
How many companies can Odoo support in a single database?
Technically, there is no hard limit. Implementations with 50–100+ companies exist. Performance depends on server hardware and database configuration. With proper PostgreSQL tuning and adequate RAM, databases with 30–50 companies run efficiently. Beyond that, dedicated performance testing is advisable.
Does each company need its own Odoo subscription?
With Odoo Enterprise, licensing is per user, not per company. All companies in a single database share the same user count. If you have 100 users spread across 10 companies, you need 100 Enterprise user licenses regardless of the number of companies.
Can intercompany transactions be posted automatically without manual approval?
Yes. The intercompany rule can be set to "Auto Validate" which posts intercompany invoices immediately upon the triggering event. Alternatively, "Draft" mode lets accounting staff review each document before posting. For high-volume groups, auto-validation with periodic reconciliation is the recommended approach.
How does Odoo handle intercompany VAT/GST?
Intercompany transactions apply the appropriate taxes based on the fiscal positions configured for intercompany partners. For cross-border intercompany transactions, zero-rated or exempt fiscal positions are typically configured. Always verify with your tax advisor for jurisdiction-specific requirements.
Is it possible to consolidate companies on different Odoo versions?
No. The consolidation module requires all subsidiary data to be in the same Odoo database and version. If subsidiaries are on different versions or other ERP systems, migrate all entities first or use a separate BI tool for consolidation.
Next Steps
Implementing a multi-company Odoo environment requires precise planning, a well-designed chart of accounts, and expert configuration of intercompany rules. Mistakes at the foundation level are costly to correct after go-live.
ECOSIRE's Odoo implementation team has deployed multi-company environments for holding groups managing 3 to 40+ entities across multiple countries and currencies. Our structured methodology covers entity mapping, chart of accounts design, intercompany policy documentation, and end-to-end testing before cutover.
Contact ECOSIRE for a Multi-Company Implementation Assessment →
Our specialists will review your group structure, identify consolidation requirements, and deliver a deployment plan tailored to your entities, jurisdictions, and reporting obligations.
Written by
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Transform Your Business with Odoo ERP
Expert Odoo implementation, customization, and support to streamline your operations.
Related Articles
AI-Powered Customer Segmentation: From RFM to Predictive Clustering
Learn how AI transforms customer segmentation from static RFM analysis to dynamic predictive clustering. Implementation guide with Python, Odoo, and real ROI data.
AI for Supply Chain Optimization: Visibility, Prediction & Automation
Transform supply chain operations with AI: demand sensing, supplier risk scoring, route optimization, warehouse automation, and disruption prediction. 2026 guide.
B2B E-commerce Strategy: Build a Wholesale Online Business in 2026
Master B2B e-commerce with strategies for wholesale pricing, account management, credit terms, punchout catalogs, and Odoo B2B portal configuration.