Accounting & Finance

Odoo Accounting & Finance Management for Saudi Arabia: The Complete 2026 Setup Guide

SOCPA chart of accounts, VAT + Zakat dual-tax regime, Saudi financial reporting, SAMA bank reconciliation, and the monthly close workflow — the full accounting setup every Saudi entity needs in Odoo.

iWesabe Editorial TeamAugust 14, 201918 min read

Saudi Arabia's accounting and finance compliance framework is more layered than it appears from the outside. A business operating in KSA must manage two parallel tax obligations (VAT and Zakat), a chart of accounts aligned to SOCPA and IFRS standards, SAMA-regulated banking infrastructure, government portal obligations that touch the general ledger, and monthly financial close requirements that feed quarterly and annual regulatory filings. An ERP that handles one of these well but not the others creates reconciliation debt that compounds over a financial year.

This guide is the accounting and finance setup reference iWesabe uses on every Saudi Odoo deployment. It covers the five compliance domains that define a Saudi-grade finance function, the SOCPA chart of accounts configuration, the VAT + Zakat dual-tax regime that most ERP implementations handle unevenly, Saudi financial reporting requirements and where Odoo's native output falls short, SAMA bank reconciliation, and the monthly close workflow. For the VAT operating model in detail — tax codes, return workflow, edge cases — see the companion guide on Saudi VAT compliance in Odoo. For ZATCA Phase 2 e-invoicing, see the companion guide on Odoo and ZATCA Phase 2.

What does a Saudi-compliant accounting and finance setup in Odoo actually need to cover?

Saudi accounting compliance spans five distinct domains, each with its own regulator, data requirements, and filing cadence. The table below maps each domain to the employer obligation it creates and the Odoo configuration it requires. A finance function that handles all five from the same ERP — with the right configuration — closes its books in days, not weeks.

Saudi accounting & finance compliance — five-domain overview
DomainRegulatorCore obligationOdoo configuration required
Chart of accounts (SOCPA/IFRS)SOCPAFinancial statements aligned to IFRS or IFRS for SMEs; Saudi-specific provision accountsSaudi localisation chart (l10n_sa) + mandatory provision accounts for Zakat, GOSI, EOSB, withholding tax
VAT accounting (ZATCA)ZATCA15% VAT on taxable supplies; monthly or quarterly returns; 7-year audit trailTax-code matrix, return workflow, reverse-charge rules, partner-level defaults — see companion VAT compliance guide
Zakat accounting (ZATCA/GAZT)ZATCAAnnual Zakat at 2.5% of Zakat base for Saudi/GCC shareholders; income tax at 20% for non-Saudi shareholders; split by ownershipDedicated Zakat liability account; monthly provision entry; annual Zakat base worksheet tied to balance sheet accounts
Financial reporting (SOCPA)SOCPA / External auditorsMonthly management accounts; annual audited financial statements for entities above the threshold; ZATCA VAT return reconciled to GLOdoo financial report suite (P&L, BS, cash flow, GL, aged receivables/payables) + related-party and segment tagging in analytic accounts
Banking & payments (SAMA)SAMAAll corporate payments through SAMA-licensed banks; IBAN format mandatory; WPS/Mudad for payroll; SARIE for high-value B2B transfersSAMA-format IBAN validation on partner records; bank statement import (MT940 / CSV) + automated matching rules; WPS disbursement file generation

SOCPA chart of accounts — configuring Odoo for Saudi accounting standards

Saudi Arabia requires private-sector companies to prepare financial statements in accordance with IFRS (for listed companies and larger entities) or IFRS for SMEs (for smaller entities), as adopted by SOCPA. Odoo's Saudi localisation (`l10n_sa`) ships a default chart of accounts aligned to this structure. What the localisation does not pre-configure are the Saudi-specific provision and liability accounts that the regulatory framework requires. These are the accounts most often missing in generic Odoo implementations, and the ones that cause the most reconciliation problems at year-end.

Saudi-specific accounts required in the Odoo chart of accounts
AccountTypeSaudi regulatory requirementConfiguration note
VAT payable (output)Current liabilityZATCA VAT return — output tax balanceMust sit separately from other tax payables; auto-populated by Odoo tax engine
VAT receivable (input)Current assetZATCA VAT return — recoverable input tax balanceUsed in the return reconciliation; must not be netted against output at the account level
Zakat provisionCurrent liabilityAnnual Zakat at 2.5% of Zakat base — accrued monthly before year-end filingSeparate account from income tax; monthly credit entry (debit: Zakat expense); cleared at payment
Income tax payable (non-Saudi shareholders)Current liability20% income tax on non-Saudi shareholder share of profit; filed annually with ZATCASplit from Zakat; requires shareholder-ownership percentage to be stored in company configuration
Withholding tax payableCurrent liability5% or 15% WHT on payments to non-residents (services, royalties, dividends); filed monthlySeparate account per WHT rate; linked to supplier partner type (resident vs non-resident)
GOSI employer contribution payableCurrent liabilityMonthly GOSI remittance obligation; cleared by payment on or before the 15th of the following monthAuto-populated by Odoo payroll journal; must not be grouped with general accruals
EOSB provision (end-of-service benefit)Non-current liabilitySaudi Labor Law Articles 84–87 mandatory gratuity; accrues from day one of employmentMonthly provision entry from payroll run; long-term portion on balance sheet; cleared at termination payment

VAT + Zakat — managing Saudi Arabia's dual-tax regime in one ERP

Saudi Arabia operates two parallel tax obligations that are fundamentally different in structure. VAT is a transaction tax — applied to each supply at 15%, reported periodically, and administered through the ZATCA portal with ZATCA Phase 2 clearance requirements. Zakat is an annual levy on the Zakat base (a net-assets calculation adjusted for specific add-backs and deductions under the Saudi Zakat regulations) — not on profit, not on revenue. Most ERP implementations that enter Saudi Arabia get the VAT configuration right and the Zakat accounting wrong. The difference between the two is material: Zakat underpayment creates ZATCA arrears; Zakat overstatement distorts the balance sheet.

  1. The Zakat base is not taxable profit. The Zakat base under Saudi regulations is calculated from the balance sheet, not the income statement. It begins with the equity base (paid-up capital + retained earnings + reserves) plus certain long-term liabilities used to fund business operations, then applies specific deductions (fixed assets net of depreciation, long-term investments, etc.). A Saudi entity with a loss for the year can still have a positive Zakat base if its equity position is strong. Odoo does not calculate the Zakat base automatically — a dedicated annual worksheet pulling the relevant balance sheet accounts must be maintained in parallel.
  2. The Zakat / income tax split depends on shareholder nationality. Saudi and GCC shareholders are subject to Zakat on their proportional share of the Zakat base. Non-Saudi, non-GCC shareholders pay income tax at 20% on their proportional share of taxable income. A Saudi company with mixed ownership must calculate and report both in the annual filing. This split must be reflected in the chart of accounts with separate liability accounts for Zakat and income tax — never a single combined tax-payable account.
  3. Monthly Zakat provision prevents year-end surprises. The Zakat liability should be accrued monthly as one-twelfth of the estimated annual Zakat obligation (based on the prior year's Zakat base as a working estimate, updated at mid-year review). Posting Zakat as a single year-end entry creates a one-period income statement distortion and a balance sheet that understates liabilities throughout the year. iWesabe configures a recurring monthly journal template in Odoo for the Zakat provision — the amount is reviewed quarterly and adjusted if the Zakat base estimate changes materially.
  4. VAT and Zakat are now filed with the same regulator — ZATCA — but through different systems. The periodic VAT return (monthly or quarterly) goes through the ZATCA Fatoora portal. The annual Zakat and income tax return goes through the ZATCA e-services platform on a separate filing calendar. The two systems do not cross-validate, which means discrepancies between the GL and both returns can remain undetected until a ZATCA compliance review. The monthly close workflow described later in this guide is structured to surface these discrepancies before they reach the filing date.

Is your Odoo chart of accounts set up for both VAT and Zakat?

iWesabe audits your Saudi chart of accounts against the seven mandatory provision accounts, validates the VAT/Zakat split configuration, and gives you a written remediation list within 48 hours.

Saudi financial reporting — what Odoo produces and where the gaps are

Odoo's native financial report suite covers most of what a Saudi finance function needs for internal management and regulatory compliance. Where gaps appear is in the disclosures and supplementary schedules that Saudi auditors and ZATCA expect — disclosures that require data to be tagged at the transaction level before reporting time, not assembled manually after the fact.

Saudi financial reporting — Odoo native output vs supplementary requirements
Report / ScheduleOdoo native?Saudi requirementConfiguration needed
Profit & LossYesMonthly management accounts; annual audited P&LStandard — no additional configuration
Balance SheetYesAnnual audited; Zakat base worksheet derived from itRequires correct account structure for Zakat base derivation (see H2 #3)
Cash Flow StatementYes (indirect method)Required for entities above audit thresholdStandard indirect method — verify opening cash balance at go-live
ZATCA VAT return reconciliationPartialVAT return must reconcile to GL; ZATCA cleared-invoice logTax report + cleared-invoice reconciliation — see companion VAT compliance guide
Zakat + income tax disclosureNo (manual)Annual Zakat / income tax return filed with ZATCA; notes to audited accountsSeparate Zakat base worksheet; provision account balance confirms filing position
Related-party transactions scheduleNo (requires tagging)Required in audited accounts under IFRS IAS 24Tag related-party counterparts in Odoo partner master; use analytic accounts to isolate related-party transaction volumes
Withholding tax reconciliationPartialMonthly WHT return filed with ZATCA for payments to non-residentsWHT payable account balance must reconcile to monthly filing; requires non-resident supplier flag on partner master

Bank reconciliation and SAMA payment infrastructure in Odoo

All corporate banking in Saudi Arabia runs through SAMA-licensed banks. SAMA mandates specific IBAN formats, payment clearing rules, and electronic payment infrastructure that the ERP must be aligned with to process payments without manual intervention or mismatch errors. Three payment channels are relevant for most Saudi entities: SARIE (real-time gross settlement for high-value B2B transfers), WPS/Mudad (payroll disbursement — covered in the companion HR payroll guide), and direct bank transfers for vendor settlements.

  • SAMA IBAN format validation on all partner records. The Saudi IBAN format is SA + 2 check digits + 18 alphanumeric characters (24 total). Odoo's Saudi localisation includes IBAN format validation. Every supplier and customer record used in payment processing must carry a validated SAMA-format IBAN — a misformatted IBAN causes the bank file or payment instruction to fail at the bank gateway, not inside Odoo. iWesabe makes IBAN a mandatory field on the partner master and runs a bulk validation sweep on all existing partner records before go-live.
  • Bank statement import — handling Saudi bank file formats. Saudi banks export transaction data in various formats: MT940 (standard SWIFT format used by most major Saudi banks), CSV (used by several local and digital banks), and proprietary XML formats. Odoo's bank statement import supports MT940 natively and CSV through configurable parsers. The critical setup step is mapping each bank's column headers or MT940 field codes to Odoo's statement fields before the first import. A mismatch at this step produces statement lines that do not reconcile automatically and require manual posting, defeating the purpose of bank feed integration.
  • Automated matching rules for recurring payments. Saudi corporate payment patterns — monthly rent, recurring service contracts, utility bills, GOSI contributions, and insurance premiums — are highly predictable. Odoo's bank reconciliation module supports rule-based matching: a rule can match an incoming bank line to the correct journal account or outstanding payable based on amount range, partner name, reference pattern, or account code. Setting up matching rules for the top 10–15 recurring payment types at go-live reduces monthly bank reconciliation from a 3-hour manual exercise to a 20-minute review.
  • Multi-bank account configuration for Saudi entities. Most Saudi businesses of any scale operate multiple bank accounts: a main operating account, a payroll-disbursement account linked to WPS/Mudad, and sometimes a SARIE-enabled high-value transfer account. Each bank account in Odoo must be configured with its own journal, its own matching rules, and the correct bank-account type. Grouping multiple accounts under a single journal is the most common cause of bank-reconciliation exceptions that take days to unpick.

How long does your bank reconciliation take each month?

iWesabe configures Odoo bank statement import, IBAN validation, and automated matching rules for Saudi banks — most clients reduce monthly reconciliation time by more than 60% after go-live.

The monthly financial close — how Saudi entities run it in Odoo

A Saudi financial close that produces clean management accounts and feeds directly into the periodic VAT return and annual Zakat filing runs in seven steps across seven to eight working days. Each step has a clear owner and a clear output. The steps below are the close sequence iWesabe configures for Saudi entities — the discipline that turns a three-week reconciliation marathon into a systematic week-long process.

7–8
Working days — target close window for a Saudi entity of 50–500 employees
5
Days from period-end to VAT return filed (ZATCA target)
3
Business days before payroll date — SIF file must reach Mudad (WPS)
1/12
Monthly Zakat provision entry — fraction of estimated annual Zakat obligation
  1. Day 1–2: Payroll confirmation and GOSI / EOSB provision posting. Confirm the payroll run in Odoo. The payroll journal posts gross salaries, GOSI employer contribution, EOSB monthly provision, and net pay to the relevant accounts automatically. Verify the GOSI payable balance against the GOSI statement for the period. Generate the WPS/Mudad SIF file for submission — it must reach Mudad at least three business days before the payroll disbursement date.
  2. Day 2–3: Bank reconciliation across all accounts. Import bank statements from all Saudi bank accounts (MT940 or CSV). Run the automated matching rules — the recurring-payment types configured at go-live should match automatically. Review unmatched lines: these are either timing differences (payments in transit), new recurring items not yet in the rules, or genuine unrecorded transactions. The bank balance in Odoo must agree to the bank statement closing balance on the last day of the period before the close proceeds.
  3. Day 3: ZATCA cleared-invoice reconciliation and VAT tax-code sweep. Pull the ZATCA cleared-invoice log for the period. Match each cleared invoice (by UUID) to its Odoo accounting journal entry. Flag any cleared invoice without a matching GL entry and any GL entry without a cleared-invoice counterpart. Run Odoo's tax report and review every zero-rated, exempt, and out-of-scope transaction — these are the tax codes that drift fastest. This is the input to the VAT return; detail on the return workflow is in the companion VAT compliance guide.
  4. Day 4: Zakat provision posting and withholding tax reconciliation. Post the monthly Zakat provision entry (one-twelfth of the estimated annual Zakat obligation). If the period is the third month of a quarter, review the Zakat base estimate for the first half-year and adjust the provision rate if material changes to the balance sheet composition occurred. Reconcile the withholding tax payable account balance against payments to non-resident suppliers in the period — each qualifying payment must have a corresponding WHT journal entry and the balance must tie to the monthly WHT filing.
  5. Day 5: Aged receivables and payables review. Run the aged receivables report. Flag any receivable outstanding for more than 12 months — these are candidates for bad-debt VAT recovery in the next return. Review the aged payables for any payment obligations overdue past contractual terms — late supplier payments above certain thresholds can trigger ZATCA compliance flags for WPS-adjacent vendors. Review the GOSI payable balance — it must be cleared by the 15th of the following month.
  6. Day 6–7: Trial balance review and inter-company eliminations (multi-entity). Run the trial balance in Odoo and verify that every account with a material balance has a supporting sub-ledger or reconciliation. For multi-entity Saudi groups, run the inter-company reconciliation: inter-company receivables in entity A must equal inter-company payables in entity B for the period. Mismatches in inter-company balances are the single most common cause of consolidated P&L distortions in Saudi group accounts. Odoo's multi-company module produces the individual entity accounts; consolidation eliminations require a separate step.
  7. Day 7–8: P&L, Balance Sheet, and CFO sign-off. Generate the management P&L and Balance Sheet from Odoo. Verify that the Balance Sheet balances (total assets = total liabilities + equity) and that the opening balance sheet from the prior close ties to the current period's opening position. Prepare the one-page management summary: actual vs prior-period P&L, key balance sheet movements (cash, receivables, payables, Zakat provision, EOSB provision), and a note on any open items from the close sweep. CFO sign-off locks the period in Odoo — no further journal entries to the closed period without a formal re-open.

Odoo is a capable accounting and finance platform for Saudi Arabia when the configuration decisions are made correctly at the start. The chart of accounts, the Zakat and income-tax split, the provision accounts, the bank-statement import rules, and the seven-step close discipline are not features that activate automatically — they are configuration choices that either get made at go-live or create reconciliation debt that compounds over the financial year. Made correctly, the monthly close runs in seven to eight working days, the VAT return reconciles to the GL on first pass, and the annual Zakat filing draws directly from the balance sheet accounts maintained throughout the year.

iWesabe has configured Odoo accounting and finance for Saudi entities across construction, manufacturing, retail, distribution, healthcare, and professional services — single entities and multi-entity groups. If your current Odoo deployment is producing clean invoices but a difficult month-end close, or if you are planning a first Saudi ERP deployment and want the accounting configuration right from day one, a focused 60-minute call covers the chart of accounts review, the Zakat configuration, and the close workflow — written output inside 48 hours.

Book a 60-minute Saudi Odoo accounting setup review

We will walk through your chart of accounts, Zakat configuration, bank reconciliation setup, and monthly close workflow — written summary within 48 hours.

WhatsApp

Frequently Asked Questions

What accounting standards apply to Saudi companies using Odoo ERP?
Saudi private companies prepare financial statements in accordance with IFRS as adopted by SOCPA (Saudi Organization for Certified Public Accountants) for listed companies and larger entities, or IFRS for SMEs for smaller entities. Odoo's Saudi localisation (l10n_sa) ships a chart of accounts aligned to this structure. In practice, the most significant Saudi-specific accounting requirements beyond IFRS are the mandatory provision accounts for Zakat, GOSI employer contributions, EOSB, and withholding tax — none of which Odoo pre-configures at the account level. These must be set up as part of the go-live chart of accounts configuration.
What is the difference between VAT and Zakat in Saudi Arabia, and how does Odoo handle both?
VAT is a transaction tax at 15% applied to each supply, filed periodically (monthly or quarterly) through the ZATCA Fatoora portal. Zakat is an annual levy at 2.5% of the Zakat base — a net-assets calculation, not a profit or revenue tax — filed annually with ZATCA. Only Saudi and GCC shareholders are subject to Zakat; non-Saudi shareholders pay income tax at 20% on their share of taxable profit instead. Odoo handles VAT natively through the l10n_sa tax engine with ZATCA Phase 2 clearance. Zakat requires a separate accounting treatment: a dedicated Zakat liability account, a monthly provision entry, and an annual Zakat base worksheet derived from balance sheet accounts. Odoo does not calculate the Zakat base automatically — this is a configuration and process gap that must be addressed during implementation.
Does Odoo support VAT group registration for connected Saudi companies?
Yes. ZATCA permits VAT group registration for connected companies under common control, and Odoo supports this through its multi-company architecture. The critical configuration requirement is the inter-company transaction tax codes: supplies between group members must be coded as out-of-scope (not zero-rated, which would post them to the VAT return). The group's external supplies consolidate into a single VAT return. This configuration must be set up correctly at the holding-company level during implementation — retrofitting it after go-live requires journal reclassification. For consolidation of the annual Zakat position across group members, each entity's Zakat base must be calculated separately before the consolidated group filing.
Which Saudi bank file formats does Odoo support for bank reconciliation?
Odoo supports MT940 (standard SWIFT bank statement format used by most major Saudi banks including NCB/SNB, Al Rajhi, Riyad Bank, SAMBA, and others) natively. CSV bank statement import is supported through configurable parsers — the column-mapping setup is required once per bank and applies to all future imports from that bank. The key go-live step is to obtain a sample statement export from each Saudi bank account before go-live, configure the parser mapping, and validate that imported statement lines match expected transaction descriptions and amounts before the first live import. Proprietary XML formats used by some digital banks require a custom connector; iWesabe has built connectors for the most common Saudi digital bank formats.
How long does the monthly financial close take in Odoo for a Saudi entity?
For a single-entity Saudi business with 50–250 employees and a standard payroll and supplier payment cycle, a well-configured Odoo deployment should close in seven to eight working days. Day 1–2 for payroll confirmation, GOSI, and WPS file generation. Day 2–3 for bank reconciliation. Day 3 for ZATCA cleared-invoice reconciliation and VAT tax-code sweep. Day 4 for Zakat provision entry and withholding tax reconciliation. Day 5 for aged receivables/payables review. Day 6–7 for trial balance review. Day 7–8 for P&L and balance sheet generation and CFO sign-off. The variable that most often extends this timeline is bank reconciliation — specifically, unmatched lines from bank statement imports where the matching rules were not fully configured at go-live or where new recurring payment types were added without updating the rules.
Does Odoo handle withholding tax on payments to non-residents in Saudi Arabia?
Odoo supports withholding tax through its tax engine, but the Saudi WHT configuration requires explicit setup that the default localisation does not cover. Saudi WHT applies to payments to non-resident entities for services (5%), royalties (15%), dividends (5% or 0% under treaty), and certain other categories — each at its own rate. The configuration steps are: (1) flag each non-resident supplier on the partner master with the correct WHT rate applicable to the service type; (2) set up a WHT tax code that auto-applies when a bill is posted against a non-resident supplier; (3) create a dedicated WHT payable account for each rate; (4) configure a monthly WHT report that reconciles the payable balance to the ZATCA monthly filing. Missed WHT on non-resident payments creates ZATCA arrears plus penalties calculated on the gross payment — one of the more financially material compliance gaps we see in Saudi Odoo audits.
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

Explore Related Solutions