Migrating to Odoo in Qatar does not mean re-keying years of transactions into a new system. A migration that holds together moves four things in a fixed order — cleaned master data, open balances as at the cut-over date, a read-only archive of the old ledger, and only the transaction detail you will actually query — and then proves the result against control totals before anyone posts into the live database. The projects that go wrong are rarely the ones that carried too little history; they are the ones where nobody agreed in advance what “migrated” would be measured against.
Most companies in Doha reach this decision from one of four starting points: a QuickBooks file that has outgrown the person who owns it, a Tally or Focus installation sitting on a desktop in the accounts office, a Zoho Books subscription that no longer covers inventory or project costing, or a spreadsheet set that only one employee fully understands. In every case the real question is not whether Odoo can import the data. It can. The question is what you need to be able to prove on the day your auditor, your bank or a new investor asks for a number that predates the new system.
History in an accounting system is not one thing. It is four layers that behave very differently during a migration, and treating them as a single block is the most common cause of a blown budget.
Separating these four layers is what allows a migration to be scoped honestly. You can buy certainty on the first two, economy on the third, and completeness on the fourth without pretending they cost the same.
There are three defensible answers to “how much history do we bring across”, and the right one depends on how old the business is, how many years your auditors compare, and whether the legacy system will stay readable after go-live.
| Approach | What moves into Odoo | Best suited to | What you accept |
|---|---|---|---|
| Opening balances only | Master data plus a single balanced opening journal entry per account, with open items loaded as individual documents | Newly formed entities, or businesses whose prior records sit with an external accountant in a system you will keep read-only | No transaction-level drill-down before the cut-over date; comparatives come from exported reports, not from Odoo |
| Hybrid (most common) | Master data, open items, the current and previous financial year in detail, earlier years as summary entries, plus an indexed archive of original documents | Trading SMEs and mid-market groups in Qatar with two to ten years of history and an annual audit | Older detail lives in the archive rather than in Odoo screens; summary entries must be documented clearly |
| Full transaction history | Every posted document since inception, with original numbering and dates preserved | Regulated entities, groups preparing for due diligence, or businesses with contractual look-back obligations | The longest timeline, the largest reconciliation effort, and the highest chance of importing the legacy system's bad habits along with its data |
In practice the hybrid approach is where most Qatari companies land, and it is usually the right call. It keeps the current year fully drillable for management reporting and the previous year available for comparatives, while prior periods are represented by a documented summary entry and an archive that can be searched by invoice number, date or counterparty. The condition is that your auditor accepts the archive as the record of those years — a conversation worth having in week one, not in the week before go-live.
Odoo has a small number of core objects, and almost every migration question reduces to which legacy field lands in which object. Getting this table agreed and signed before extraction begins is the single highest-leverage hour of the project.
| Legacy data | Odoo destination | The decision you must make |
|---|---|---|
| Customer & supplier accounts | Contacts (res.partner), with commercial registration and tax identifiers on the company record | How to merge Arabic and English spellings of the same entity, and which record survives the merge |
| Chart of accounts | Account records, mapped to Odoo's Qatar localisation where it fits | Whether to keep your existing account codes (recommended for audit continuity) or adopt the localisation's default tree |
| Items and services | Product templates and variants, with units of measure and price lists | Whether variants are real variants or disguised separate items; how units of measure convert |
| Open customer invoices | Posted customer invoices with their residual amounts | Whether to load the original invoice date or a migration date, and how to keep the original number visible |
| Open vendor bills | Posted vendor bills, including withholding tax flags where they applied | Which service payments carry withholding tax, so future bills are treated consistently |
| Stock on hand | Inventory quantities by location, with a valuation layer at the cut-over date | Whether the opening value comes from the ledger or from the stock report — they rarely agree, and the difference must be explained |
| Fixed asset register | Asset records with acquisition date, cost, accumulated depreciation and remaining life | Whether depreciation history is summarised or rebuilt month by month |
| Payroll history | Employee records, contracts and summarized payroll entries | How much salary detail must remain queryable versus archived as payslip PDFs |
| Retained earnings & equity | A single opening entry dated the day before go-live | Which period the opening entry belongs to, and who signs it off |
Extraction is where quiet corruption enters. The rules below are unglamorous and they are the difference between a trial balance that reconciles on the first attempt and one that takes three weeks to explain.
A migration template written for a European distributor will miss most of what matters here. The points below come up repeatedly on Doha projects.
The table below is a planning template for a single-company SME migration of moderate complexity. Multi-company groups, manufacturing with bills of materials, or businesses moving off a heavily customised legacy system should expect the middle phases to stretch.
| Stage | Typical timing | Exit criteria |
|---|---|---|
| Data profiling | Week 1 | Record counts, duplicate rates and orphan records known; archive format agreed |
| Mapping & design sign-off | Weeks 1–2 | Field mapping table and chart of accounts approved in writing |
| Configuration | Weeks 2–4 | Company, taxes, journals, users, approval rules and sequences configured in a test database |
| Trial migration one | Week 4 | Full load runs end to end; errors logged, not patched by hand |
| Trial migration two | Week 6 | Reconciliation pack balances within agreed tolerance; finance team reviews real records |
| User acceptance & training | Week 7 | Key users can complete a sale, a purchase and a month-end close unaided |
| Freeze and go-live | Week 8, weekend | Old system frozen, final delta loaded, opening balances signed by the finance lead |
| Hypercare & first close | Weeks 8–10 | First month-end completed in Odoo; reconciliation repeated against the legacy close |
A migration is finished when you can demonstrate equivalence, not when the import script stops throwing errors. Build a reconciliation pack and have it signed before the old system is switched off. At minimum it should contain:
That pack is also your defence later. When someone in month four asks why a customer balance looks different from what they remember, the answer is a signed reconciliation, not a rebuild.
The failure modes are predictable, and none of them are technical.
BNF Consulting is an Authorised Zoho Partner and an Official Odoo Partner based in West Bay, Doha, working with companies across Qatar on accounting, ERP and business consulting engagements. A migration engagement typically starts with a data profiling session on a copy of your live file — not a demo — so the scope you sign reflects the data you actually have. From there we produce the mapping document, run two trial loads in a separate database, hand your finance team a reconciliation pack to sign, and only then schedule the cut-over weekend. Where a business is outgrowing Zoho Books or the wider Zoho One stack and moving up to a full ERP, we handle that path as well, including the reverse decision to stay on Zoho where it genuinely fits.
You can see the modules we implement on our Odoo solutions page, the advisory work that usually surrounds a migration on our services page, and the office details on our contact page. If you would rather talk it through first, call +974 7703 0026 or email sales@bnf-consulting.com and we will tell you plainly whether your data is ready to move.
Bring us a copy of your current file. We will map it, price the load and show you what your opening trial balance will look like before you commit.
For a single-company SME with a clean chart of accounts, six to ten weeks from data profiling to go-live is a realistic range, including two trial loads and a month-end after cut-over. Multi-company groups, manufacturers with bills of materials, or businesses leaving a heavily customised legacy system should plan for three to four months. The variable is data quality and decision speed, not the software.
No, and most companies should not. The standard approach is to load master data, all open items, the current and previous financial year in detail, and represent earlier years with a documented summary entry plus a searchable archive of the original documents. Migrate full transaction history only where a regulator, a contract or an impending due diligence requires it.
Yes, and you should keep it read-only for the retention period that applies to your entity. Freeze it on the cut-over date so no further postings are made, export the data to a documented format alongside the application, and make sure someone other than the former system administrator knows how to open it. Running it as a live parallel ledger, however, is what creates two versions of the truth.
They should not. Odoo sequences can be configured to continue an existing series, and posted documents should retain their original number and document date, with the posting date recorded separately where it differs. Renumbering invoices breaks the audit trail and creates avoidable problems once structured e-invoicing reporting arrives in Qatar.
Odoo can be configured for Qatari salary structures, end-of-service provisions and multi-currency accounting, and it can produce payroll data for Wage Protection System submission, though the exact WPS file format must be confirmed with your bank before go-live. Historical payroll is usually migrated as employee records plus summarised postings, with the original payslips and SIF files kept in the archive.