LedgerdropZATCA

Invoice QR โ†’ spreadsheet

The only machine-readable thing on the page

In Saudi Arabia the XML travels between the seller and ZATCA โ€” what you receive is a PDF. But every invoice must carry the QR code, and inside it are five fields signed off by the seller's own system. Drop a folder of PDFs and read them across.

Drop your files here โ†’

ZATCA Phase 1 & 2TLV in base64Simplified invoicesArabic seller names

01 โ€” What the code actually holds

Five fields, and no invoice number

The QR is base64 around a TLV structure: seller name, VAT registration number, the timestamp, the total including VAT, and the VAT amount. Phase 2 appends a hash, a signature and a public key โ€” which change nothing about those five.

There is no invoice number in it. The specification has no field for one. So that cell comes out empty and marked, with the reason written out โ€” a number invented from the file name would be worse than a blank, because the number is what booking and duplicate-detection run on.

02 โ€” Two ways to read it wrong

The timestamp and the net

The timestamp carries a zone (+03:00). Converted to UTC, an early Riyadh morning lands on the previous day โ€” and at month end that moves the entry into the wrong period. The date is taken as written.

The code gives the total and the VAT, never the net. The net is computed from them. When either is missing, the cell stays empty rather than zero: a zero makes a column of totals look correct when it isn't.

Arabic names come through as Arabic

Seller names in the code are UTF-8, and most of them are Arabic. Read with the wrong encoding they become a row of question marks โ€” which still looks like a value in a spreadsheet, and that is the kind of wrong that survives a review.

What is not done here

ZATCA is never contacted, the signature is not verified and nothing is reported: the PDF is read inside the browser and stays there. This is not an e-invoicing solution provider โ€” it reads what you receive.

If a PDF carries no readable code, the row comes out empty and marked, never invented. There is no OCR here, deliberately: a digit read wrongly still looks like a number.

Trying it

Drop files on the main page โ€” up to 10 invoices per export and 20 a day, free, no account, and the count resets at midnight. Pro lifts both limits for 29 โ‚ฌ once, with no renewal.

Nothing is uploaded

Files are read in the browser. There is no server they could go to, and it takes two minutes to check: open developer tools, the Network tab, and drop an invoice โ€” not one request goes out. Which countries are read.