Yes. Odoo can run the full accounting for a Saudi business. Its Saudi Arabia localization loads a local chart of accounts, 15% VAT and zero-rated, exempt and withholding taxes, and a VAT return report. A separate module connects invoices to ZATCA for Phase 2 e-invoicing. The Enterprise edition adds the full Accounting app: bank reconciliation, fixed assets, budgets and financial reports.
Summary answer: Odoo is a full accounting system that fits Saudi VAT and ZATCA rules once the Saudi Arabia localization is installed and set up correctly. The Saudi Arabia – Accounting module (l10n_sa) loads the chart of accounts, 15% standard VAT, zero-rated and exempt taxes, fiscal positions, withholding taxes and the VAT and Withholding Return. The Saudi Arabia – E-invoicing module (l10n_sa_edi) connects each sales journal to ZATCA’s Fatoora platform, clears standard tax invoices (B2B), reports simplified tax invoices (B2C), and produces UBL 2.1 XML, a PDF/A-3 file and a QR code. Invoices can be bilingual Arabic and English. Odoo Enterprise adds bank reconciliation, bank feeds, fixed assets, budgets, analytic reports and multi-company consolidation. Odoo does not calculate Zakat for you, but it keeps the books and year-end statements your Zakat adviser works from. Most of the work in a project is setup, testing on the ZATCA simulation portal, and moving your data in.
What the Saudi localization gives you on day one
When you create a company with Saudi Arabia as its country, Odoo installs the Saudi Arabia – Accounting package (technical name l10n_sa). According to Odoo’s Saudi Arabia fiscal localization documentation, it covers the chart of accounts, taxes, fiscal positions, withholding taxes, tax reporting and the base for ZATCA e-invoicing.
Other Saudi modules add more features:
- Saudi Arabia – Accounting Reports (l10n_sa_reports): Saudi-specific accounting reports.
- Saudi Arabia – E-invoicing (l10n_sa_edi): the ZATCA Phase 2 API integration.
- Saudi Arabia – Point of Sale (l10n_sa_pos) and Saudi Arabia – E-invoicing (Simplified) (l10n_sa_edi_pos): compliance fields and ZATCA reporting for POS receipts.
- Saudi Arabia – Withholding Tax (l10n_sa_withholding_tax): withholding tax on payments.
The chart of accounts is a starting point, not a final design. Most companies add accounts for their own cost centers, revenue lines and bank accounts. It is far cheaper to do this before go-live than to restructure later.
Taxes loaded for Saudi VAT
The localization creates the tax records you need for the main Saudi VAT treatments:
- Standard rate (15%) on most sales of goods and services, with input VAT generally recoverable on purchases.
- Zero-rated (0%) for supplies such as exports, international transport and qualifying medicines. Input VAT stays recoverable. ZATCA requires an exemption reason code on customer invoices that use a 0% tax, and Odoo has a field for it.
- Exempt supplies, such as certain financial services and bare residential rent. No VAT is charged and the related input VAT is not recoverable.
- Import VAT on goods from outside the GCC, paid at customs.
- Reverse charge on services bought from a non-resident supplier. Odoo records both output and input VAT, which usually nets to zero when the input tax is fully deductible.
Fiscal positions switch taxes and accounts automatically based on the customer or supplier. For example, they can apply the right treatment to a foreign customer without anyone picking the tax by hand. One ZATCA rule worth knowing: if you give a global discount on an invoice, the discount line must carry the 15% tax.
Withholding tax on payments to non-residents
Payments to non-resident suppliers can be subject to Saudi withholding tax. Odoo preloads the common rates (5%, 15% and 20%) for categories such as rent, technical services, royalties and management fees. It supports both gross withholding and deducted withholding. Your tax adviser should confirm which rate applies to each supplier contract.
VAT return report and filing
Odoo’s VAT and Withholding Return report breaks your transactions down into taxable, zero-rated, exempt and withholding amounts for the period. You can compare periods and export to Excel or PDF. Each figure drills down to the journal items behind it, which makes review much faster than rebuilding the return in a spreadsheet.
Odoo prepares the figures. You still submit the return on the ZATCA portal. ZATCA’s filing notices state that businesses with annual taxable supplies above SAR 40 million file monthly, and those at or below that level file quarterly. Before each filing, lock the period in Odoo so nobody can post back-dated entries after you have submitted.
ZATCA e-invoicing in Odoo: Phase 1 and Phase 2
ZATCA’s e-invoicing program (Fatoora) has two phases. Our step-by-step ZATCA e-invoicing guide for Odoo covers them in more depth. The short version:
- Phase 1, Generation (in force since 4 December 2021): invoices, credit notes and debit notes must be issued from a compliant electronic system with the required fields. Simplified tax invoices must carry a QR code. Odoo’s base Saudi module provides the Phase 1 QR code.
- Phase 2, Integration (from 1 January 2023, rolled out in waves): your system connects to ZATCA, and invoices must follow ZATCA’s XML format and security rules.
How the Phase 2 waves work
ZATCA brings taxpayers into Phase 2 in waves, based on VAT-subject revenue in named reference years. Each new wave has a lower revenue threshold than the one before. ZATCA notifies the targeted taxpayers directly and gives at least six months’ notice before their integration date. Do not guess your date. Check the announcements on the ZATCA website and the notification sent to your registered email and mobile number. If you have been notified, start setup at least three months before your deadline so there is time to test.
Standard vs simplified tax invoices
| Point | Standard tax invoice | Simplified tax invoice |
|---|---|---|
| Typical use | B2B sales | B2C sales, including POS receipts |
| ZATCA process in Phase 2 | Clearance: ZATCA validates the invoice before you share it | Reporting: the invoice is reported to ZATCA after issue |
| How Odoo decides | Business customer with full company details | Individual or walk-in customer |
| QR code | Included on the invoice | Required; scannable with the ZATCA app |
| Files produced | UBL 2.1 XML stored on the invoice, plus a PDF/A-3 with the XML embedded | |
Odoo shows ZATCA’s response on each invoice. Accepted invoices are marked green, accepted with warnings yellow, and rejected red. You fix a rejected invoice and press Retry. The XML and PDF stay attached to the invoice and cannot be deleted.
Onboarding: sandbox, simulation, production
Each sales journal is onboarded separately with a one-time password (OTP) from the Fatoora portal. OTPs expire after 60 minutes. Odoo offers three API modes: a shared sandbox for early tests, simulation (pre-production) for testing with your real company data, and production. The switch to production cannot be reversed, so complete testing on the simulation portal first. Company and customer records need exact data: the company name (63 characters at most), full address with district, building number and plot identification, an identification scheme such as the Commercial Registration Number, the VAT number and SAR as currency. Wrong data here is the most common reason for rejected invoices.
Credit notes, debit notes, branches and POS
- Credit and debit notes: select an approved ZATCA reason. If a note does not relate to a specific invoice in Odoo, enter the original invoice number in the customer reference field.
- Branches: use the parent company’s VAT number with the branch’s own Commercial Registration Number. Branches can share one sales journal or each have their own.
- Retention and down payments: Odoo has a documented method for contract retention and advance payments, so retention does not reduce the taxable amount reported to ZATCA.
- Point of Sale: with the simplified e-invoicing module, receipts are reported to ZATCA and show the Phase 2 QR code. See our guide to POS systems in Saudi Arabia.
For a real example, read how we delivered ZATCA integration for a Saudi industrial steel company.
Bilingual invoices and multi-currency with SAR
ZATCA requires tax invoices, simplified tax invoices and their credit and debit notes to be in Arabic. English can appear alongside. In Odoo you can set the invoice language per customer, or turn on the Gulf Cooperation Council Format option to print Arabic and English side by side for the whole company.
Your company currency is SAR, and you can invoice, buy and hold bank accounts in USD, EUR, AED or any other currency. Odoo can update exchange rates on a schedule. It posts realized exchange gains and losses to dedicated accounts automatically when a foreign-currency invoice is paid at a different rate.
Bank reconciliation, assets, budgets and consolidation
These features are part of the full Accounting app in Odoo Enterprise.
- Bank feeds: Odoo connects to banks through third-party providers, and requires an Enterprise subscription. Coverage of Saudi banks varies, so check the list of supported institutions on Odoo’s accounting features page. If your bank is not listed, import statements in CAMT.053, CSV, XLSX, OFX or QIF format.
- Reconciliation: Odoo suggests matches between bank lines and open invoices or bills. Reconciliation models auto-match recurring items such as bank charges or card settlements.
- Fixed assets: create assets from vendor bills, choose a depreciation method and duration, and let Odoo post depreciation entries every month. The asset register supports your year-end statements.
- Budgets and analytic accounting: tag costs and revenues by project, branch, department or contract, then compare actuals against budget lines.
Multi-company and consolidation
Groups with several legal entities can run each company in one Odoo database, each with its own books, VAT number and ZATCA onboarding. Consolidation maps similar accounts across companies to the parent company’s accounts. It then produces a group balance sheet and P&L that show each company’s contribution. For companies in other currencies, Odoo translates equity at historical rates, P&L at average rates and other balance sheet items at closing rates. Intercompany rules can also create the matching bill in one company when the other issues an invoice.
Zakat: what Odoo does and does not do
Odoo has no automated Zakat calculation. What it gives you is the data Zakat relies on: a clean trial balance, year-end balance sheet and income statement, a fixed asset register at book value, and detailed ledgers for every account. Your Zakat adviser or auditor uses these to compute the Zakat base and prepare the return. Good setup helps here. If you map accounts in a way that separates items your adviser needs to add or deduct, the year-end Zakat work becomes much faster.
Odoo Online, Odoo.sh or on-premise; Community or Enterprise
All three hosting options can run the Saudi localization. The choice depends on how much customization you need.
| Option | What it means | Good fit when |
|---|---|---|
| Odoo Online | Odoo’s own cloud; standard apps; Odoo handles upgrades | Standard features cover your processes |
| Odoo.sh | Odoo’s cloud platform with your own custom modules and staging copies | You need custom code or integrations |
| On-premise | Your own server or private cloud | You have internal IT and specific hosting policies |
Odoo.sh and on-premise need Odoo’s Custom plan. See Odoo’s pricing page for current plans, and our Odoo implementation cost guide for Saudi Arabia for indicative project budgets.
Community vs Enterprise: Odoo Community (free, open source) includes the Invoicing app, which issues invoices, records bills and registers payments. The Saudi localization and ZATCA modules are published in Odoo’s open-source code. But the full Accounting app is Enterprise only. That includes the bank reconciliation tools, bank feeds, financial and tax reports, fixed assets, budgets and consolidation. A finance team that closes its own month and prepares statements will almost always need Enterprise.
What is standard and what needs configuration
| Area | Standard in Odoo | Needs configuration or a decision |
|---|---|---|
| Chart of accounts | Saudi template loaded | Adapt to your cost centers, revenue lines and reporting |
| VAT taxes | 15%, 0%, exempt, import VAT, reverse charge | Exemption reason codes, product tax defaults, fiscal positions |
| VAT return | VAT and Withholding Return report | Period locking and review routine |
| ZATCA Phase 1 | Compliant invoices with QR code | Company and customer master data |
| ZATCA Phase 2 | Clearance and reporting via API | Journal onboarding with OTPs, simulation testing, go-live |
| Arabic/English invoices | GCC bilingual format | Layout, logo, terms, customer languages |
| Withholding tax | 5%, 15%, 20% rates | Gross or deducted method, supplier mapping |
| Bank feeds | Synchronization where your bank is supported | Statement import format, reconciliation models |
| Fixed assets, budgets | Asset models, budget reports (Enterprise) | Depreciation policies, analytic plans |
| Consolidation | Multi-company, account mapping | Group chart design, intercompany rules |
| Zakat | Financial statements and ledgers | Account mapping agreed with your Zakat adviser |
Moving from spreadsheets or other accounting software
Most Saudi companies come to Odoo from spreadsheets, a local accounting package, or an older ERP that cannot meet Phase 2. A safe move follows these steps:
- Pick a clean cutover date. The start of a VAT period works best, so each return comes from one system.
- Design the chart of accounts and map old accounts to new ones.
- Import master data: customers and suppliers with VAT numbers, CR numbers and full Saudi addresses, plus products with their tax defaults.
- Load opening balances from the closing trial balance, with open invoices and bills listed one by one so you can collect and pay against them in Odoo.
- Test ZATCA on the simulation portal with real customer types: B2B, B2C, credit notes, foreign customers.
- Run one period in parallel if your team is new to Odoo, and compare the VAT return from both systems.
- Train the finance team on daily tasks: invoicing, bank reconciliation, period close.
Keep historical detail in the old system or an archive. Only bring over what you need to work and report. Our Odoo migration services in Saudi Arabia cover data moves and version upgrades, and Odoo training gets your team ready for go-live. If you sell online or use other systems, Odoo integration services can connect them so invoices still reach ZATCA from one place.
Working with OzonLayer
OzonLayer IT Services is an official Odoo Silver Partner with three Odoo 18 certified consultants and 50+ clients served. Our Saudi office is in Riyadh. We set up the Saudi localization, onboard your journals with ZATCA, move your data and train your team as part of our Odoo implementation services in Saudi Arabia. If you are still comparing systems, our guide to ERP software in Saudi Arabia sets out the options.
Want to see Odoo accounting with your own invoice types and ZATCA wave in mind? Book a free consultation with our team.
Frequently asked questions
Is Odoo accounting software ZATCA compliant?
Yes, when it is set up correctly. Odoo's Saudi Arabia – E-invoicing module connects each sales journal to ZATCA's Fatoora platform. It clears standard tax invoices, reports simplified tax invoices, and produces UBL 2.1 XML, a PDF/A-3 file and a QR code. Compliance still depends on accurate company and customer data and on testing in the ZATCA simulation portal before you switch to production.
Does Odoo handle 15% VAT, zero-rated and exempt supplies in Saudi Arabia?
Yes. The Saudi localization loads taxes for the 15% standard rate, zero-rated supplies, exempt supplies, import VAT and the reverse charge on services from non-resident suppliers. Fiscal positions apply the right tax by customer or supplier. Customer invoices with a 0% tax need an exemption reason code, which Odoo lets you set.
Can Odoo file my VAT return with ZATCA?
Odoo prepares the VAT and Withholding Return, broken down into taxable, zero-rated, exempt and withholding amounts, with drill-down to each journal item. You then submit the return on the ZATCA portal. Businesses with annual taxable supplies above SAR 40 million file monthly; others file quarterly.
When does my business have to join ZATCA Phase 2?
ZATCA adds taxpayers to Phase 2 in waves based on VAT-subject revenue in set reference years, lowering the threshold with each wave. It notifies targeted taxpayers directly at least six months before their integration date. Check the ZATCA website and your registered email and mobile number for your own date rather than relying on third-party lists.
Do I need Odoo Enterprise for accounting in Saudi Arabia?
For most finance teams, yes. Odoo Community includes the Invoicing app, and the Saudi localization and ZATCA modules are in Odoo's open-source code. But bank feeds, reconciliation tools, financial and tax reports, fixed assets, budgets and consolidation are part of the full Accounting app, which is Enterprise only.
Can Odoo print invoices in Arabic and English?
Yes. ZATCA requires tax invoices, simplified tax invoices and their credit and debit notes to be in Arabic, and English may appear alongside. Odoo can set the invoice language per customer, or print a bilingual Arabic and English layout for the whole company using the Gulf Cooperation Council Format option.
Does Odoo calculate Zakat?
No. Odoo has no automated Zakat calculation. It keeps the books Zakat is based on: trial balance, year-end balance sheet and income statement, fixed asset register and detailed ledgers. Your Zakat adviser or auditor uses that data to compute the Zakat base and prepare the return. Agreeing the account mapping with your adviser early saves time at year end.
How do we move from spreadsheets or another accounting system to Odoo?
Choose a cutover date at the start of a VAT period, design the chart of accounts, import customers, suppliers and products, then load opening balances with open invoices and bills listed individually. Test ZATCA on the simulation portal, run one period in parallel if your team is new to Odoo, and train staff before go-live.
