Odoo E-Invoicing Compliance in Egypt: ETA E-Invoice, E-Receipt and KSA
Odoo e-invoicing compliance for Egypt: what Odoo 19 and 20 cover for ETA e-invoices, why the e-receipt needs a partner, and how it compares with ZATCA.
Most Egypt e-invoicing articles list benefits and never say which Odoo version does what. Our Odoo consulting services start by mapping your Odoo e-invoicing compliance gaps against what the ETA expects.
This guide is for finance managers, IT leads and owners in Egypt, plus groups running Egypt and Saudi entities in one database. For the wider Gulf VAT picture, read our guide to Odoo VAT and GCC compliance in the Middle East.
What does Odoo e-invoicing compliance mean in Egypt and Saudi Arabia?
Odoo e-invoicing compliance means your invoices leave Odoo in the tax authority's format, signed, and are accepted by the authority's portal. In Egypt that portal belongs to the Egyptian Tax Authority (ETA); in Saudi Arabia it is ZATCA's Fatoora platform.
Egypt runs two systems. The e-invoice covers sales to businesses. The e-receipt covers sales to end consumers at the point of sale, and has been rolled out to taxpayers in groups named in ETA decisions.
Saudi Arabia uses one system with two document types. A Tax Invoice is cleared by ZATCA before it reaches the buyer, and a Simplified Tax Invoice for consumers is reported after the sale with a QR code.
For an Egyptian company, compliance has three parts:
- Format: each document is built as a structured JSON file with ETA codes for activity, branch, products and taxes.
- Signature: a qualified electronic signature from a USB token signs each document.
- Submission: documents go to the ETA API, which returns accepted or rejected status per document.
What does the standard Odoo Egypt e-invoice module cover in Odoo 19 and 20?

The standard Egypt localization covers ETA e-invoices for sales invoices, credit notes and debit notes, in both Odoo 19 and Odoo 20. It has been available since Odoo 15.0, and it ships under the LGPL licence, so it is in Community as well as Enterprise.
According to the Odoo 20 Egypt localization documentation, you install two modules: Egypt Accounting (l10n_eg) for the chart of accounts and taxes, and Egyptian E-invoice Integration (l10n_eg_edi_eta) for the ETA link.
| Capability | Odoo 19 | Odoo 20 |
|---|---|---|
| ETA e-invoice, credit and debit notes | Yes, through the EDI framework | Yes, through the Send flow |
| Test environment | Production checkbox on or off | Demo, Pre-production and Production modes |
| Batch sending | Handled by EDI framework jobs | Batches of 10 per API call |
| Cancelling on the ETA portal | EDI cancel with a fixed reason | Cancel wizard with your own reason |
| ETA QR code on the invoice PDF | Yes | Yes, once accepted or in test |
| E-receipt for POS sales | Not included | Not included |
Two details matter in Odoo 20. The new Demo mode lets you simulate sending without calling the ETA, which helps training. In the Odoo 20 source code the invoicing threshold for customer IDs is a system parameter with a default of 150,000.
If you are planning an upgrade, test ETA sending on a copy first. Our Odoo upgrade services include checking that open, rejected and cancelled ETA documents keep their status after the move.
How do you set up Odoo ETA integration step by step?
You set up Odoo ETA integration by registering Odoo on the ETA portal, entering the API credentials in Accounting settings, and coding your branches, customers and products. Follow this order to avoid most rejections.
- Register Odoo on the ETA portal: open View Taxpayer Profile, go to Representatives, click Register ERP and name it Odoo. The portal shows a Client ID and two client secrets.
- Ask for pre-production access: pre-production and production credentials differ, so request both and store them safely.
- Enter credentials: in Accounting, Configuration, Settings, ETA E-Invoicing Settings, add the ETA Client ID and Secret.
- Complete the company: full address including the Building No. field, country and Tax ID.
- Set up branches: create one Sales journal per branch, link a branch contact set as a Company, and fill the ETA Activity Code and ETA Branch ID (use 0 if you have one branch).
- Code products: give each product a GS1 or EGS barcode, or an ETA Item code on the Accounting tab.
- Check taxes: confirm the ETA Code (Egypt) field on each tax matches your registration.
- Fix customer records: set Individual or Company, country, and Tax ID or National ID.
- Set up USB signing: covered in the next section.
- Test: send real-looking invoices to pre-production, then switch credentials and mode to production.
How does ETA USB token signing work with Odoo Online and Odoo.sh?
ETA signing works through a USB token on a Windows PC, connected to your Odoo database by Odoo's Windows virtual IoT. This is the same whether your database runs on Odoo Online, Odoo.sh or your own server.
Each person who signs invoices needs their own USB key, issued by the ETA or Egypt Trust according to Odoo's docs. The key holds the certificate that signs each document.
The Windows virtual IoT is the bridge. Once connected, it shows a Proxy Access Token for Egypt. In Odoo, open Accounting, Configuration, Thumb Drive, enter the ETA USB Pin and token, and click Get certificate.
Practical issues we see:
- One company at a time: Odoo 20 warns you to sign invoices from one company per batch.
- PC availability: if the signer's PC is off, invoices wait. Plan a backup signer and token.
- Middleware errors: a failed signature logs "Cannot connect to the middleware" on the invoice, which usually means the IoT bridge is down.
Does Odoo support the Egypt e-receipt for POS sales?
No, not in the standard Egypt modules: Odoo's Egypt documentation covers ETA e-invoicing only, and the e-receipt for B2C point of sale needs a third-party module or a custom connector. This is the biggest gap for retailers and restaurants.
The ETA has widened the e-receipt mandate in groups. KPMG reports that Decision No. 281/2025 required a further group to issue e-receipts for B2C sales from September 15, 2025, after earlier groups with July 2025 deadlines. Check your own deadline on the ETA list.
Odoo's Apps Store lists ETA e-receipt modules from independent developers. One listing, for example, submits receipts from POS orders, tracks UUIDs and status, and stores a device serial number registered on the ETA portal.
Before you install one, check these points:
- Hosting: Odoo Online is incompatible with Apps Store and custom modules, so an e-receipt module needs Odoo.sh or on-premise.
- Plan: Odoo.sh and on-premise need the Custom plan, listed at US$61.00 per user a month billed yearly on Odoo pricing.
- Offline sales: ask how the module queues receipts when the internet drops.
- Upgrades: confirm the vendor supports your target version before you upgrade.
If you also take card or wallet payments at the till, our guide to Odoo payment gateways in MENA covers Fawry and POS terminals.
Egypt ETA vs Saudi ZATCA in Odoo: how do they compare?
Saudi ZATCA has fuller standard coverage in Odoo than Egypt ETA, because Odoo ships a POS e-invoicing module for ZATCA but none for the ETA e-receipt. Groups with both countries should plan the Egypt POS work separately.
| Factor | Egypt ETA in Odoo | Saudi ZATCA in Odoo |
|---|---|---|
| B2B documents | E-invoice signed and submitted | Tax Invoice cleared before issue |
| B2C documents | E-receipt, not in standard modules | Simplified invoice reported, with QR |
| Main modules | l10n_eg, l10n_eg_edi_eta | l10n_sa, l10n_sa_edi, l10n_sa_edi_pos |
| Signing method | Personal USB token through IoT | Device certificate (CSID) per journal |
| Language | Arabic or English data | Arabic required, bilingual allowed |
| Partner needed for | E-receipt, signing logistics, codes | Onboarding, testing, edge cases |
The Odoo Saudi Arabia localization explains that Phase 2 uses clearance for B2B and reporting for B2C. ZATCA publishes its own rules on the ZATCA e-invoicing portal.
For CSID onboarding, clearance and POS testing in detail, read our Odoo ZATCA Phase 2 guide.
What still needs a partner for Odoo e-invoicing compliance?
The standard modules handle the document format and the API, while a partner usually handles codes, signing logistics, e-receipts and testing. Most failed go-lives trace back to data, not to the module.
Work that typically needs help:
- ETA code mapping: matching hundreds of products to GS1 or EGS codes and each branch to the right activity code.
- E-receipt integration: choosing, testing or building the POS connector, and moving you to Odoo.sh if you are on Odoo Online.
- Multi-branch setup: one journal per branch with correct ETA Branch IDs and contacts.
- Signing process: who holds the tokens, backup signers, and IoT bridge monitoring.
- Custom invoice flows: custom modules that change invoice lines or taxes can break the JSON the ETA expects.
- Groups with KSA entities: running ETA and ZATCA in one multi-company database.
For a country-by-country view of where localizations stop, see our post on Odoo localization gaps.
Why does the ETA reject Odoo invoices, and how do you fix it?
Most ETA rejections come from missing codes, wrong IDs or rounding on discounts, not from a broken module. Check this table before you raise a support ticket.
| Rejection cause | Typical sign | Fix in Odoo |
|---|---|---|
| Product without ETA code | Item code invalid | Add GS1 or EGS barcode, or ETA Item code |
| Branch contact set as Individual | Issuer data invalid | Set branch contact to Company with Tax ID |
| Missing customer ID | Receiver ID required | Add Tax ID, or National ID above the threshold |
| Wrong environment credentials | Authentication fails | Match credentials to the sending mode |
| Tax code mismatch | Tax type invalid | Correct the ETA Code (Egypt) field on the tax |
| Token or IoT offline | Signature not created | Restart the IoT bridge, check the USB Pin |
Foreign currency invoices also need care. Odoo sends the exchange rate on each line when the invoice is not in EGP, so keep your currency rates current before posting.
Odoo e-invoicing compliance by industry
The e-invoicing workload depends on how you sell: B2B distributors mostly need clean codes, while retailers and restaurants also need the e-receipt. The table shows where the effort usually sits.
| Industry | Pain or cost driver | Odoo approach | How iVentureTeam helps |
|---|---|---|---|
| Distribution and wholesale | Large product catalogs to code | Bulk import of GS1 or EGS codes | Build and load the code mapping |
| Manufacturing | Many branches and activity codes | One sales journal per branch | Design branch and journal setup |
| Retail | High POS volume to consumers | Third-party or custom e-receipt link | Vet or build the e-receipt connector |
| Restaurants | Offline tills and fast service | POS with queued receipt submission | Test offline and retry behavior |
| Groups with KSA entities | Two authorities in one database | ETA and ZATCA modules per company | Configure multi-company compliance |
Manufacturers with plants in both countries can read our guide to manufacturing ERP in Saudi Arabia and Egypt.
How much does Odoo e-invoicing compliance cost in Egypt?
ETA e-invoicing is usually one part of a wider Odoo project, so its cost sits inside our published implementation ranges rather than as a separate price. Scope drives the number more than the module does.
Our published Odoo implementation ranges are $3k to $9k for small projects (4 to 8 weeks), $9k to $27k for mid-size (8 to 14 weeks) and $27k to $150k+ for large (12 to 24 weeks). Data migration adds $1.2k to $9k depending on source system and years of history.
Cost drivers specific to Egypt:
- Catalog size: the number of products to code.
- Branches: each branch adds a journal and activity setup.
- E-receipt: buying a module or building a connector, plus POS testing.
- Hosting change: moving from Odoo Online to Odoo.sh if you need Apps Store modules.
For a quick first number, run the Odoo project estimate tool.
How iVentureTeam helps with Odoo e-invoicing compliance

iVentureTeam sets up Egypt ETA and Saudi ZATCA compliance in Odoo, then tests it on pre-production before your first live invoice. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.
- Gap review: your invoice flows, branches and POS checked against ETA requirements through our Odoo consulting services.
- ETA setup: credentials, branch journals, activity codes, product codes and tax codes.
- USB signing: Windows virtual IoT install, token setup and a backup signer plan.
- E-receipt link: we vet third-party modules or build a connector through our Odoo integration services.
- KSA entities: ZATCA Phase 2 onboarding in the same multi-company database.
Odoo e-invoicing compliance case study: Middle East Retail Business
A Middle East retailer needed every Odoo POS receipt to carry Arabic and English, with tax amounts shown clearly. The client is confidential, and the project was not an ETA integration, but it shows the receipt-level work POS compliance needs.
The business ran Odoo 11 Point of Sale, whose stock receipt printed in a single language. Product names, taxable and non-taxable amounts, subtotal and total all had to appear correctly in both scripts, including right-to-left Arabic.
We rebuilt the POS receipt template, localized those fields, and routed printing through a Raspberry Pi to thermal printers. Delivery took 3 weeks, and the cashier workflow did not change.
Every sale now prints one receipt both the customer and the accountant can read. Read the bilingual Arabic POS receipts case study.
The bottom line on Odoo e-invoicing compliance
Odoo handles Egypt ETA e-invoices well in Odoo 19 and 20, but plan the B2C e-receipt, USB signing and code mapping as separate work items. Saudi ZATCA has fuller standard coverage, including POS.
Start with your product codes and branches, test every document type on pre-production, and decide early how POS sales will reach the ETA. That order avoids most rejections and late surprises.
Ready to get your Odoo ETA integration live?

Bring your invoice samples and branch list, and we will map your gaps in one session. Plan your Egypt ETA e-invoice and e-receipt rollout with us, call +91-90235-15208, or email business@iventureteam.com.
Frequently Asked Questions
Does Odoo support Egyptian e-invoicing?
+
Yes. Odoo has supported ETA e-invoicing since Odoo 15.0 through the Egyptian E-invoice Integration module. It signs and sends invoices, credit notes and debit notes to the ETA portal in Odoo 19 and Odoo 20.
Is the Odoo ETA module available in Community?
+
Yes. The l10n_eg_edi_eta module is published under the LGPL licence in Odoo's main code repository, so it works in Community and Enterprise. Signing still needs the Windows virtual IoT and a USB token.
Does Odoo support the Egypt e-receipt?
+
Not in the standard Egypt modules. Odoo's Egypt documentation covers e-invoicing only. For POS e-receipts you need a third-party module from the Apps Store or a custom connector, which needs Odoo.sh or on-premise hosting.
Can I use ETA e-invoicing on Odoo Online?
+
Yes, for e-invoices, because the standard module is available on Odoo Online. A third-party e-receipt module is a different case, since Odoo Online is incompatible with Apps Store and custom modules.
What do I need from the ETA to connect Odoo?
+
You need ETA portal access, a Client ID and client secrets from registering Odoo as your ERP, separate pre-production credentials, and a USB signing token for each person who signs invoices.
What changed for Egypt e-invoicing in Odoo 20?
+
ETA sending moved into the invoice Send flow with Demo, Pre-production and Production modes. Odoo 20 sends invoices in batches of 10 and adds a cancel wizard where you type the cancellation reason.
What codes does the ETA require on invoices?
+
The ETA needs your Tax ID, branch ID, activity type code, product codes in GS1 or EGS format, and tax codes. Odoo fills most of them automatically once branches, products and taxes are set up correctly.
How is Egypt ETA different from Saudi ZATCA in Odoo?
+
Egypt uses personal USB tokens to sign, and has no standard Odoo e-receipt module. Saudi ZATCA uses a device certificate, clears B2B invoices before issue, and Odoo includes a POS module for simplified invoices.
How long does an Odoo ETA setup take?
+
A single-branch company with a clean product list can often be live in a few weeks. Many branches, a large catalog or an e-receipt connector add time, so plan pre-production testing for each document type.
Free e-invoicing and tax readiness check
Getting Odoo ready for e-invoicing?
We check your Odoo version, localization and invoice flows against e-invoicing, then send what to set up, what to test and the effort involved.
Free, with no obligation. A senior consultant replies within 12 business hours.
Free Odoo tools
All tools- Odoo Health CheckVersion, modules, findings and upgrade cost
- Odoo App SelectorWhich apps you need, by industry
- Odoo Project EstimateIndicative cost and timeline in minutes
- Odoo Implementation Cost CalculatorImplementation cost and timeline, in minutes
- Odoo Migration Cost CalculatorVersion jump or legacy ERP, priced in minutes
Continue reading
Odoo KSeF Integration: Poland FA(3) E-Invoicing Setup in Odoo 19/20
Odoo KSeF guide for Poland: who must use KSeF 2.0 and when, FA(3) setup in Odoo 19 and 20, rejection codes, offline24 gaps and connector options compared.
Odoo ERP Implementation in Saudi Arabia: ZATCA, Arabic, Cost, Timeline
Odoo ERP implementation in Saudi Arabia: Odoo 19 vs 20, ZATCA Phase 2 onboarding, Arabic invoices, GOSI and WPS payroll, hosting, cost and timelines.
ZATCA Wave 25 in Odoo: Scope Test, Version Check and Plan to Feb 2027
ZATCA Wave 25 covers VAT revenue above SAR 187,500 with Fatoora integration due 1 Feb 2027. Scope test, Odoo version check, data fixes and a dated plan.
