Tax & ZATCA Compliance
Configure VAT, connect to ZATCA Fatoora for Phase 2 e-invoicing, handle withholding and Zakat, and file accurate VAT returns.
Updated February 28, 2026
Tax keeps you compliant with Saudi regulations end to end: VAT setup, ZATCA Phase 1 & 2 (Fatoora) e-invoicing, withholding tax, Zakat, and a VAT return that’s built from your real transactions — not a spreadsheet. This guide covers the one-time onboarding and the monthly cycle.
Scope: XO supports KSA ZATCA, plus VAT/e-invoicing for UAE, Egypt, and Jordan if you operate across the GCC.
VAT setup
- Go to XO Books → Tax → Settings.
- Enter your VAT registration number and tax period (monthly or quarterly).
- Review the default tax codes:
- Standard 15% — most goods/services
- Zero-rated 0% — exports, qualifying supplies
- Exempt — e.g. certain financial services
- Confirm each product/service carries the right tax code (set in Operations → Products).
Note: tax codes flow from products → invoices → the VAT return. Getting them right here means the return is right automatically.
ZATCA e-invoicing
Phase 1 — Generation (already on)
Every tax invoice XO issues includes the required fields, Arabic content, and a QR code. No extra setup beyond completing your company and customer data.
Phase 2 — Integration with Fatoora
This is a one-time onboarding to clear invoices with ZATCA in real time.
- Go to Tax → ZATCA integration → Connect.
- In the ZATCA Fatoora portal, generate an OTP for a new EGS (e-invoice generation solution).
- Paste the OTP into XO and click Onboard. XO requests and stores the cryptographic certificate (CSID).
- XO runs the compliance checks (sample standard, simplified, credit, and debit documents).
- Once ZATCA confirms, the connection flips to Live — issued invoices are cleared (standard) or reported (simplified) automatically.
📷 Screenshot: the ZATCA integration screen showing “Live — last cleared 2 min ago”.
Troubleshooting onboarding: if onboarding fails, it’s almost always (a) an expired OTP — regenerate it, or (b) incomplete seller data — fill every required field in XO Core → Org.
Withholding tax
- Enable Withholding tax in Tax → Settings.
- Set the applicable rates (e.g. on cross-border services).
- When recording a supplier bill subject to WHT, XO calculates and posts the withheld portion to the WHT payable account and shows the net to pay.
Zakat
- Map a Zakat account in your chart of accounts (the Saudi template includes one).
- Track the Zakat base through the year; XO’s reports give you the figures to support your filing.
Customs & import VAT
For imported goods, record customs fees and import VAT on the purchase so input VAT is captured correctly and recoverable on the return.
File the VAT return
- Go to Tax → VAT return for the period.
- XO assembles the return from posted transactions: output VAT, input VAT, zero-rated, exempt, and the net payable/refundable.
- Run the review checklist — XO flags common issues (missing VAT numbers, mismatched periods, uncleared invoices).
- Export the figures and file in the ZATCA portal; record the payment in XO.
Tip: reconcile the VAT control accounts before filing so the return ties back to the ledger.
Best practices
- Onboard Phase 2 well before your enforcement wave date — don’t wait for the deadline.
- Keep customer VAT numbers complete; standard invoices won’t clear without them.
- Use the return checklist every period; fix flags before filing, not after.
Troubleshooting
- Invoice rejected by ZATCA. Open the invoice — XO shows the rejection reason (e.g. invalid VAT number, schema issue). Correct and re-issue.
- Input VAT looks understated. Check that supplier bills carry valid VAT numbers and the right tax code; non-compliant receipts can’t be recovered.
- Certificate expiring. XO warns ahead of CSID expiry — renew from Tax → ZATCA integration.