A practical guide to preserving accounting records, planning the transition and deciding whether a move is justified.
A customer pays an invoice after your new ERP goes live. The invoice was issued in Xero, part of it was paid before the migration, and the supporting documents are still attached to the original transaction.
Can your finance team identify the correct outstanding balance, match the payment and retrieve the original invoice?
That is a more useful migration test than whether a spreadsheet imports successfully.
Moving from Xero to Odoo involves decisions about operational continuity, accounting treatment and record retention. It should not be treated as an exercise in copying every available field from one application into another.
For Singapore SMEs, one important distinction comes directly from IRAS: changing accounting software does not require you to migrate every historical transaction into the new software. However, the relevant records and supporting documents must remain retained and retrievable.
This guide explains what to assess before switching, which information may belong in Odoo, what should remain accessible in an archive and what finance should reconcile before approving the transition.
This is project-planning guidance, not a substitute for accounting or tax advice. Your finance owner or accountant should approve the migration method, opening balances and reporting treatment. Technical details depend on the selected Odoo version, applications and implementation scope.
Should your business move from Xero to Odoo?
Not necessarily.
Xero provides accounting, invoicing, reporting, bank reconciliation and inventory capabilities, with additional functionality available through connected applications. A business whose requirements are met by that arrangement may have little reason to replace it. Xero
The case for Odoo should start with a specific operational requirement—for example, connecting purchasing, warehouse activity, service delivery or manufacturing with finance.
It should not begin with the assumption that business growth automatically makes Xero unsuitable.
Compare three possible approaches:
| Approach | When to assess it | Main question |
|---|---|---|
| Keep and improve the current Xero setup | The main problems concern configuration, reporting, training or unclear responsibilities | Can the issue be resolved without changing platforms? |
| Retain Xero and connect operational applications | Accounting works well, but another function needs specialist capabilities | Can the integration be maintained without creating duplicate or inconsistent records? |
| Move accounting and relevant operations to Odoo | The business needs more tightly connected workflows and is prepared for implementation and change management | Does the operational benefit justify migration, training and ongoing ownership costs? |
This is a decision framework, not a ranking of the two products.
Xero itself explains where its built-in tracked inventory may not fit requirements such as manufacturing or purchase-order receipting—and points users towards alternative inventory applications. Those limitations relate to the specified inventory functionality, not every possible Xero-based solution.
Ask both providers to demonstrate your actual workflow, including exceptions, before deciding.
Decide how much history you need in the new system
There are three broad migration designs to discuss with your accountant and implementation team.
Opening balances and outstanding items
Start Odoo from an agreed date with the records needed for ongoing operations: customers, suppliers, products, appropriate opening balances and outstanding transactions.
Retain earlier accounting history separately in a retrievable form.
This limits the amount of historical transaction reconstruction, but means users may need to consult the archive for earlier detail.
Selected transaction history
Move a defined period or set of records because the business needs them for reporting, customer service or other operational purposes.
Specify the purpose. Monthly comparative reporting may require a different approach from preserving transaction-by-transaction drill-down.
Detailed historical conversion
Reconstruct a more extensive history, including relevant payments, allocations and related records.
This should have a clear business justification and documented acceptance criteria. Do not assume that an exported transaction will retain every relationship, attachment, workflow state or historical change record after import.
Historical access and historical recreation are different requirements. Decide which you need before requesting a quotation.
What can you export from Xero?
Xero states that exporting an organisation’s information requires exports from individual areas and reports—not one universal export containing everything. Its recommended records include the chart of accounts, contacts, invoices, bills, fixed assets and financial reports.
Build an export register showing the source, date range, export date, record count, totals and person responsible.
Include financial statements, the trial balance, transaction listings, receivable and payable detail, filed GST-period records, inventory information and bank reconciliation evidence appropriate to your scope.
Check export limits and exclusions
Xero’s invoice-and-bill export documentation currently specifies a maximum of 500 transactions per export, requiring batches for larger selections. Each transaction’s line items appear on separate CSV rows. It also states that repeating invoice and bill templates cannot be exported through that process.
Therefore:
A file with 500 rows does not necessarily contain 500 invoices.
Reconcile transaction counts and values across the export batches. Keep the batch boundaries documented so omissions and overlaps can be detected.
Also obtain data from connected applications where relevant. The accounting record may not contain the complete operational history held in a warehouse, payroll, project or service application.
What should you migrate, retain or rebuild?
Use this as a scoping worksheet rather than a universal migration prescription.
| Information | Proposed treatment to assess | Important check |
|---|---|---|
| Customer and supplier records | Import cleaned records needed for operations; retain historical references | Legal entity, contact relationships, payment terms and duplicate identities |
| Outstanding invoices, bills and credits | Transfer the unresolved financial position using an accountant-approved method | Original reference, due date, currency, remaining balance and allocation status |
| Products and stock | Import relevant product data and agreed opening inventory | Product codes, units, locations, quantities, ownership and valuation |
| Fixed assets | Establish continuing asset records and depreciation schedules where required | Cost, accumulated depreciation, disposals and remaining depreciation |
| Open operational commitments | Recreate or migrate unfulfilled orders, active projects and service obligations | What has already been delivered, billed, paid or completed |
| Historical transactions and documents | Retain a retrievable archive; migrate selected history where justified | Completeness, searchability and connection to supporting evidence |
| Rules, templates and permissions | Reconfigure and test in the target system | Approval logic, recurring schedules, user access and external connections |
Several areas need particular attention.
Outstanding invoices: move what remains due, not just the original amount
Consider this simplified example, with no credit notes, currency differences or tax adjustments:
| Item | Amount |
|---|---|
| Original customer invoice | S$6,000 |
| Payment received before migration | S$2,000 |
| Outstanding at the cut-off | S$4,000 |
After migration, the customer should still owe S$4,000.
Importing S$6,000 as completely unpaid would be wrong. Recording S$4,000 through an opening balance and adding another S$4,000 without an offsetting migration treatment would also be wrong.
Odoo’s accounting-transition guidance explicitly warns about double-counting receivables and payables when open documents and the opening trial balance are imported. It describes using clearing accounts to coordinate the entries. Odoo
Agree whether the migration will represent the remaining amount or reconstruct the relevant document and payment history. Preserve the original reference, due date and supporting document.
The method must not create a new sale or duplicate previously recognised tax merely to represent an existing debt.
Fixed assets: do not restart depreciation
Xero’s fixed-asset export includes disposed assets and values current at the export date, including book value, accumulated depreciation and the last depreciation date. An export made later is not automatically a cut-off-date schedule. Xero Central
Have finance approve the opening asset position and remaining depreciation schedule.
Test that the new system does not depreciate an asset’s original cost again as though it had just been purchased. Keep relevant disposal and tax-support schedules accessible even if those assets are not active in Odoo.
Reporting dimensions: preserve meaning, not just labels
Xero uses tracking categories for analysis such as departments or locations. Odoo uses analytic accounts and plans for analysing costs and revenue. These structures require deliberate mapping rather than an assumption that one field transfers directly into another. Xero Central
Choose a management report your team relies on and reproduce its intended logic during testing.
An overall profit figure can match while departmental allocation is wrong.
What should remain in a records archive?
An archive should allow someone to answer a real question—not merely confirm that a folder exists.
For example:
“Can we retrieve the invoice, supporting purchase documentation and payment evidence for this transaction from three years ago?”
Keep supporting documents separately from transaction exports
Xero provides separate functions for viewing and downloading transaction attachments and documents. Treat attachment retrieval as its own workstream; do not assume the invoice CSV contains the supporting files.
Agree a naming and indexing method linking documents to the entity, transaction reference and date. Test that files open and can be located without relying on one employee’s memory.
Preserve relevant history and notes
Xero’s History and Notes report can be exported and records changes to specified financial records. However, it has exclusions, including payroll transactions and expense claims. Do not describe it as a complete audit trail of everything in the organization. Xero Central
Retain appropriate historical change records as source evidence. A newly created Odoo record should not be presented as carrying the original Xero system’s complete audit history unless that has genuinely been preserved and verified.
Apply Singapore’s retention requirements correctly
For companies, IRAS requires relevant records to be retained for at least five years from the relevant Year of Assessment. For GST records, its guidance refers to at least five years from the end of the accounting period.
These are not simply five years from the date you change software. Check whether other requirements or unresolved matters require longer retention.
Assign responsibility for access, backups and retrieval. Have your accountant confirm that the retained records and their format meet your obligations before discontinuing access to the old environment.
What must be reconciled before go-live?
A balanced trial balance is necessary, but it is not enough. Equal debits and credits do not prove that customers, accounts or tax classifications are correct.
Ask finance to approve a reconciliation pack at the same cut-off date and using consistent reporting settings.
| Area | Recommended acceptance check |
|---|---|
| General ledger | Every source account maps to the intended target account; balances agree after documented mapping adjustments |
| Receivables and payables | Customer and supplier detail agrees with the relevant ledger balances; credits, partial payments and allocations are accounted for |
| Bank and payment accounts | Ledger balances reconcile to external statements through documented outstanding items |
| Inventory | Quantities, locations, valuation and inventory accounts reconcile, with differences investigated |
| Fixed assets | Asset cost, accumulated depreciation and carrying values reconcile to the approved register |
| GST | Historical and current-period figures can be explained without omissions or duplicate tax postings |
| Foreign currency and management reporting | Currency amounts, carrying values and relevant reporting dimensions remain consistent |
Treat this as a proposed sign-off framework, adapted by your accountant—not a substitute for their review.
Check bank balances against the bank
Xero’s bank reconciliation reports distinguish the balance recorded in Xero, calculated statement balances, outstanding payments or receipts and unreconciled statement lines. These distinctions matter at migration.
Do not force a match by deleting unexplained differences.
For the new bank connection, verify support for the actual institution and account type. Odoo’s bank synchronisation relies on supported providers and requires an eligible Enterprise subscription; an existing Xero connection does not establish that the same account will connect identically in Odoo.
Agree the first date of new bank imports so that historical transactions are not duplicated or omitted.
Check foreign currency in both currencies
For an outstanding USD invoice in a business reporting in SGD, preserve the original currency balance and the approved base-currency carrying value.
Odoo supports foreign-currency transactions and exchange-difference entries. Test a post-migration receipt or payment and have finance validate the resulting exchange treatment. Odoo
Do not assume that converting everything at the rate on migration day reproduces the old accounting position.
Check GST mapping beyond the percentage
Odoo’s tax reporting uses configured tax grids as well as tax rates. Matching a percentage alone does not establish that a transaction appears in the correct report category. Odoo
Have finance map the relevant sales and purchase treatments, test representative transactions and confirm how historical balances are represented without reposting previously reported activity.
For a mid-year migration, agree how year-to-date and comparative reporting will be produced. A correct opening balance does not automatically provide monthly drill-down for periods that were not imported.
Choose the cut-off around reporting and operational readiness
A financial-year end can simplify the boundary between systems, but it is not automatically the right choice during a peak operational period.
A month-end or GST-period boundary may be more practical. Odoo’s transition guidance notes that splitting a tax period between systems complicates tax filing because the data must be combined. Odoo
Document which system owns transactions before and after the cut-off. Also establish how late supplier bills, backdated corrections and customer payments for old invoices will be handled.
A useful cutover plan includes a trial migration, agreed final extracts, controlled access, documented changes after extraction and a fallback arrangement.
Avoid leaving two live accounting systems independently issuing the same invoices or feeding competing reports.
Test business scenarios, not just import files
Odoo’s import documentation warns that imports are permanent and explains the use of External IDs for record matching and updates. Test in a non-production environment and maintain a source-to-target identifier map.
Before release, ask users to demonstrate scenarios such as:
- Receiving payment against a partly paid pre-migration invoice.
- Applying an outstanding customer or supplier credit.
- Completing an order that was partly delivered before the cut-off.
- Processing the first depreciation run and relevant tax report.
Control email, payment, banking and e-invoicing connections during testing. Confirm that a repeat import will not silently create duplicate records.
A successful file upload proves that the system accepted the data. It does not prove the accounting or workflow is correct.
InvoiceNow is not, by itself, a reason to leave Xero
Xero offers InvoiceNow capabilities for Singapore businesses. It would therefore be misleading to suggest that a company must move to Odoo simply to access e-invoicing. Xero
For businesses subject to the GST InvoiceNow Requirement, IRAS specifies using InvoiceNow-Ready Solutions to transmit invoice data. The required solution, onboarding and transmission arrangements should be confirmed for the actual implementation.
During migration, coordinate the receiving route, relevant registrations, start date and treatment of previously transmitted records with the providers.
Test that imported historical documents do not unintentionally trigger customer emails or duplicate live submissions.
Moving invoice data and switching an e-invoicing service are related but separate tasks.
Do not cancel Xero until records and access have been checked
Xero’s cancellation guidance states that paid subscriptions have a one-month notice period, during which users retain access. After that period, the organisation’s data is archived; temporary access requires reactivation under the stated arrangements. Cancelling Xero does not automatically cancel connected-app subscriptions.
Do not budget on the assumption of free, permanent read-only access.
Before cancellation, verify the archive, complete agreed reconciliations, test live workflows and review the first reporting cycle. Keep an appropriate contingency for unresolved issues and adviser access.
What should a Xero-to-Odoo migration proposal specify?
Ask for a scope that identifies:
Included records and periods: Which master data, balances, open items, history and attachments will be handled?
Accounting responsibility: Who prepares, reviews and signs off the balances, tax mappings and reconciliation differences?
Technical method: Which exports, imports, scripts or connectors will be used, and what are their limitations?
Deliverables: Mapping documentation, trial results, the reconciliation pack, archive index, cutover plan and post-launch support.
Compare the full transition cost: data preparation, archive work, integrations, testing, training, temporary subscription overlap and ongoing support.
A transaction count alone is not enough to price the work. One thousand straightforward invoices and one thousand invoices involving multiple currencies, partial payments and corrections are different scopes.
How Neu Media Technology can help
Neu Media Technology provides Odoo implementation, data migration, integration, training and ongoing support. Its published implementation approach includes data validation and testing before deployment.
For a business considering migration, the starting discussion should identify the operational reason for changing, the records required in Odoo and the evidence finance needs before sign-off.
Bring your finance owner or accountant into that discussion early. The implementation team can assess technical delivery; accounting and tax decisions require the appropriate financial review.
Considering a move from Xero to Odoo?
Start with your workflow requirements, a data inventory and a clear definition of what must reconcile.
Discuss Your Accounting Migration Scope with Neu Media Technology
Frequently asked questions
Do I have to migrate all historical Xero transactions?
No. IRAS says changing accounting software does not require importing all old transactions into the new software. However, the relevant records and supporting documents must remain retained and retrievable. Decide separately what history users need inside Odoo. Default
Can a Xero export be imported directly into Odoo?
It should not be assumed. Source fields, account mappings, relationships and transaction states need assessment. Odoo provides import functionality, but a successful technical import is not evidence that financial balances or workflows are correct. Odoo
Can we keep Xero for accounting and use Odoo for operations?
That is an architecture option to assess, not a plug-and-play guarantee. Specify which system owns customers, invoices, stock and payments, how data moves, and who resolves errors. Compare its ongoing integration cost with a fuller migration.
What happens to repeating invoices and bill templates?
Xero’s standard invoice-and-bill CSV export does not export repeating templates. Document the schedules, pricing, next issue dates and approvals so the required workflows can be rebuilt and checked in the target system. Xero Central
How long does a Xero-to-Odoo migration take?
Set the timeline after assessing data quality, history, outstanding items, integrations and finance availability. Ask for discovery, trial migration, reconciliation, training and cutover milestones rather than accepting a universal duration.
Is Odoo automatically a better accounting choice?
No. The decision depends on your requirements, existing applications, accountant’s working practices and the cost of change. An ERP migration should solve a defined business problem—not merely replace software that is working.
Conclusion: migrate for a reason, reconcile before relying on it
A successful migration allows the business to continue working, finance to explain its balances and authorized users to retrieve the records they need.
That may mean moving selected operational data, preserving older history in an archive and rebuilding a few essential workflows.
It may also mean deciding that staying with Xero—or improving the current setup—is the more proportionate choice. Contact us for a deeper analysis of your needs.
Move what the business needs. Retain what it must be able to prove. Reconcile before relying on the new numbers.