ERP Migration — Saudi Arabia

SAP to Odoo Migration in Saudi Arabia — A Step-by-Step Guide

Migrating from SAP to Odoo in Saudi Arabia involves more than a software swap — it requires a structured data migration, ZATCA Phase 2 re-certification, GOSI payroll reconfiguration, and a managed cut-over that keeps operations running. This guide covers every phase, common failure points, and what a realistic KSA migration project looks like.

iWesabe Editorial TeamJune 27, 202611 min read

A SAP-to-Odoo migration in Saudi Arabia is not a generic ERP migration. Three factors make it KSA-specific: ZATCA Phase 2 e-invoicing must be live from day one of the new system — there is no grace period once you switch; GOSI payroll contributions need to be recalculated in Odoo before the first payroll run to avoid errors in GOSI submissions; and SAP historical data must be archived in a ZATCA-compliant format before SAP is decommissioned (5-year minimum). Every phase of the project plan below accounts for these requirements. Skipping any of them creates a compliance gap that is expensive to fix after go-live.

What Migrates from SAP to Odoo — and What Stays

Data migration scope for a typical SAP-to-Odoo project in Saudi Arabia
Data categoryMigrates to Odoo?Migration methodNotes
Chart of accounts (SAP FI)YesExcel export → Odoo import wizardMap SAP G/L account numbers to Odoo account codes. Saudi chart of accounts in Odoo uses a different numbering convention — reconcile during discovery. Cost centres (SAP CO) become Odoo analytic accounts.
Customer and vendor master (SAP SD/MM)YesSAP data download → Python migration scriptBusiness partner data (name, address, VAT registration number, payment terms, bank details). SAP's Business Partner model maps to Odoo's res.partner. Validate VAT numbers against ZATCA format before import.
Product/material master (SAP MM)YesSAP material master export → Odoo product importProduct name, UoM, product category, SAP valuation class → Odoo product category + costing method. Standard price or AVCO per product. Serialised/lot-tracked materials require lot tracking flag in Odoo before stock opening balance is loaded.
Opening financial balancesYes — cut-over date balances onlyTrial balance export from SAP → journal entry in OdooLoad the trial balance as at cut-over date as a single opening journal entry in Odoo. Outstanding AR and AP balances loaded as open items per customer/vendor. Do not attempt to migrate historical journal entries — reconcile SAP balances, not SAP transactions.
Employee records (SAP HCM)YesSAP HCM export → Odoo HR importEmployee master (name, national ID/Iqama, job position, department, salary, GOSI registration number, bank account). Leave balances migrated as opening balance adjustments. Payroll historical data stays in SAP — only the current pay structure and open leave accruals move.
Inventory on-hand (SAP MM)YesSAP stock report → Odoo inventory adjustmentPhysical stock count reconciled with SAP before cut-over. Loaded into Odoo via inventory adjustment at standard cost per product. Lot/serial numbers for tracked items must be included in the opening stock load.
Historical SAP transactional data (FI journals, MM goods movements, SD order history)No — stays in SAPSAP remains accessible read-only for archiveDo not migrate. Too large, too complex, and most of the data is irrelevant after cut-over. SAP read-only access preserved for the 5-year ZATCA archive requirement. Queries against SAP history go to SAP; everything from cut-over date forward is in Odoo.

SAP-to-Odoo Migration Phases — Full Project Breakdown

Phase-by-phase breakdown of a SAP to Odoo migration project for a Saudi mid-market company (50–150 users)
PhaseDurationKey deliverablesKSA-specific actions
1 — SAP audit & Odoo scoping3–4 weeksSAP module inventory (which FI/CO/MM/SD/HCM modules are live). Master data quality audit (customer deduplication, material master completeness, employee data gaps). Odoo module scope agreed. Cut-over date locked.Identify which ZATCA waves the company is in. Confirm current SAP e-invoicing setup (SAP Localization Hub or manual). Extract GOSI employee data for validation. Confirm SAP HCM leave balances for migration.
2 — Odoo configuration5–8 weeksOdoo configured: chart of accounts, fiscal year, tax configuration, ZATCA Phase 2 integration, Saudi payroll rules (GOSI rates, gratuity formula), HR structure (departments, job positions). Customer/vendor/product master data loaded in staging environment.ZATCA Phase 2 CSID registration for the company completed in Odoo (onboarding to ZATCA production environment). GOSI contribution rates validated per employee nationality. Saudi Labour Law gratuity formula configured. Nitaqat job position mapping reviewed.
3 — Parallel run4–6 weeksBoth SAP and Odoo running simultaneously. Transactions entered in both systems. Finance team reconciles Odoo output against SAP output weekly. ZATCA test invoices submitted through Odoo CSID integration — B2B clearance and B2C reporting verified. First payroll run in Odoo reconciled against SAP payroll.ZATCA: run a full month of invoices through Odoo's ZATCA integration in parallel with SAP before cut-over. Verify every invoice clears (B2B) or reports (B2C) correctly. GOSI: run a full payroll cycle in Odoo and compare the GOSI contribution report line-by-line against the SAP payroll report.
4 — UAT & sign-off2–3 weeksAll user groups complete acceptance testing: Finance (AP/AR/GL/Tax), Operations (PO/goods receipt/invoicing), HR (payroll run/GOSI/leave), Sales (order-to-cash). Defect log resolved. Sign-off per module from department heads.Specific UAT test cases: issue a ZATCA-compliant B2B invoice in Odoo and verify clearance XML is received and stored; process a month-end GOSI report and verify it matches expected contribution amounts; generate a Zakat schedule from Odoo CoA; confirm Mudad SIF file generates correctly for WPS submission.
5 — Cut-over1 week (weekend preferred)Final data loads: closing trial balance from SAP, final inventory count, open AR/AP items. SAP switched to read-only. Odoo is live as system of record. First business day on Odoo — all transactions in Odoo only.ZATCA: confirm CSID production credentials are active in Odoo from day one (no invoicing gap). GOSI: confirm the first payroll run date in Odoo is aligned with the GOSI submission calendar. SAP archiving: take a full database backup of SAP before read-only switch — this is the ZATCA-compliant archive for invoices issued in SAP.
6 — Hypercare4 weeks post go-liveiWesabe consultants available daily for first two weeks. Issue log tracked and resolved within SLA. Monthly close in Odoo supervised (first close is always the hardest). GOSI submission from Odoo verified for first full month.Monitor ZATCA rejection queue daily in first week — any XML errors must be investigated and corrected before the daily 24-hour B2C submission window closes. Run the first full VAT return from Odoo and reconcile it against the last SAP VAT return period.

Where SAP-to-Odoo Migrations Fail — and How to Avoid Each

The most common failure points in SAP-to-Odoo migrations and the mitigation for each
Failure pointWhat goes wrongMitigation
Dirty SAP master data discovered too lateCustomer and vendor master data in SAP has thousands of duplicates, incorrect VAT numbers, and missing payment terms. Discovered in week 8 of a 12-week project. Migration scripts fail. Timeline slips.Run the data quality audit in week 1 as the first deliverable — before a single screen in Odoo is configured. The audit determines the real migration timeline, not the functional scoping.
ZATCA CSID registration delayedZATCA onboarding (device registration + CSID certificate issuance) takes 3–7 business days. Teams that start ZATCA registration in the final week before cut-over face go-live delays or a period of non-compliant invoicing.Start ZATCA CSID registration in Odoo's production environment during Phase 2 (configuration phase), not Phase 4 (UAT). Complete CSID registration at least 3 weeks before go-live date.
GOSI contribution errors on first payrollGOSI rates in Odoo are configured incorrectly (wrong nationality categorisation, wrong salary components included in GOSI base). The first GOSI submission from Odoo has errors. GOSI rejects the report. Finance scrambles to reconcile.Run a full parallel payroll cycle in both SAP and Odoo before cut-over. Compare GOSI contribution line-by-line for every employee. Sign off only when both systems produce identical GOSI contribution reports.
Opening balance mismatchThe Odoo trial balance at go-live does not match the SAP closing trial balance. AR and AP sub-ledgers are out of balance. The first Odoo month-end close fails because the balance sheet does not balance.Perform a formal trial balance reconciliation between SAP and Odoo at least two weeks before cut-over date. Every G/L account must reconcile to zero difference. Do not proceed to cut-over with unresolved reconciling items.
SAP custom Z-reports have no Odoo equivalentFinance relies on 12 SAP Z-reports that took years to build in ABAP. Odoo's standard reports cover 8 of them. The other 4 are needed on day one. Business users reject the go-live because their reports do not exist.Map every Z-report against Odoo's standard reports in Phase 1. For each gap, decide during scoping: build a custom Odoo report (add to project scope), accept an Odoo standard equivalent, or defer. Never surprise users with missing reports in UAT.
200+
Odoo implementations completed — including SAP ECC, SAP Business One, and Oracle migration projects
14+
Years delivering ERP implementations in Saudi Arabia, Bahrain, and UAE
14–22
Weeks typical SAP-to-Odoo migration timeline for a 50–150 user Saudi company
3
Odoo awards: Best Partner MENA 2023, Highest Revenue KSA 2022/2023, Top Revenue Achiever KSA 2023/2024

The companies that have the smoothest SAP-to-Odoo migrations are the ones that treat the data audit as a first-class deliverable, not a formality. In every project where the migration went over time, the root cause was a data problem that was discovered too late — duplicate customers, wrong GOSI registration numbers, SAP Z-reports with no agreed equivalent in Odoo. Fix the data before you configure anything. The system configuration is the fast part.

Bobby Joseph, CEO, iWesabe Technologies

Planning a SAP to Odoo Migration in Saudi Arabia?

iWesabe has migrated Saudi companies from SAP ECC and SAP Business One to Odoo — with ZATCA Phase 2 live from day one. We start every migration project with a SAP data audit so you know the real timeline and scope before signing anything.

WhatsApp

Frequently Asked Questions

How long does a SAP to Odoo migration take in Saudi Arabia?
For a Saudi mid-market company (50–150 users) migrating from SAP ECC or SAP Business One, the typical timeline is 14–22 weeks from kick-off to go-live. This includes: SAP data audit (3–4 weeks), Odoo configuration (5–8 weeks), parallel run (4–6 weeks), UAT (2–3 weeks), and cut-over (1 week). Companies with clean SAP master data and a dedicated project team on the client side reach the shorter end of the range. Companies with heavily customised SAP environments, multiple legal entities, or complex manufacturing setups run closer to 22 weeks. The parallel run phase is non-negotiable for ZATCA compliance — both systems must produce identical ZATCA reports before cut-over is approved.
What happens to ZATCA e-invoices issued in SAP after the migration?
ZATCA e-invoices issued in SAP remain in SAP — they are not migrated to Odoo. ZATCA requires a 5-year minimum archive of all e-invoices from the invoice date. After migration, SAP is kept accessible in read-only mode specifically to preserve this archive. Two options exist for long-term archiving: keep SAP in a maintenance-minimal state for the 5-year ZATCA period (low ongoing cost if SAP is cloud-hosted), or export all SAP e-invoice XML files to a ZATCA-compliant external archive before decommissioning SAP. iWesabe recommends deciding on the archive approach before migration begins — attempting to migrate ZATCA XML from SAP to Odoo after go-live is complex and error-prone.
Can Odoo replicate the GOSI payroll calculations from SAP HCM?
Yes. Odoo's Saudi payroll localisation calculates GOSI contributions using the same rules as SAP HCM Saudi Arabia: 10% employer + 10% employee contribution for Saudi nationals on the full salary (within GOSI contribution ceiling), and 2% employer-only occupational hazard contribution for expat employees. The key configuration items in Odoo are: correctly flagging each employee's nationality (Saudi vs. non-Saudi), mapping salary components to the GOSI-applicable salary base (basic salary + housing allowance in most Saudi contracts), and setting the GOSI contribution ceiling. Before cut-over, run a full parallel payroll cycle and compare the Odoo GOSI report against the SAP GOSI report line-by-line for every employee. Sign off only when both reports match exactly.
Does SAP data need to be cleaned before migrating to Odoo?
Almost always, yes. SAP master data in production systems accumulates quality issues over years of use: duplicate customer and vendor records (the same company entered multiple times with slightly different names), inactive materials with no stock that will never be used in Odoo, employee records that are outdated or have missing GOSI registration numbers, G/L accounts that were created for one-time purposes and are now dormant. The data audit in Phase 1 identifies and quantifies these issues before a single Odoo screen is configured. Companies that skip the data audit and migrate all of their SAP data as-is typically spend the first 3–6 months in Odoo cleaning data that should have been cleaned before migration — at a much higher cost and with the added complexity of live production data.
What SAP modules are covered in a typical migration to Odoo?
The most common SAP module set migrated to Odoo for Saudi mid-market companies is: SAP FI (Financial Accounting) → Odoo Accounting; SAP CO (Controlling / cost centres) → Odoo Analytic Accounting; SAP MM (Materials Management) → Odoo Inventory + Purchase; SAP SD (Sales & Distribution) → Odoo Sales + CRM; SAP HCM (Human Capital Management) → Odoo HR + Payroll. Less commonly: SAP PP (Production Planning) → Odoo Manufacturing; SAP PM (Plant Maintenance) → Odoo Maintenance; SAP WM/EWM (Warehouse Management) → Odoo Inventory with multi-step operations. SAP BI/BW reporting is replaced by Odoo's built-in reporting plus custom Odoo Studio dashboards or third-party BI connectors (Power BI, Metabase) if advanced analytics are required.
Is it possible to migrate from SAP Business One (SAP B1) to Odoo in Saudi Arabia?
Yes — SAP Business One migrations to Odoo are common in Saudi Arabia and are typically simpler than SAP ECC migrations. SAP B1 is used primarily by SMEs (20–100 users) and has a smaller data footprint: a more manageable chart of accounts, fewer custom objects than ECC, and simpler integration landscape. The same migration phases apply (SAP audit, Odoo config, parallel run, cut-over) but the SAP B1 data export tools are straightforward — B1 does not use ABAP, so there is no custom code remediation required. ZATCA and GOSI requirements are identical to an ECC migration. Typical SAP B1 to Odoo timeline for a Saudi company: 10–14 weeks.
iWesabe Editorial Team

iWesabe Editorial Team

Practitioner insights on Odoo ERP, ZATCA compliance, and Saudi enterprise digital operations — written by iWesabe's consulting, finance, and engineering teams.

About iWesabe

Related Articles