This guide sets up several shops under one legal entity in Odoo so each shop gets its own profit and loss statement. The short answer: create each shop as a branch of the parent company. Branches post to the parent's chart of accounts and use its taxes, so you keep one set of books, while every entry records its branch. Per-shop journals and payment methods are still needed, but they track where money was received and do not split the P&L on their own.
It is written for owners, accountants and administrators of multi-location retail or restaurant businesses. The steps were verified on Odoo 19.
Before you start
- Version and edition: Odoo 19. Branches and Point of Sale work in Community and Enterprise. The Profit and Loss report is Enterprise only.
- Apps: Point of Sale and Accounting (called Invoicing in Community).
- Access rights: creating branches needs access to the Settings app. Users need each branch they work in listed in the Companies field of their user record.
- Decide the structure first: Odoo blocks changes to the company hierarchy once a company is saved, so an existing standalone company cannot become a branch later.
- Terms used: a branch is a company record placed under a parent and belonging to the same legal entity. A journal is the register an entry is posted in. A payment method is what the cashier picks at checkout, such as Cash or Card. An analytic account is a reporting tag on entry lines.
Three ways to split results by shop
- Branches. Every entry carries a Company value, so the P&L runs per branch or for the whole entity, covering both POS sales and costs.
- Separate journals in one company. The Odoo 19 Profit and Loss report can filter by journal, which isolates a shop's sales. Bills, payroll and rent land in shared journals, though, so the result is closer to a sales report.
- Analytic accounts. A Branch plan with one analytic account per shop works on vendor bills, where the distribution is set per line. Point of Sale has no analytic field, and the automatic distribution models match on product, category, contact, account code prefix and company, none of which identifies a shop inside one company. POS sales cannot be tagged by shop this way in standard Odoo.
How branches handle the accounting
- The chart of accounts and taxes live on the parent. A new branch gets no copy and uses the parent's.
- Currency and fiscal year end are copied from the parent and are read-only on the branch.
- Bank and cash accounts are the exception: an account of the Bank and Cash type cannot be shared between companies. A bank or cash journal created in a branch with no account set gets a dedicated new account.
- The tax report groups the active company with every branch that has the same Tax ID, and a branch with an empty Tax ID counts as having its parent's. Leave it blank on the branches and one return covers all shops.
Step by step: create the branches
- Open the Settings app and go to Users & Companies > Companies.
- Open the parent company, which is the legal entity.
- In the Branches tab, click Add a line, enter the shop's name and address, and save. Repeat for each shop. A Branches button now appears at the top of the parent's form.
- Go to Users & Companies > Users, open each user and add the branches they work in to the Companies field.
Step by step: journals and payment methods for each shop
Tick only the branch in the company selector at the top right first, so new records are created in it.
- Open the Accounting app, go to Configuration > Accounting > Journals, and create a journal with Type Bank for the shop's bank account and one with Type Cash for its till.
- Open the Point of Sale app and go to Configuration > Payment Methods. Create a cash method whose Journal is the shop's cash journal and a card method whose Journal is its bank journal. A card method also needs an Outstanding Account, the holding account its payments sit in until reconciled with the bank. A method with no journal charges the sale to the customer's account instead.
- Go to Configuration > Settings and pick the shop in the Point of Sale field at the top. Set Payment Methods to that shop's methods, and under Default Journals set Orders to a journal of the same branch. Each session's closing entry is posted there, so it is recorded under the branch.
Rules Odoo enforces for each shop
- A point of sale only accepts payment methods of its own company, so a card method created on the parent or another branch is rejected.
- A cash payment method serves one point of sale only, and a cash journal can be linked to one payment method only, so every shop needs its own pair.
- Bank journals have no such limit: shops that deposit into the same bank account can share a bank journal created on the parent.
Read the P&L per branch
- In the company selector, tick only the branch you want to review.
- Open the Accounting app and go to Reporting > Profit and Loss. The figures cover that branch only. Selecting the parent instead also selects its branches and shows the whole entity.
To compare branches side by side, use a horizontal group, which adds a column per value of a field. Turn on developer mode, which shows technical menus, from the Developer Tools section of the Settings app. Then in Accounting go to Configuration > Accounting > Horizontal Groups, create a group with a rule whose Field is Company, and add Profit and Loss under Reports. With all branches selected, choose the group from the Horizontal Group button on the Profit and Loss report. It should then show a column per company.
Check that it worked
- Open a session in one shop, ring up a card sale and a cash sale, and close the session.
- In Accounting, go to Accounting > Journal Entries and open the newest entry in that shop's Orders journal. The Company column shows the branch.
- Tick only that branch and run Profit and Loss for today. The sales appear. Tick a different branch instead and they do not.
Common mistakes to avoid
- Booking shared costs on the parent. A head office bill posted in the parent never reaches a branch P&L. Post costs in the branch that carries them.
- Typing a Tax ID on every branch. A branch with its own Tax ID drops out of the parent's tax report and needs its own return.
- Assuming Odoo 20 screens match. Branch rules are unchanged in Odoo 20, but Point of Sale gains a separate Closing Journal and the P&L loses its Journals filter.
Steps verified on Odoo 19. Menus and labels can differ on other versions.
Common questions
Should several shops of one legal entity be branches or separate companies in Odoo?
Branches. A branch shares the parent's chart of accounts, taxes, currency and fiscal year, while each journal entry still records the branch, so you get per-shop results from one set of books. Separate companies are meant for separate legal entities.
Can Odoo Point of Sale tag sales with an analytic account per shop?
Not in standard Odoo. Point of Sale has no analytic field on the shop, order or payment method, and analytic distribution models cannot tell shops apart when they are all in the same company. Using branches gives the per-shop split without analytic accounts.
Do Odoo branches file one tax return or several?
The tax report groups a company with every branch that has the same Tax ID, and a branch with no Tax ID counts as having its parent's. Leaving the branch Tax ID empty keeps one combined return.
Can two Odoo POS shops share a cash payment method?
No. A cash payment method can only be used by one point of sale, and a cash journal can only be linked to one payment method, so each shop needs its own. Card methods can share a bank journal.
Can an existing Odoo company be turned into a branch later?
No. Odoo blocks changes to the company hierarchy after a company is created, so branches must be added under the parent from the start.
Talk to the team.
If you are setting this up, or Odoo is not behaving the way this guide describes, book a 30-minute call. We will look at your configuration and tell you what it needs. Calgary studio, in-house team, no offshore handoffs.
Book the call →