Home Blog Odoo
Migration

Migrating to Odoo in Qatar Without Losing Your History

How to move balances, invoice numbering and audit trail from QuickBooks, Tally, Zoho Books or spreadsheets into Odoo โ€” with a cut-over you can prove.

BNF Consulting

BNF Consulting

Business Consulting ยท Zoho & Odoo Partner Qatar

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.

What “not losing your history” actually means

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.

  • Master data. Customers, suppliers, items, price lists, the chart of accounts, cost centres, payment terms and tax codes. Small in volume, enormous in consequence: a duplicate customer record imported once will haunt your receivables ageing for years.
  • Open items. Unpaid customer invoices, unpaid vendor bills, open purchase orders and sales orders, stock on hand with its valuation, the fixed asset register, prepayments and accruals. This is the layer that must be exact, because it becomes the opening trial balance.
  • Transactional history. The postings behind closed periods — last year's revenue, last quarter's cost of sales, the payroll runs already filed. Useful for trend analysis and comparatives, expensive to reproduce faithfully.
  • The document trail. The PDFs, the signed delivery notes, the customs declarations, the bank statements. This is what an auditor or a tax reviewer actually asks to see, and it does not need to live inside Odoo to be produced on demand.

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.

Choosing the migration depth

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.

The field mapping that decides the project

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

Getting clean data out of the old system

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.

  • Export at line level, never at report level. A printed trial balance cannot be re-imported. You need the underlying journal lines, invoice lines and stock moves, with their identifiers.
  • Keep the original document numbers. Invoice numbers, bill references and journal entry numbers are part of the audit trail and, in an e-invoicing environment, part of your compliance story. Odoo sequences can be configured to continue an existing series; they should never restart at one.
  • Separate document date from posting date. A bill dated in the previous quarter but entered this month must keep both facts. Collapsing them destroys period comparatives.
  • Preserve currency, not just amounts. The Qatari riyal is pegged at 3.64 to the US dollar, but supplier invoices in euros, equipment bought in yen and intercompany charges still generate exchange differences. Import the transaction currency and rate, not a converted figure.
  • De-duplicate before import, not after. Legacy exports commonly hold the same customer under three spellings, with and without a branch suffix. Merging them inside Odoo after posting is possible but leaves a trail of reassigned entries.
  • Test Arabic text early. Company names registered in Arabic, Arabic descriptions on invoices and right-to-left addresses must survive the export file's encoding intact. Check a sample of twenty records by eye before importing twenty thousand.

Qatar-specific issues that break migrations

A migration template written for a European distributor will miss most of what matters here. The points below come up repeatedly on Doha projects.

  • Wage Protection System history. Salary payments in Qatar run through the WPS, and the payroll records behind them must remain retrievable. Employee master data, contract dates and the summary payroll postings move into Odoo; the SIF files and payslips belong in the archive.
  • Multiple commercial registrations. Groups often trade under several CRs, sometimes with separate licences for the same activity. Decide whether that is one Odoo company with branches or several companies with intercompany rules — the answer changes the chart of accounts, the tax setup and the reporting structure.
  • Withholding tax on service payments. Where WHT has been deducted from service fees, the flag belongs on the vendor record and the tax configuration, not in a spreadsheet column. Otherwise the first quarter after go-live produces a filing that does not match the prior year.
  • Document retention. Whatever retention period applies to your entity, the archived system must remain readable for that whole period. A database backup nobody can open is not an archive; export to a documented, searchable format and keep the viewer with it.
  • Sequences and e-invoicing readiness. Qatar's e-invoicing framework is being established, and structured digital invoicing will assume clean, gap-free document numbering. Our guide to Qatar's e-invoicing plans covers what that means operationally; the migration is the moment to fix your numbering, not afterwards.
  • Time zones and cut-off. Odoo stores timestamps in UTC while Qatar runs on UTC+3. Agree what “end of day” means for the cut-over, so the last invoice of the old system and the first of the new one do not land in the same period twice.

A realistic cut-over plan

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

Proving that nothing was lost

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:

  • Receivables ageing by customer and by bucket, old system against Odoo, on the cut-over date.
  • Payables ageing on the same basis, with the withholding tax position stated separately.
  • Stock quantity and value by location and product category, with every difference explained in writing.
  • Trial balance at account level, plus the year-to-date profit and loss, both agreeing to the cent.
  • Document counts — invoices, bills and journal entries extracted versus loaded, with a reason for every record that was deliberately excluded.
  • Bank ledger balances matched to the last reconciled statement for each account.

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.

Where these projects actually fail

The failure modes are predictable, and none of them are technical.

  • Migrating before the master data is clean. Importing duplicates and then merging them inside Odoo leaves a reassigned history that is far harder to explain than a week of cleanup beforehand.
  • Running parallel ledgers with no end date. A short parallel period is prudent. Two systems kept alive indefinitely means two versions of the truth and a team that never commits to either.
  • Copying legacy customisations. A report or field that existed because of one former employee's habit should have to justify itself again. Migrations are the cheapest moment to delete a process.
  • No named owner on the client side. The partner can build and load, but only your finance team can say whether a balance is correct. Without a decision-maker with calendar time reserved, sign-offs slip and go-live drifts.
  • Testing with a truncated dataset. The first trial load should use the full volume, including the ugly records. A test on two hundred clean rows proves the mapping, not the migration.

How BNF Consulting runs a migration from West Bay

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.

Planning an Odoo migration in Qatar?

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.

Frequently Asked Questions

How long does an Odoo migration take in Qatar?

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.

Do we have to move every historical transaction into Odoo?

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.

Can we keep our old accounting system available after go-live?

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.

Will our invoice numbers and document dates change?

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.

Can Odoo handle Qatar payroll, WPS and multi-currency accounting?

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.