Odoo apps & modules

ZATCA-Ready POS System in Saudi Arabia: Odoo Point of Sale (2026)

Rizwan IftikharOzonLayer · Odoo Silver Partner Updated 12 min read

A ZATCA-ready POS system in Saudi Arabia must issue simplified tax invoices with a QR code, show the required details in Arabic and, once your business is in a Phase 2 wave, report every simplified invoice to ZATCA within 24 hours. Odoo Point of Sale does this through its Saudi localization modules and shares one database with stock and accounting.

Summary: Sales to consumers at the till in Saudi Arabia are documented with simplified tax invoices. Since Phase 1 started on 4 December 2021, these must be generated and stored by a compliant electronic solution and carry a QR code the buyer can scan with ZATCA’s VAT app. In Phase 2, which ZATCA rolls out in waves from 1 January 2023, the solution must also be integrated with the Fatoora portal. Simplified invoices are given to the customer straight away and reported to ZATCA within a maximum of 24 hours, while B2B tax invoices must be cleared by ZATCA before they are shared. Odoo Point of Sale handles this with the Saudi localization, including a dedicated simplified e-invoicing module that reports POS receipts to ZATCA and prints the Phase 2 QR code. Because the till, stock, accounting and online store share one Odoo database, each sale updates inventory and VAT records without re-keying.

What ZATCA requires from a POS system in Saudi Arabia

ZATCA’s e-invoicing rules treat a till receipt for a consumer as a simplified tax invoice. A paper receipt that is scanned or photographed later does not count. The invoice has to be created in a structured electronic format by a compliant solution, and ZATCA’s own guide names “online cash register” and tablet-based registers as examples of such solutions.

Phase 1: generation (since 4 December 2021)

Every VAT-registered business (except non-resident taxpayers) must generate and store invoices electronically and add the Phase 1 fields. For simplified invoices, the visible marker is the QR code. It carries five pieces of data:

  • Seller’s name
  • Seller’s VAT registration number
  • Date and time of the invoice
  • VAT amount
  • Total amount including VAT

A customer can scan the code with ZATCA’s VAT app to check the basics of the receipt.

Phase 2: integration and the 24-hour reporting rule

Phase 2 connects your POS or ERP to ZATCA’s Fatoora platform. ZATCA brings businesses in by waves and notifies each group at least six months before its integration date. The process for a simplified invoice in Phase 2 is:

  1. The seller generates the e-invoice with all mandatory fields.
  2. The seller gives the e-invoice to the buyer.
  3. The seller stores the e-invoice in the e-invoicing solution.
  4. The seller reports the e-invoice to ZATCA within a maximum of 24 hours, through a solution integrated with Fatoora.

This is different from B2B tax invoices, which must be cleared by ZATCA before the buyer receives them. For a shop or restaurant, the difference matters: the customer gets the receipt at once, and reporting can follow shortly after. In Phase 2 the e-invoice is generated in XML (or PDF/A-3 with embedded XML), so the till software itself has to produce the right format. ZATCA’s simplified e-invoicing guide sets out both phases.

Arabic on receipts

Saudi VAT rules require tax invoices and simplified tax invoices to be in Arabic. They can be bilingual, so an Arabic and English receipt is normal for most retailers and restaurants.

For the wider picture, including B2B clearance and onboarding, read our guide to Odoo ZATCA e-invoicing.

How Odoo POS works with the Saudi localization

Odoo’s Saudi Arabia localization documentation lists the modules that make a ZATCA-ready Odoo POS in Saudi Arabia:

ModuleTechnical nameWhat it does
Saudi Arabia – Accountingl10n_saChart of accounts, taxes and Phase 1 QR code
Saudi Arabia – E-invoicingl10n_sa_ediConnects to ZATCA’s Phase 2 API
Saudi Arabia – E-invoicing (Simplified)l10n_sa_edi_posE-invoicing from Point of Sale
Saudi Arabia – Point of Salel10n_sa_posCompliance fields and behavior for POS receipts

Setup follows a clear path. You complete the company details (VAT number, address, commercial registration), then onboard the POS invoices journal from its ZATCA tab with a one-time password from the Fatoora portal. Odoo supports a simulation environment for testing before you switch to production. Once you move to production and submit an invoice, the journal cannot go back to sandbox mode, so test first.

At the till, Odoo’s documentation asks cashiers to assign a customer to each order before payment. For walk-in sales this can be a generic cash-customer record. Each receipt is then processed as an e-invoice and reported to ZATCA, and the Phase 2 QR code prints on the receipt and the PDF. If ZATCA rejects a document, it stays in a rejected state, the reason shows in Odoo, and you fix the data and retry.

Arabic receipts are a setting: in Point of Sale settings, the Bills & Receipts section has a Gulf Cooperation Council format option that adds Arabic to the printed receipt.

Offline mode: what happens when the internet drops

Odoo POS runs in the browser and keeps selling during an outage. According to the Odoo POS documentation, the register switches to offline mode, stores new orders in the browser cache and syncs them to the server when the connection returns. Products and customers already loaded in the session stay available.

Three practical points for Saudi stores:

  • Keep the browser open. Closing, reloading or clearing the cache before the sync finishes can lose offline orders.
  • Watch the 24-hour clock. ZATCA reporting can only happen once orders reach the server. A short outage is fine; a branch offline for a day is a compliance issue, so a backup mobile data connection is worth the cost.
  • Close the register daily. Odoo recommends closing each POS session at the end of the day, which also posts the day’s sales to accounting.

Hardware: IoT box, printers, scanners and payment terminals

Odoo POS supports receipt printers, cash drawers, barcode scanners, scales, customer displays, card payment terminals and electronic shelf labels. Some devices, such as Epson ePOS network printers, can talk to the browser directly. Others are connected through an Odoo IoT box, a small device that links USB and network hardware to the POS. A typical till setup is:

  • A touchscreen PC, tablet or all-in-one terminal running the POS in a browser
  • A thermal receipt printer that can print the Arabic layout and QR code
  • A barcode scanner for retail, or preparation printers for a kitchen
  • A cash drawer triggered by the printer, and a customer display if needed

Card and wallet payments. Saudi shoppers pay heavily with mada cards and mobile wallets such as STC Pay. Odoo lists built-in integrations with a set of terminal providers (including Adyen, Stripe, Viva.com, Worldline and Ingenico), so check whether your acquirer is supported in Saudi Arabia before you buy hardware. Where it is not, the common approach is a standalone bank terminal, with the cashier selecting a matching payment method (for example “mada card”) in Odoo so the session totals and bank reconciliation still line up. A deeper terminal link is a custom project, which our Odoo integration services page covers.

Restaurant POS in KSA: features that matter

Odoo’s restaurant mode is built into Point of Sale, not sold as a separate product. The features most restaurants and cafes use are:

  • Floor plans and tables. Draw each floor, set table numbers, seats and shapes, and see table status in real time. Bookings can be linked to tables.
  • Kitchen and bar orders. Preparation printers print tickets by product category, so drinks go to the bar and food to the kitchen. A preparation display shows orders on a screen instead of paper.
  • Courses. Split an order into courses and send the next course to the kitchen when the table is ready.
  • Split bills and transfers. Split a bill by item, move an order to another table or merge two tables.
  • Tips. Add a tip at payment as a fixed amount or a percentage, with the tip recorded on its own product line for reporting.
  • Self-ordering. Odoo also offers self-order options for kiosks or table QR menus, which some quick-service brands use to cut queue time.

Every one of these orders still ends as a simplified invoice with the QR code, so the compliance work is the same as in retail. For a related project, see our Odoo POS for restaurants case study.

Retail POS in Saudi Arabia: barcodes, loyalty and multi-branch stock

For a retail POS, Saudi chains usually need the same product catalog in every branch, with prices and stock that differ by location. Odoo handles this with:

  • Barcodes. Scan product barcodes, including weighted barcodes from a scale, and print labels from the inventory app.
  • Pricelists and promotions. Run branch-specific prices, time-limited discounts and buy-X-get-Y offers.
  • Loyalty, gift cards and eWallets. Customers earn points across all branches and online, and gift cards can be sold and redeemed at the till.
  • Multi-branch stock. Each shop’s POS is linked to its own warehouse, so a sale reduces stock in the right branch. Transfers between branches and the central warehouse are tracked in the same system.
  • Returns and refunds. Refunds are linked to the original order, which keeps credit notes and VAT correct.
  • Employee login. Cashiers log in with a PIN or badge, so sales and cash differences are tracked per person.

A related project is our multi-branch perfume retail case study.

Inventory, accounting and e-commerce in one system

The main reason to choose Odoo over a standalone till is what happens after the sale. When a POS session closes, Odoo posts the sales, VAT and payments to accounting. Cash differences go to a cash difference account, and a manager can be required to approve any difference above a set limit. The same VAT data feeds the reports your accountant uses for returns. Our page on Odoo accounting software in Saudi Arabia explains that side in more detail.

Stock works the same way. A sale at any branch updates on-hand quantities at once, and purchasing can reorder from suppliers based on those levels. Retailers that also sell online can run an Odoo website shop on the same product list, or connect an existing Salla store. Our Odoo Salla integration brings Salla orders, customers and payment details into Odoo, with stock sync available where needed.

Standalone POS vs Odoo POS + ERP

Many Saudi businesses start with a simple cloud till. That can be the right choice for a single small outlet. The table shows where the two approaches differ.

AreaStandalone POSOdoo POS + ERP
ZATCA scopeCovers till receipts only; B2B invoices often come from another systemPOS receipts and B2B tax invoices from one ZATCA-onboarded system
StockBasic counts per outlet; purchasing done elsewhereLive stock per branch and warehouse, transfers, reordering
AccountingDaily sales exported or re-keyed into accounting softwareSessions post sales, VAT and payments to the ledger automatically
Multi-branchOften priced and managed per outletAll branches, prices and loyalty in one database
E-commerceSeparate store with separate stockOdoo website shop or Salla linked to the same stock
ReportingSales reports inside the POSSales, margin, stock and finance reports across the business
Entry costLower, quick to startHigher, because setup and data migration take more work
Best fitOne small outlet with simple needsGrowing chains, restaurants with central kitchens, retailers selling online

Implementation timeline for an Odoo POS rollout

The timeline depends on the number of branches, how clean your product data is and how much of the ERP goes live with the POS. These bands are typical:

ScopeTypical timelineWhat it usually includes
Focused rollout4–8 weeksOne to a few outlets, POS, inventory and accounting, ZATCA onboarding
Mid-size business2–4 monthsSeveral branches, central warehouse, loyalty, purchasing, e-commerce or Salla
Multi-company group4–6+ monthsSeveral legal entities, VAT numbers and brands, inter-company flows, custom reports

A sensible plan runs in this order:

  1. Map how each branch sells, pays and reports today.
  2. Clean the product list, barcodes and prices before import.
  3. Configure the Saudi localization and test ZATCA reporting in simulation.
  4. Install and test hardware in one pilot branch.
  5. Train cashiers and supervisors on sales, refunds and session closing.
  6. Switch to production onboarding and roll out branch by branch.

Our Odoo implementation services in Saudi Arabia follow this approach, and Odoo training covers cashiers and finance teams. For budgets, see the Odoo implementation cost guide for Saudi Arabia; Odoo’s own subscription prices are on the Odoo pricing page. After go-live, Odoo support helps with rejected invoices, new branches and upgrades.

Why work with OzonLayer on Odoo POS

OzonLayer is an official Odoo Silver Partner with three Odoo 18 certified consultants, 11 customer references published on odoo.com and more than 50 clients served. Our office is in Riyadh, with a second office in London and a delivery team in Pakistan. The restaurant and multi-branch retail case studies linked above are related projects from our Saudi work.

If you want a POS that keeps your tills, stock and ZATCA reporting in one place, book a free consultation or call +966 56 434 5818.

Frequently asked questions

Is Odoo POS ZATCA compliant in Saudi Arabia?

Odoo's Saudi localization includes a simplified e-invoicing module for Point of Sale. Once the POS invoices journal is onboarded with ZATCA using an OTP from the Fatoora portal, each receipt is processed as a simplified e-invoice, reported to ZATCA and printed with the Phase 2 QR code. Compliance still depends on correct setup: complete company data, the right taxes, testing in simulation, and a stable internet connection so reporting stays within the 24-hour window.

Do POS receipts have to be reported to ZATCA in real time?

No. Under Phase 2, standard B2B tax invoices must be cleared by ZATCA before they reach the buyer, but simplified invoices issued to consumers can be reported within a maximum of 24 hours. The customer receives the receipt straight away. Odoo reports POS receipts as they are processed when the till is online, which leaves headroom inside the 24-hour limit.

Does Odoo POS work without internet?

Yes. If the connection drops, Odoo POS switches to offline mode and keeps taking orders, storing them in the browser cache. When the connection returns, the orders sync to the server and can then be reported to ZATCA. Keep the browser open until the sync finishes, and avoid long outages, because the 24-hour reporting window keeps running.

Can Odoo POS accept mada and STC Pay?

Saudi customers widely pay with mada cards and wallets such as STC Pay, and Odoo can record these as payment methods. Built-in terminal integrations depend on the provider, so check whether your acquirer is supported. If it is not, a standalone bank terminal works, with the cashier choosing the matching payment method in Odoo so session totals reconcile. A direct terminal link would be a custom integration.

Can Odoo print Arabic receipts?

Yes. Saudi VAT rules require simplified tax invoices to be in Arabic, and they may also include English. In Odoo Point of Sale settings, the Bills and Receipts section has a Gulf Cooperation Council format option that adds Arabic to the receipt. The Phase 2 QR code prints automatically once ZATCA onboarding is complete.

How long does an Odoo POS rollout take in Saudi Arabia?

A focused rollout for one or a few outlets with POS, inventory, accounting and ZATCA onboarding typically takes 4 to 8 weeks. A mid-size business with several branches, loyalty and e-commerce usually needs 2 to 4 months. Multi-company groups with several VAT numbers and brands often take 4 to 6 months or more.

Can one Odoo system run several branches?

Yes. Each branch has its own POS linked to its own warehouse, so sales reduce stock in the right location. Products, pricelists, loyalty points and gift cards are shared across branches, and transfers between branches and a central warehouse are tracked in the same database. Several legal entities can also run in one Odoo database as a multi-company setup.

Can Odoo POS work with my Salla online store?

Yes, through an integration. Salla orders, customers and payment details can be created in Odoo automatically, and stock levels can be sent back to the store where needed. That way the online store and the tills in your branches sell from the same inventory. Retailers can also use Odoo's own website shop instead of Salla.

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.