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.