When you move from Tally to Odoo, migrate your masters (ledgers mapped to a chart of accounts, customers and vendors with GSTINs, stock items with HSN codes), an opening trial balance at the cut-over date, and the open items behind it: unpaid invoices and bills, stock on hand and bank balances. Leave the transaction history in Tally, kept read-only for audits. Cut over at the start of a financial year if you can, and at least at the start of a month, so each GST return comes from one system.
This is the approach we use and the one Odoo's own accounting onboarding documentation describes. It keeps the migration small, checkable and reversible.
Why you shouldn't migrate your Tally history
It is tempting to bring every voucher across "so everything is in one place." It is almost always a mistake. Old vouchers have to be mapped to new accounts, taxes and partners, and every mapping error shows up in reports you will then have to explain. The work grows with the years you bring, and the value doesn't. Nobody runs next month's operations off a 2022 journal voucher.
You still need the history. Indian law requires it: Section 36 of the CGST Act requires GST records to be kept until 72 months after the due date of the annual return for that year, and Section 128(5) of the Companies Act requires books of account for the preceding eight financial years. Keep the Tally data and a working copy of Tally for that period. Export the key reports (trial balance, ledgers, GST returns, stock summary) to PDF or Excel as an extra archive.
What to migrate from Tally to Odoo
| Data | Migrate? | Notes |
|---|---|---|
| Ledgers and groups | Yes, mapped | Map to Odoo's Indian chart of accounts, not copied one-to-one |
| Customers and vendors | Yes | With GSTIN, state, PAN, GST treatment, payment terms |
| Stock items | Yes | With HSN/SAC code, unit of measure, tax, cost |
| Opening trial balance | Yes | As at the day before go-live |
| Unpaid sales invoices and purchase bills | Yes | One line per document, total amount due |
| Stock quantities and value | Yes | Counted, and tied to the inventory ledger |
| Bank balances and uncleared cheques | Yes | Per bank account |
| Closed vouchers from past years | No | Stays in Tally |
| Inactive parties and dead stock items | No | Clean them out before export |
TallyPrime can export masters and transactions through its Export menu, in formats that include Excel, XML and JSON, according to Tally's help pages. Excel is the easiest to clean before importing into Odoo's templates.
Mapping Tally ledgers to Odoo accounts
The main structural difference: in Tally, each customer and vendor is usually a ledger under Sundry Debtors or Sundry Creditors. In Odoo, customers and vendors are contacts, and they share a receivable or payable account. So party ledgers become contacts, not accounts. The amount each party owes comes across as open invoices and bills, not as a ledger balance.
For the rest, start from the Indian localisation's chart and map your Tally ledgers onto it. Odoo's documentation advises renaming and recoding a standard account when it matches one of yours, and creating new accounts only where nothing matches. Don't delete standard accounts or change their type, because default settings depend on them. Our chart of accounts guide covers this step.
Opening balances and open items: the order that ties out
Odoo's onboarding documentation describes a clean method that avoids counting receivables and payables twice. Open invoices and the trial balance both go through temporary clearing accounts (AR Clearing and AP Clearing), which net to zero once everything is in.
- Open invoices and bills. Import each unpaid invoice and bill using the receivable or payable clearing account as the line account. Odoo recommends importing each with only the total amount due, not individual lines, to avoid tax errors. Keep the original Tally invoice number as the reference.
- Check them. Open invoices minus open credit notes must equal the debtors balance in your Tally trial balance. Do the same for bills and creditors.
- Opening stock. Set product costs first, then import counted quantities through Inventory › Operations › Physical Inventory. The total value must equal the stock ledger in the trial balance.
- Opening trial balance. Import it as one journal entry in the Miscellaneous Operations journal, replacing debtors and creditors with AR Clearing and AP Clearing.
- Bank. Set each bank journal's starting balance to the balance before the first transaction in Odoo, and add uncleared cheques as open items.
- Close the clearing accounts. When AR Clearing and AP Clearing are both zero, change their type to Off-Balance Sheet so they drop out of reports.
Each check is a number your accountant can tie to Tally. If one doesn't tie, stop and fix it before go-live, not after.
When to cut over: the financial year start
The cleanest cut-over in India is 1 April. The Indian financial year runs April to March, so Tally keeps every voucher of the old year and Odoo holds every voucher of the new one. Annual reports, the GST annual return and the audit each read from one system.
The catch is that last year's books are not final on 1 April. Audit adjustments come in over the following months. Handle this the usual way: import a provisional opening trial balance, keep posting adjustments in Tally until the audit closes, then post one adjustment entry in Odoo for the difference between the provisional and final closing balances.
If 1 April is too soon, pick the first day of a month, and preferably the first day of a quarter. Avoid mid-month cut-overs. They split one GSTR-1 period across two systems and force you to combine two sets of data by hand. Also avoid go-live in the days around your return due dates, month-end closing, or payroll.
Keeping GST continuous through the switch
Your GSTIN and your filing obligations don't change when your software does. What needs care is the data that GST returns are built from.
- Invoice numbering. CGST Rule 46(b) requires a consecutive serial number of no more than 16 characters, unique for a financial year. Odoo's numbers must not repeat a number Tally already used that year. Starting on 1 April with a new series is the simplest answer. Mid-year, use a new prefix.
- Credit notes against Tally invoices. Returns raised after go-live must reference the original invoice. Importing open invoices with their Tally numbers makes that possible.
- Input tax credit. Credit on bills already reported in a return filed from Tally must not be claimed again. Importing open bills as totals, as Odoo recommends, keeps them out of Odoo's tax reports.
- E-invoicing and e-way bills. If e-invoicing applies to you (aggregate turnover above ₹5 crore since 1 August 2023, under Notification 10/2023–Central Tax; check the current threshold with your CA), configure and test Odoo's e-invoice connection before go-live, so the first invoice gets its IRN on day one.
- Contact and product data. GST results in Odoo depend on states, GST treatments, GSTINs and HSN codes. Our GST compliance guide shows how Odoo uses each one.
Run your first GSTR-1 from Odoo alongside your CA, and compare it with what you'd expect before filing.
Before you decide to move
Tally is a good accounting tool. Moving to Odoo makes sense when sales, purchase, inventory and accounting need to run on one set of data rather than be re-entered. If you are still weighing that, our Odoo vs TallyPrime vs Zoho Books comparison covers the trade-offs, and a realistic 90-day plan shows where migration fits in the project.
Questions we get asked
Can I import all my Tally data into Odoo?
You can, but you usually shouldn't. Migrating years of closed vouchers means mapping every old entry to new accounts, taxes and partners, and each error shows up in reports. The standard approach is to migrate masters, an opening trial balance, open invoices and bills, stock on hand and bank balances, and to keep the history in Tally, read-only, for audits and the legal retention period.
When is the best time to switch from Tally to Odoo?
The cleanest date is 1 April, the start of the Indian financial year, so each year's books, audit and GST annual return sit in one system. If that isn't possible, switch on the first day of a month or quarter. Avoid mid-month cut-overs, which split a GSTR-1 period across two systems, and avoid return due dates, month-end and payroll.
How do I bring opening balances from Tally into Odoo?
Odoo's documentation recommends importing open invoices and bills against temporary AR and AP clearing accounts, then importing the opening trial balance as one journal entry with debtors and creditors replaced by those clearing accounts. Opening stock is imported as a physical inventory count. When both clearing accounts reach zero, the balances tie out and the clearing accounts are moved off the balance sheet.
Do I need a new GST invoice series when moving to Odoo?
CGST Rule 46 requires invoice numbers that are consecutive, no longer than 16 characters, and unique within a financial year. If you switch on 1 April, a fresh series for the new year meets this naturally. If you switch mid-year, give Odoo's invoices a new prefix so they can't repeat a number Tally already issued in the same financial year.