Odoo apps & modules

Odoo Accounting Software for Saudi Businesses: VAT and ZATCA (2026)

Rizwan IftikharOzonLayer · Odoo Silver Partner Updated 13 min read

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

PointStandard tax invoiceSimplified tax invoice
Typical useB2B salesB2C sales, including POS receipts
ZATCA process in Phase 2Clearance: ZATCA validates the invoice before you share itReporting: the invoice is reported to ZATCA after issue
How Odoo decidesBusiness customer with full company detailsIndividual or walk-in customer
QR codeIncluded on the invoiceRequired; scannable with the ZATCA app
Files producedUBL 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.

OptionWhat it meansGood fit when
Odoo OnlineOdoo’s own cloud; standard apps; Odoo handles upgradesStandard features cover your processes
Odoo.shOdoo’s cloud platform with your own custom modules and staging copiesYou need custom code or integrations
On-premiseYour own server or private cloudYou 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

AreaStandard in OdooNeeds configuration or a decision
Chart of accountsSaudi template loadedAdapt to your cost centers, revenue lines and reporting
VAT taxes15%, 0%, exempt, import VAT, reverse chargeExemption reason codes, product tax defaults, fiscal positions
VAT returnVAT and Withholding Return reportPeriod locking and review routine
ZATCA Phase 1Compliant invoices with QR codeCompany and customer master data
ZATCA Phase 2Clearance and reporting via APIJournal onboarding with OTPs, simulation testing, go-live
Arabic/English invoicesGCC bilingual formatLayout, logo, terms, customer languages
Withholding tax5%, 15%, 20% ratesGross or deducted method, supplier mapping
Bank feedsSynchronization where your bank is supportedStatement import format, reconciliation models
Fixed assets, budgetsAsset models, budget reports (Enterprise)Depreciation policies, analytic plans
ConsolidationMulti-company, account mappingGroup chart design, intercompany rules
ZakatFinancial statements and ledgersAccount 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:

  1. Pick a clean cutover date. The start of a VAT period works best, so each return comes from one system.
  2. Design the chart of accounts and map old accounts to new ones.
  3. Import master data: customers and suppliers with VAT numbers, CR numbers and full Saudi addresses, plus products with their tax defaults.
  4. 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.
  5. Test ZATCA on the simulation portal with real customer types: B2B, B2C, credit notes, foreign customers.
  6. Run one period in parallel if your team is new to Odoo, and compare the VAT return from both systems.
  7. 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.

Share this article
Written by Rizwan Iftikhar

Published by OzonLayer, an official Odoo Silver Partner that helps businesses in Saudi Arabia and the United Kingdom implement, customise, migrate and support Odoo ERP.

Want to see this working in your business?

Talk to a certified Odoo consultant about your requirements. We’ll give you a straight answer on scope, timeline and budget, with no obligation.