Lint Polish KSeF structured invoice XML against the FA(3) schema before you send it: namespace, kodSystemowy, NIP, decimal separators and correction references. Runs entirely in your browser — nothing is uploaded.
Same engine as the VS Code extension, byte for byte.
Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.
VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmMCP server (npx)Docker Hubext install ReadyStack.ksef-fa3-invoice-lint npx @readystack/ksef-fa3-invoice-lint <file> npx @readystack/ksef-fa3-invoice-lint --mcp
Team? One key for every ReadyStack linter, 5 seats, $149 once
Sweeps every invoice XML in the workspace in one run - a whole export batch, not one file - and writes a dated REPORT.md you keep: file, line, rule, found value, wanted value. That written record is your own audit evidence for the 2027-01-01 penalty regime, where a KSeF failure carries up to 100% of
One payment, one licence key for this tool. The key is shown right after payment.
A mid-size KSeF ERP integration project in Poland costs PLN 10,000 to PLN 50,000 and runs 2 to 4 months (ELTE-S, 2026)
Buy the full version — $29· ReadyStack
Real numbers from this tool, line by line.

22 blocking errors in one invoice file — that is what one Polish ERP export returned when we ran it through the FA(3) rules on 2026-09-14, and the developer had no way to see them before the gateway answered.
Since 2026-02-01 the Krajowy System e-Faktur accepts only the FA(3) structure from the largest taxpayers, and since 2026-04-01 it is the standard for every other active VAT payer in Poland. The obligation is old news. What is not is that the sanction-free transitional period ends with this year. From 2027-01-01 a KSeF failure can carry up to 100% of the VAT amount shown on the invoice, or 18.7% of the gross amount on a VAT-exempt one. On 2026-09-14 that leaves 109 days.
The gap that costs money is smaller than the regulation. FA(3) does not live where FA(2) lived. The root element must carry xmlns="http://crd.gov.pl/wzor/2025/06/25/13775/", the form code must read kodSystemowy="FA (3)" with one space before the bracket, wersjaSchemy must read "1-0E", and WariantFormularza must be 3. Almost every published example and almost every generated snippet still carries the 2023 template. The code compiles, the XML is well-formed, and the gateway rejects it.
The extension ships two invoices. clean.xml is a valid FA(3) document: 0 findings. dirty.xml is the same invoice as FA(2)-shaped code emits it: 23 findings, 22 of them blocking, across 16 of the 18 rules.
Six of those lines are the ones nearly every generated file gets wrong:
The fifth is the quietest and the most Polish. A comma is the decimal separator in every Polish interface and every spreadsheet; in the XML it makes the amount unparseable, and one formatter left on the system locale puts it on every line your system produces.
KSeF validates — after the call. You build the session, sign, send, and get back a schema code, not a line number in your file. When you are fixing a batch export, that loop is minutes long and reports one failure at a time.
The lint runs on the text. Open the invoice XML, run KSeF FA(3): Check This File, and every rejectable line is marked in place with the value the schema wants. 18 rules cover the namespace and the KodFormularza attributes, the NIP shape, the ISO 4217 currency code, ISO dates, dot decimals, the P_16 to P_18A flags, correction invoices that never say which invoice they correct, UTF-8, and sample identifiers such as 1234567890 left behind by a generator.
The last rule is a clock: it counts the blocking errors and the days left before penalties resume on 2027-01-01.
Checking one file is free and complete — in the editor, or on the web page, which runs the same engine in the browser. No key, no account, no locked answer.
The licence key opens a different axis: scope. Sweep Workspace runs every invoice XML in the folder in one pass and writes a dated REPORT.md — file, line, rule, found value, wanted value — that you keep. $29 once, one licence key per person or CI seat. A mid-size KSeF ERP integration in Poland costs PLN 10,000 to PLN 50,000.
Not tax advice — verify against the current Ministry of Finance publication.
It reads a Polish structured invoice XML and reports every line the KSeF gateway will reject, with the value the FA(3) schema wants instead. 18 rules cover the namespace, KodFormularza attributes, WariantFormularza, NIP format, currency code, ISO dates, dot decimal separators, the P_16 to P_18A annotation flags and correction references.
Polish VAT-registered sellers and the ERP or billing developers who generate their KSeF XML, in SAP, Microsoft Dynamics, Comarch or an in-house system. It is aimed at the person who has an invoice file open and needs to know why the gateway said no, not at the accountant who only sees the finished document.
Generative models still emit the FA(2) namespace and the FA(2) kodSystemowy, because most published examples predate the 2025/06/25/13775 template. The KSeF gateway does validate, but it answers after the call, with a schema code rather than a line, and each round trip runs through your integration. The lint answers in the editor.
Free and complete for one file: open an invoice XML, run the lint, get every finding with line numbers, in the editor or on the web page, with no key and no account. The licence key opens a different axis, scope: sweeping every invoice XML in the workspace in one run and writing a dated REPORT.md you own and keep.
A mid-size KSeF integration project in Poland runs PLN 10,000 to PLN 50,000 over 2 to 4 months, and most of that budget is spent making the XML pass validation. From 2027-01-01 a KSeF failure can carry up to 100% of the invoice VAT. The lint is $29 once, for one person or one CI seat.
A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. KSeF FA(3) Invoice Lint checks the file you open against 18 rules from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.
One question, answered by the person who built it. Your email only if you want the answer sent.
Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.
For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →