A build-to-order Frappe/ERPNext app that makes your Saudi invoices ZATCA Fatoorah Phase 2 compliant — TLV QR, cryptographic stamp, UBL 2.1 XML, and live clearance/reporting to the Fatoora platform. ECOSIRE scopes, builds, installs and supports it; it is not an instant download. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $799.00 USD; request a quote for a scoped proposal.

A build-to-order Frappe/ERPNext app that makes your Saudi invoices ZATCA Fatoorah Phase 2 compliant — TLV QR, cryptographic stamp, UBL 2.1 XML, and live clearance/reporting to the Fatoora platform. ECOSIRE scopes, builds, installs and supports it; it is not an instant download.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
Saudi businesses running ERPNext hit a wall the moment they are enrolled in a ZATCA Fatoorah wave. ERPNext core will happily produce a Sales Invoice and a print format, but it has no concept of a ZATCA-compliant TLV QR code, no ECDSA cryptographic stamp, no compliant UBL 2.1 XML, and no way to talk to the Fatoora clearance and reporting endpoints. That gap is not cosmetic — for standard (B2B) invoices, a document that has not been cleared by ZATCA before issuance is not a legal invoice, and simplified (B2C) invoices must be reported within 24 hours. Finance teams end up bridging this with a second portal or a manual middleware, re-keying every invoice and losing the single source of truth ERPNext was supposed to give them.
Automatic compliance on Sales Invoice and POS Invoice `on_submit` via `hooks.py` doc events — no manual trigger required
ZATCA-compliant TLV-encoded, Base64 QR code (tags 1–9: seller name, VAT number, timestamp, invoice total, VAT total, XML hash, ECDSA signature, public key, cert signature)
ECDSA (secp256k1) cryptographic stamp applied server-side using the private key bound to your CSID
Standard (B2B) invoice clearance API integration — invoice is cleared by ZATCA before it is issued to the buyer
Simplified (B2C) invoice reporting API integration with the 24-hour reporting window respected
Compliant UBL 2.1 XML generation and canonicalization matching ZATCA's XSD and business rules
We build a proper Frappe app (installed into your bench, e.g. bench get-app + bench install-app) that keeps the entire compliance flow inside ERPNext. The app ships its own DocTypes — a ZATCA Settings single for CSID/credentials and environment, a per-invoice ZATCA E-Invoice Log that stores the UUID, invoice hash (PIH chaining), signed XML, cleared/reported status and the full ZATCA response, plus a Device Onboarding DocType for CSR generation and CSID lifecycle. Compliance is triggered by hooks.py document events (on_submit, on_cancel) on Sales Invoice and POS Invoice, so nothing depends on a user remembering to click a button: on submit we build the UBL 2.1 XML, canonicalize and hash it, apply the ECDSA cryptographic stamp with the private key tied to your CSID, generate the TLV-encoded Base64 QR (seller name, VAT number, timestamp, totals, VAT amount, hash, signature), then call the clearance API for standard invoices or the reporting API for simplified invoices.
The integration is engineered the way a senior Frappe engineer would want to inherit it. ZATCA calls run through whitelisted server-side methods (@frappe.whitelist()) and are exposed over the Frappe REST API for headless/POS integrations; failures are never swallowed — they land in the E-Invoice Log with the raw ZATCA warning/error codes and are retried by a scheduler_events background job so a transient Fatoora outage does not block your billing. Client Scripts surface QR, stamp and clearance status directly on the Sales Invoice form, and a custom Role Profile (e.g. "ZATCA Officer") plus permission rules control who can onboard devices, re-submit, or view credentials. Everything targets Frappe/ERPNext v15 and is forward-tested against v16, and the compliance certificate/QR is wired into your existing print format so the customer-facing invoice is compliant on day one.
Because this is build-to-order, we start from your actual chart of invoice scenarios — standard vs simplified, credit/debit notes, multi-branch VAT registrations, POS, and any existing customizations — rather than shipping a one-size app. After a short scoping call we confirm the exact scope in writing, then build against your ERPNext version and configuration, deliver on a staging bench for UAT with the ZATCA sandbox, and only go live once compliance is verified. Typical delivery is 2–4 weeks from confirmed scope, and you receive the full source and git repo so you own what you run.
Runs monthly billing in ERPNext and has just received a ZATCA integration deadline. Needs standard invoices cleared before issuance and simplified invoices reported on time, without re-keying into a separate portal or risking penalties.
Owns the bench and existing customizations. Wants a clean, inheritable Frappe app with proper DocTypes, hooks and whitelisted methods on v15/v16 — not a black-box middleware — plus the git repo so the team can maintain it.
Issues high-volume B2C simplified invoices at the till. Needs the compliant QR printed on every receipt and reporting to ZATCA to happen automatically in the background without slowing checkout.
Operates several branches or VAT registrations under one ERPNext instance. Needs per-device onboarding, correct CSID and PIH chaining per branch, and consolidated compliance logging.
Buy the license on ecosire.com and download the ERPNext ZATCA E-Invoicing (KSA) Connector app ZIP from your account dashboard.
Extract the ZIP into your bench's apps folder, or run `bench get-app` with the path to the extracted app.
Run `bench --site SITE_NAME install-app APP_NAME` followed by `bench migrate` to install ERPNext ZATCA E-Invoicing (KSA) Connector and apply its schema.
Open the ECOSIRE License settings on your site and activate your license key. Requires the free ecosire_connect and ecosire_license_client apps.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| ZATCA Phase 2 compliance (clearance + reporting) | Built-in clearance and reporting API integration, verified in UAT | Possible but you build and validate every ZATCA rule yourself | Often present but generic; may lag on latest ZATCA spec changes | |
| Cryptographic stamp, QR & UBL 2.1 XML | ECDSA stamp, TLV QR and compliant UBL 2.1 generated automatically | Hand-implemented crypto and XML canonicalization — high risk | Usually included but tied to that vendor's assumptions | |
| Fit to your invoice scenarios | Scoped to your standard/simplified/credit-note/POS flows | Fully custom but you carry the full build effort | One-size app; you adapt your process to it | |
| ERPNext version support (v15/v16) | Built and UAT-tested against your exact version | Your responsibility to test across versions | Depends on vendor's maintained versions | |
| Source code & ownership | Full source and git repo handed over to you | You own it — because you wrote it | Often closed or license-locked to the vendor | |
| Delivery time | Typically 2–4 weeks from confirmed scope | Months, plus your team's learning curve on ZATCA | Fast to install but slow to adapt and validate | |
| Support when ZATCA changes specs | Post-go-live window + optional maintenance agreement | You track and implement every spec change | Depends on vendor's update cadence and pricing | |
| Failure handling & audit trail | E-Invoice Log with raw ZATCA codes + scheduler retry | Whatever logging you choose to build | Varies; often limited visibility |
No. This is build-to-order. ECOSIRE scopes, builds, installs and supports the connector for your specific ERPNext version and invoice scenarios. It is not a Frappe Cloud Marketplace instant download — that honesty matters because ZATCA compliance depends on your exact configuration.
Typically 2–4 weeks from confirmed scope. After a short scoping call we agree the exact requirements in writing, then build against your ERPNext version, deliver on a staging bench for UAT against the ZATCA sandbox, and go live only once compliance is verified. Complex multi-branch or heavily customized setups may take longer, which we confirm up front.
Yes. The app builds on Phase 1 (QR-coded simplified and standard invoice generation) and implements Phase 2 (Fatoorah): the clearance API for standard B2B invoices, the reporting API for simplified B2C invoices, the ECDSA cryptographic stamp, UUID, compliant UBL 2.1 XML, and PIH invoice-hash chaining.
We target Frappe/ERPNext v15 and forward-test against v16. Tell us your exact version and edition at scoping and we build and UAT against it. The app is a standard Frappe app installed via `bench`, so it lives alongside your existing customizations.
Every engagement includes a post-go-live support window for defect fixes and ZATCA response troubleshooting. ZATCA periodically updates its rules and API; those spec-driven changes are handled under a support/maintenance agreement, which we quote separately so you are not exposed to compliance drift.
You get the full source and the git repository for your version. It is a proper Frappe app with documented DocTypes, `hooks.py` events, whitelisted API methods and scheduler jobs — your team can read, extend and maintain it. Nothing is obfuscated or license-locked to us.
Device onboarding is managed from a dedicated DocType: the app generates the CSR, requests the compliance CSID, and issues the production CSID, storing credentials securely in ZATCA Settings. Multi-device / multi-branch setups get per-device CSID and PIH chaining so each branch keeps a correct invoice counter sequence.
A build-to-order Frappe/ERPNext app that makes your Saudi invoices ZATCA Fatoorah Phase 2 compliant — TLV QR, cryptographic stamp, UBL 2.1 XML, and live clearance/reporting to the Fatoora platform. ECOSIRE scopes, builds, installs and supports it; it is not an instant download.