Odoo Multi-Company Setup: Step-by-Step Guide
Set up multiple companies in Odoo with our step-by-step guide. Learn record sharing, inter-company transactions, user access control, and financial consolidation.
- Create companies in Settings > Users & Companies > Companies with name, address, currency, and bank account
- Share products and contacts across companies; isolate chart of accounts, journals, and bank accounts per company
- Assign users to allowed companies and set their default company to control visibility and prevent accidental postings
- Enable Inter-Company Rules to auto-generate purchase orders when one company sells to another
- Consolidate reports by exporting balance sheets per company and adding rows, or use the Consolidation module (Odoo 18+) to auto-eliminate intercompany balances
A multi-company setup in Odoo lets you run multiple legal entities from one database without data leakage. You control what records stay shared (like products) and what gets separated (like bank accounts). Most growing businesses need this by year two: you have a subsidiary, open a new regional office, or acquire another company.
What Is Odoo Multi-Company and When Do You Need It?
Odoo multi-company lets you operate multiple legal entities in a single database with separate accounting, taxes, and reporting. Records like products can be shared, while bank accounts and invoices stay isolated by company. Use it when you have subsidiaries, regional branches, or affiliated businesses sharing operational systems.
Without multi-company, you would run separate Odoo instances for each entity. That means duplicate data, manual syncing, and no consolidated reporting. You would train staff on two systems. You would struggle to share a product catalog across regions.
Multi-company solves this. One login. One product list. Separate invoices, separate tax returns. Odoo handles the record rules automatically. A user sees only the companies you assign to them.
When should you actually set this up? If you have more than one legal entity filing separate tax returns, or if you will within the next year, build the structure now. Do not retrofit it later when data already exists in one company.
Multi-Company vs. Branches: Which Should You Use?
A branch shares the parent company's chart of accounts and operates under the same tax ID. A separate company has its own chart, tax ID, and reporting. Choose branches for regional sales offices; choose separate companies for acquisitions or different legal entities.
Branches are simpler. They inherit the parent's account structure. Tax filings roll up automatically. Use branches if all your entities file consolidated returns and share the same accounting policy.
Separate companies are harder to set up but let each entity have different account codes, tax rates, and fiscal years. Use them if you have truly independent operations: a UK subsidiary with GBP accounts, a French affiliate with different VAT treatment, an acquired company with legacy account numbers you need to keep.
If you are unsure, default to separate companies. You can simplify later; you cannot split a branch-based mess.
Step 1: Create a Company and Configure Basic Settings
Navigate to Settings > Users & Companies > Companies. Click "Create." Fill in the company name, address, registration number, currency, and default bank account. Odoo auto-assigns a company code.
You must provide a company name. Everything else is optional at first, but fill it in now: registration number (VAT ID in EU, EIN in US), currency (critical: you cannot change it after the first transaction), and address. Odoo uses the address for printed invoices and legal forms.
Set a default bank account even if you have multiple accounts. This is where Odoo deposits customer payments by default. You can change it per invoice later.
Odoo also asks for a logo and website URL. These appear on printed documents. Upload a 200x200 PNG or JPG; Odoo does not watermark or resize badly.
Once created, you cannot delete a company. You can disable it (hide it from user lists), but the data stays. So think twice before hitting "Create" on a test company.
Step 2: Manage Shared vs. Company-Specific Records (The Company Field)
Products are shared across companies by default. Contacts can be shared or restricted. The Company field on each record controls visibility: leave blank for "all companies," pick one to lock it. Chart of accounts is company-specific and cannot be shared.
This is where multi-company gets tricky. Here is what actually happens:
Products. By default, a product belongs to no company: it is visible and sellable in all companies. You can set a product to "Company A" if only that entity should sell it. But if you have 50 products for the main company and 20 for the subsidiary, you do not set each one individually. Instead, mark the subsidiary products with a company filter and let the main products stay blank.
Contacts (Customers/Suppliers). A contact can be global or company-specific. A supplier might sell to all your companies at the same price, so you mark them as "All Companies." A local distributor might only work with Company A, so you restrict them. If you do not specify, Odoo treats the contact as global.
Chart of Accounts. Each company gets its own. You cannot share an account (1000 Assets) between two companies; it has to be re-created for each. You CAN make the account structures identical in code and name. Many groups do this for consolidation: both Company A and Company B have a 1000 Assets account, and when you consolidate, you add them together.
Journals. Bank, cash, sales, purchase journals are company-specific. You cannot post a Company A invoice in Company B's sales journal. Odoo enforces this.
Warehouses. By default, a warehouse belongs to no company: all companies can ship from it. This is useful if you have one physical warehouse serving multiple legal entities. Set a warehouse to "Company A" only if that company has sole ownership.
Here is a table for quick reference:
| Record Type | Shared by Default? | Company Field | Notes |
|---|---|---|---|
| Products | Yes | Optional | Leave blank for all companies; set one for exclusivity |
| Contacts | Yes | Optional | Global by default; restrict per company if needed |
| Chart of Accounts | No | Required | Each company has its own; recreate per company |
| Journals | No | Required | Bank, sales, purchase journals are company-specific |
| Warehouses | Yes | Optional | Shared by default; restrict if single-company ownership |
| Bank Accounts | No | Required | Company-specific; post to company's journals only |
| Stock Locations | Yes | Optional | Shared by default; restrict if company-owned |
The key: if a record has no Company field set, all companies can see and use it. If it has one company set, only that company can touch it. Odoo enforces this invisibly in the backend.
Step 3: Set User Access Rights and Allowed Companies
Assign users to specific companies in Settings > Users & Companies > Users. Set their "Default Company" for forms and dashboards. Enable "User's Companies" to let them view and edit multiple companies. Odoo enforces record rules based on company assignment automatically.
Every user has two company settings: default company and allowed companies. Default company is where they start. When they create an invoice, it defaults to the default company. Allowed companies is the list they can switch between with the company selector menu (top-left, next to the menu icon).
If you set a user to Company A only, they cannot see Company B records. If you allow them both, they can switch. But they still need the right permissions: a sales user can create invoices in both companies if you grant the "Create" permission globally. A regional manager might be allowed Companies A and B but no others.
This is where access control gets granular. Do not confuse company assignment with permissions. A user assigned to Company A can still lack permission to delete invoices. Permissions control what you can do; company assignment controls what you can see. For deep dives on record-level access control, see our guide to Odoo security which covers record rules and access control lists.
Common mistake: giving users access to all companies without intent. A sales rep in the UK office can accidentally post a customer payment to the US company. Set allowed companies tightly. Let users only see the companies they work in.
Step 4: Configure Inter-Company Transactions (Optional)
If company A sells to company B, enable Inter-Company Rules under each company's settings. Odoo auto-generates a purchase order when company A creates a sales order to company B. No manual invoice needed.
Inter-company transactions automate internal workflows. Here is how it works: your UK subsidiary (Company A) needs supplies from your German manufacturing unit (Company B). Instead of manually creating a sales order in Company A and a purchase order in Company B, you just create a sales order once.
Odoo's inter-company rules watch for it. When you confirm the Company A sales order to Company B (as the customer), Odoo automatically creates a purchase order in Company B from Company A (as the supplier). Goods are received in Company B's warehouse. Company B's invoicing system auto-generates an invoice payable to Company A.
Both companies' ledgers update. Company A records a sale. Company B records a purchase. Accounts receivable in A goes up. Accounts payable in B goes up. You have zero manual data entry.
To set this up: go to each company's settings. Under "Intercompany" section, enable inter-company transactions and set the intercompany user (usually a system account, not a real person). Then go to Sales > Configuration > Intercompany Rules and create a rule: "When Company A sells to Company B, Company B receives a PO from Company A."
For a detailed walkthrough on the invoicing mechanics and how accounts are affected, read our post on Odoo invoicing which covers the full invoice lifecycle.
Warning: intercompany transactions only work if both companies exist in the same database. If Company B is on a different Odoo instance, you cannot use this automation.
Step 5: Consolidation and Financial Reporting
Multi-company balance sheets show each company separately by default. To consolidate, filter reports by company or use Odoo's Consolidation module (available in Odoo 18+). Eliminate inter-company balances by querying transactions between your own companies and netting them out.
Odoo's standard financial reports work per company. Go to Accounting > Reporting > Balance Sheet. At the top, select "Company A." You see Company A's assets, liabilities, equity. Switch to "Company B," you see Company B's numbers. They do not mix.
To consolidate: run each company's balance sheet, pull the data, and add the rows. Odoo does not auto-consolidate by default. You have two options.
Option 1: Manual consolidation. Export balance sheets from Accounting > Reporting > Balance Sheet, one company at a time. Paste into a spreadsheet. Add the rows. Subtract inter-company transactions (e.g., if Company A owes Company B 10k, remove it from both companies' payables/receivables). This works for small groups but gets tedious at five companies.
Option 2: Use the Consolidation module (Odoo 18+). You set up a "Consolidation Company" that pulls balances from subsidiary ledgers and auto-eliminates intercompany items. This requires accounting expertise to set up but is accurate and auditable. Ask your Odoo partner for help.
For most 10-30 person companies, manual consolidation is fine. It takes two hours per quarter. If you go to consolidated IFRS reporting, you need the Consolidation module.
Common Pitfalls and How to Avoid Them
Duplicate products across companies break consistency and balloon SKU counts. Forgetting user training causes accidental postings to the wrong company. Mismatched account codes prevent consolidation. Shared warehouses without stock rules create inventory chaos.
Let me drill into each:
Duplicate Products. A manager in Company A creates a product "Widget Pro, 50ml." A manager in Company B, unaware it already exists, creates another. Now you have two SKUs for the same product. Inventory reporting is wrong. Cost of goods sold is split. This scales badly: at five companies, you have hundreds of duplicates.
Avoid this: before multi-company goes live, set one person as the product master. All new products go through them. Use a consistent SKU format: "WIDGET-PRO-50ML" everywhere. Do not let regional teams create products; they submit requests instead.
Wrong Company Postings. A user creates a purchase order in Company B when they meant Company A. The invoice goes to the wrong company ledger. By the time you catch it, 50 other transactions have been posted. Correcting this is a manual journal entry nightmare.
Avoid this: restrict user access strictly. If someone only works in Company A, set allowed companies to Company A only. Train users on the company selector (top-left). Make it policy: before you confirm, check the company name at the top of the form.
Mismatched Account Codes. Company A uses 4000-4999 for revenue. Company B uses 4000-4100 for sales, 4100-4999 for services. When you consolidate, 4100 does not line up. Consolidation becomes guesswork.
Avoid this: build a Consolidated Chart of Accounts template before you set up companies. Every company gets identical account numbers and names. Regional differences (UK VAT accounts, US state tax accounts) live in sub-accounts: 6000 VAT is universal; 6010 is VAT England, 6011 is VAT Scotland. This takes three hours of accounting setup; it saves weeks of consolidation work.
Shared Warehouse, No Stock Rules. Company A has 100 units of Widget in the warehouse. Company B also claims ownership. When Company A sells 80 units, is Company B down to 20, or still at 100? Odoo tracks warehouse stock, not company stock. You need stock rules to allocate inventory per company.
Avoid this: if warehouses are shared, implement stock ownership rules. You can reserve stock per company or use stock rules to split inventory logically. If that is too complex, give each company its own warehouse (or its own storage area in the same warehouse). See our post on Odoo warehouse management for multi-company inventory setup.
Frequently Asked Questions
How do inter-company transactions work in Odoo 18?
Odoo 18 inter-company rules auto-generate purchase orders when a sales order is confirmed to another company. The process is identical to earlier versions; Odoo 18 added the ability to reverse automatic transactions if needed. No manual intervention required.
Can you transfer inventory between companies?
Yes, using inter-company transfer. Create a sales order in Company A to ship goods to Company B, with Company B as the customer. Odoo generates a stock transfer and a PO in Company B. The goods move; both ledgers update.
What is a branch in Odoo?
A branch is a subsidiary company that shares the parent's chart of accounts and tax ID. Useful for regional sales offices or cost centers. Branches cannot have independent accounts; they inherit the parent's structure.
How do you switch between companies as a user?
Click the company selector at the top-left of the Odoo menu (next to the menu icon). A dropdown lists all allowed companies. Switch in one click. Forms default to your default company but let you override per-record.
Which records are shared by default in multi-company Odoo?
Products, contacts, warehouses, and stock locations are shared by default (visible to all companies). Chart of accounts, journals, bank accounts, and company-specific master data are isolated. You can override sharing using the Company field.
How do you consolidate financial statements across companies?
Export balance sheets per company and manually add the rows in a spreadsheet, subtracting inter-company transactions. Or use Odoo's Consolidation module (Odoo 18+) to auto-eliminate intercompany balances. Manual consolidation takes 2 hours per quarter for a small group.
What happens if you forget to assign a user to a company?
The user sees an empty menu. They cannot navigate to any company. Assign them before they log in; if they are already logged in, they stay stuck until you fix it and they log out and back in.
The Bottom Line
Multi-company in Odoo is straightforward once you decide what to share. Start with products and contacts shared, separate chart of accounts, and tight user access control. Plan your account codes and company structure before you create the first entity; retrofitting is painful. Train users on the company selector and make it policy to verify the company before posting transactions. Running a multi-company instance at scale requires infrastructure and support that handles growth: if you are serious about scaling, run Odoo on managed hosting so your team focuses on operations, not DevOps.