Skip to Content

ZATCA-Compliant E-Invoicing in Odoo: A Step-by-Step Guide

From localization setup to live Fatoora submission.
December 10, 2025 by
ZATCA-Compliant E-Invoicing in Odoo: A Step-by-Step Guide
Administrator

ZATCA-compliant e-invoicing in Odoo is achievable in a series of well-defined steps from installing the Saudi localization to submitting live invoices to the Fatoora platform.

A Quick Recap of ZATCA Phase 2

Saudi Arabia's e-invoicing regulation, administered by the Zakat, Tax and Customs Authority (ZATCA), moved into its second stage the Integration Phase starting 1 January 2023. Unlike Phase 1, which simply required businesses to issue structured electronic invoices, Phase 2 requires taxpayers to integrate their invoicing systems directly with ZATCA's Fatoora platform.

The rollout is wave-based, grouping taxpayers by their annual VAT-taxable revenue. Each wave receives at least six months' notice before its compliance deadline, so knowing your wave date is the first planning input for any project. Phase 2 draws a clear line between two invoice flows:

  • B2B (standard tax invoices) follow a clearance model: each invoice is submitted to ZATCA and cleared before it is shared with the customer.
  • B2C (simplified tax invoices) follow a reporting model: the invoice carries a compliant QR code and is reported to the Fatoora platform (typically within 24 hours).

Odoo's Saudi Arabia localization was built to support these requirements including sandbox, simulation, and production onboarding, invoice submission, QR compliance, credit and debit notes, and POS integration.

Step-by-Step in Odoo

1. Install the Saudi Arabia Fiscal Localization

Start by setting the company's country to Saudi Arabia and installing the Saudi Arabia fiscal localization package. This brings in the local chart of accounts, VAT tax structure, and the ZATCA e-invoicing framework. Installing the localization first means the rest of your configuration inherits the correct fiscal foundations.

2. Configure Company & VAT Data

ZATCA validates invoices against your registered company data, so accuracy here is non-negotiable. Complete every field that appears on a compliant invoice:

  • Legal company name (matching your commercial registration).
  • VAT registration number and any additional identification numbers required.
  • Full registered address, including building number, district, and postal code.
  • Industry and business category where prompted.

A mismatch between the data you register with ZATCA and the data on the invoice is one of the most common causes of rejection.

3. Onboard the Journal (Sandbox → Simulation → Production)

Onboarding is the heart of Phase 2 integration. In Odoo you progress a journal through three environments:

  • Sandbox for early technical testing without touching official records.
  • Simulation a pre-production environment that mirrors the live rules so you can validate the full flow.
  • Production the live connection to Fatoora.

To onboard, you generate an OTP from the Fatoora portal and enter it in Odoo. This exchanges a cryptographic certificate that binds your Odoo instance to your ZATCA account. Complete simulation testing thoroughly before promoting the journal to production.

4. Generate Compliant Invoices with QR

Once the journal is in production, invoices generated in Odoo carry the required QR code and structured data, and are submitted to ZATCA according to their type. For B2B invoices, Odoo handles the clearance flow; for B2C, it produces the QR-coded simplified invoice and reports it. Confirm that generated documents show a successful ZATCA status before sharing them with customers.

5. Handle Credit & Debit Notes

Corrections must also flow through ZATCA. Odoo's Saudi localization supports compliant credit and debit notes, which reference the original invoice and are submitted in the same way. Never adjust a cleared invoice with an ad-hoc workaround always issue the proper note so the audit trail stays intact.

6. POS ZATCA Integration

Retail and quick-service businesses issue most of their invoices at the point of sale. Odoo's POS ZATCA integration applies the same simplified-invoice rules QR code and reporting to receipts generated at the register, so your storefront stays compliant without a separate process.

7. Go-Live Checks

Before switching to production, run a final checklist:

  • Company and VAT data verified against ZATCA registration.
  • Journal successfully onboarded and tested in simulation.
  • Sample B2B and B2C invoices cleared/reported without errors.
  • Credit and debit note flows validated.
  • POS terminals issuing compliant simplified invoices.
  • Team trained on how to read ZATCA statuses and resolve rejections.

Common Pitfalls

  • Skipping simulation. Jumping straight to production hides configuration errors until they cause live rejections.
  • Incomplete address or VAT data. Missing building numbers or postal codes are a frequent rejection trigger.
  • Ignoring the wave deadline. Onboarding takes time; starting late compresses testing.
  • Forgetting POS. Teams sometimes compliance-check accounting invoices but overlook the register.

This article is a practical implementation guide, not legal or tax advice. Always confirm your obligations and deadlines with ZATCA's official guidance or a qualified tax advisor.

How ERPNAS Delivers This

ERPNAS is an Odoo Silver Partner with around ten years of experience and 60+ delivered Odoo projects, and we maintain an on-site presence in the Gulf and Syria. That regional footprint means we understand ZATCA in practice, not just on paper from mapping your wave deadline to running simulation testing and validating live clearance. As a sister company of Majorbird, we can also draw on a wider engineering bench when a project needs it.

Ready to make your invoicing ZATCA-compliant in Odoo? Talk to the ERPNAS team about a guided localization and onboarding project tailored to your wave deadline.

Odoo 18 vs Odoo 19: Should You Upgrade Now?
Weighing the AI-era release against a smooth-running system.