Kaffa

ZATCA QR code generator (phase 1)

Type the invoice details and get the QR code for a Saudi simplified tax invoice: the five phase 1 (generation) fields as TLV, encoded in Base64.

Builds a code with the five phase 1 fields only. It does not make your system phase 2 compliant and is not affiliated with ZATCA.

Invoice details

Arabic names work: lengths are counted in bytes.

15 digits, starting and ending with 3.

Everything runs in your browser; no field is sent to a server.

Your code

Fill in the details and press "Generate QR code"

Need to read an existing code? Use the QR invoice reader (Arabic page).

What's inside a phase 1 QR code?

Each field is written as TLV: a tag number, the value's length in bytes, then the value. The five fields are joined, encoded in Base64, and the QR is drawn from that text.

TagFieldExample
1Seller namePalm Trading Est.
2Seller VAT number310122393500003
3Invoice date and time2026-11-01T09:30:00Z
4Total incl. VAT115.00
5VAT amount15.00

Watch the Arabic name length

TLV lengths count bytes, not letters. An Arabic letter takes 2 bytes in UTF-8, so a 10-letter name is about 20 bytes. Getting this wrong is a common cause of codes that won't scan.

Sources

  • ZATCA: e-invoicing technical requirements (phase 1 QR). [exact page link at publish]

Last reviewed: November 2026. For general information, not tax advice.

Print the QR on every invoice automatically

Kaffa prints simplified tax invoices with their QR code on thermal or A4 printers, and works offline.

Coming soon onGoogle Play

Frequently asked questions

What does a phase 1 ZATCA QR code contain?

Five TLV fields encoded in Base64: seller name, seller VAT number, invoice date and time, invoice total incl. VAT, and VAT amount.

Does this QR code make my invoices compliant?

No. The tool only builds a QR code from the data you type. Compliance depends on your whole invoicing system, and this tool is not affiliated with ZATCA.

Does it work for phase 2 (integration)?

No. Phase 2 needs more fields, a cryptographic stamp and integration with the ZATCA platform. This tool doesn't produce those.

Is my data sent anywhere?

No. The code is generated in your browser.

Get it on Android