One platform for finance, people, sales, operations, fleet, commerce, and BI.
XOERP
Let's meet

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

  1. Go to XO Books → Tax → Settings.
  2. Enter your VAT registration number and tax period (monthly or quarterly).
  3. Review the default tax codes:
    • Standard 15% — most goods/services
    • Zero-rated 0% — exports, qualifying supplies
    • Exempt — e.g. certain financial services
  4. 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.

  1. Go to Tax → ZATCA integration → Connect.
  2. In the ZATCA Fatoora portal, generate an OTP for a new EGS (e-invoice generation solution).
  3. Paste the OTP into XO and click Onboard. XO requests and stores the cryptographic certificate (CSID).
  4. XO runs the compliance checks (sample standard, simplified, credit, and debit documents).
  5. 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

  1. Enable Withholding tax in Tax → Settings.
  2. Set the applicable rates (e.g. on cross-border services).
  3. 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

  1. Map a Zakat account in your chart of accounts (the Saudi template includes one).
  2. 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

  1. Go to Tax → VAT return for the period.
  2. XO assembles the return from posted transactions: output VAT, input VAT, zero-rated, exempt, and the net payable/refundable.
  3. Run the review checklist — XO flags common issues (missing VAT numbers, mismatched periods, uncleared invoices).
  4. 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.