Factur-X Validator & Generator: ZUGFeRD, EN 16931, FR 2026
Pricing
Pay per event
Factur-X Validator & Generator: ZUGFeRD, EN 16931, FR 2026
Validate Factur-X/ZUGFeRD invoices (XSD, official schematrons, French 2026 BR-FR rules, PDF/A-3), extract them to JSON, generate PDF/A-3 Factur-X with totals and French legal notes, or convert a plain PDF invoice (OCR included). Each check explained. Not an approved platform (PA).
Pricing
Pay per event
Rating
0.0
(0)
Developer
Rigel
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Validate, read and create Factur-X / ZUGFeRD e-invoices for the French 2026 reform (EN 16931 + French BR-FR rules, PDF/A-3), with every check explained, or turn a plain PDF invoice into Factur-X.
What is Factur-X Toolkit?
Factur-X Toolkit is a Factur-X validator, extractor and generator that runs as an API on Apify. It handles Factur-X 1.0x / ZUGFeRD 2.x hybrid invoices (a PDF/A-3 with embedded CII XML), plus CII and UBL XML files. Five modes:
| Mode | What it does | Typical user |
|---|---|---|
validate | checks a PDF or XML, layer by layer, and explains every error | accounts payable, developers testing their output |
extract | turns a Factur-X / CII / UBL invoice into clean JSON (summary + full EN 16931 model) | AP automation, ERP import |
validate-and-extract | both in one pass | invoice inboxes |
generate | builds a PDF/A-3 Factur-X invoice from simple JSON, totals and VAT computed, self-validated | developers, small invoicing tools |
from-pdf | reads a plain PDF invoice (OCR included) and produces a Factur-X when every check passes | firms migrating from PDF invoices |
Validation and generation run inside the Actor with open-source libraries: no third-party invoice API. The only optional external call is AI field-filling in from-pdf, used only if you supply your own API key.
Why use it
- Layered validation, each layer reported separately: XML well-formedness → official XSD → official Factur-X 1.09.2 schematron for the detected profile (MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED, including EN 16931 BR-xx rules) → French 2026 rules (BR-FR) (mandatory notes PMT / PMD / AAB, billing mode BT-23, SIREN, electronic addresses…) → PDF/A-3 container (XMP, AFRelationship, profile) → optional full PDF/A-3 check with veraPDF.
- Two clear verdicts:
valid(EN 16931 / Factur-X conformance) andfrenchCtcReady(also passes the French rules), a one-line French summary (summaryFr), and every rule with id, severity, message and XPath. - Generation that does the boring parts: totals and VAT breakdown computed (rounding consistent with BR-CO rules), French legal notes added (€40 recovery fee, late penalties, discount), billing mode inferred, VAT franchise ("art. 293 B du CGI"), credit notes, foreign currency, intra-EU and export cases. Output: PDF/A-3b with embedded fonts + XML.
- Round trip: the
semanticoutput ofextractcan be edited and fed back intogenerate.
Use cases
- Check supplier invoices received since September 2026 before booking them.
- Test the Factur-X files your software produces against the official schematrons and the BR-FR rules before going live with your plateforme agréée.
- Extract invoice data to JSON (number, dates, parties, totals, VAT, lines, IBAN) for your ERP or accounting tool.
- Generate self-validated Factur-X invoices (EN 16931) from your own app, Make, Zapier or n8n, without maintaining a PDF/A-3 stack.
- Convert legacy PDF invoices into Factur-X, with a review flag when a field is uncertain.
Input examples
Validate a fully fictitious demo invoice (Factur-X EN 16931 generated without the French mandatory notes; runs in one click as the public example task valider-facture-factur-x-2026):
{"mode": "validate","documents": [{ "name": "facturx-demo-fictive-sans-mentions.pdf", "base64": "<the PDF encoded in base64>" }],"frenchCtcRules": true}
Generate an invoice:
{"mode": "generate","invoices": [{"number": "FA-2026-0042", "issueDate": "2026-10-16", "dueDate": "2026-11-15","iban": "FR7630006000011234567890189","seller": { "name": "Exemple Fictif SARL", "address": "1 rue de la Démonstration", "postcode": "75011", "city": "Paris", "siren": "687675066", "vat": "FR13687675066" },"buyer": { "name": "Démo Client SAS", "address": "2 avenue de l'Exemple", "postcode": "69002", "city": "Lyon", "siren": "345253645" },"lines": [{ "name": "Développement", "quantity": 3, "unitPrice": 450, "unit": "DAY", "vatRate": 20 }]}]}
Turn a plain PDF into Factur-X:
{ "mode": "from-pdf", "documents": [{ "url": "https://example.com/facture.pdf" }], "frenchCtcRules": true }
Output examples
Real result of the validate input above (run of 17 October 2026; abridged). The demo invoice is a conformant EN 16931 Factur-X, but it lacks the notes required by the French 2026 rules, so frenchCtcReady is false:
{"mode": "validate","document": "facturx-demo-fictive-sans-mentions.pdf","validation": {"inputType": "pdf","flavor": "factur-x","profile": "en16931","steps": { "wellFormed": true, "xsd": true, "profileSchematron": true, "frenchCtcRules": false, "pdfContainer": true },"pdf": { "pdfaPart": "3", "pdfaConformance": "B", "embeddedFiles": ["factur-x.xml"] },"errorCount": 3,"warningCount": 0,"valid": true,"frenchCtcReady": false,"summaryFr": "Conforme Factur-X profil en16931 ; règles françaises 2026 (BR-FR) : 3 écart(s).","issues": [{"ruleSet": "fr-ctc-2026", "ruleId": "BR-FR-05_BT-22_PMT", "severity": "error", "message": "BR-FR-05/BT-22 : La mention relative aux frais de recouvrement (code PMT) est absente. Elle est obligatoire dans les notes (BG-1)."},{"ruleSet": "fr-ctc-2026", "ruleId": "BR-FR-05_BT-22_PMD", "severity": "error", "message": "BR-FR-05/BT-22 : La mention relative aux pénalités de retard (code PMD) est absente. Elle est obligatoire dans les notes (BG-1)."},{"ruleSet": "fr-ctc-2026", "ruleId": "BR-FR-05_BT-22_AAB", "severity": "error", "message": "BR-FR-05/BT-22 : La mention relative à l’escompte ou à son absence (code AAB) est absente. Elle est obligatoire dans les notes (BG-1)."}]},"charged": true}
Real result of a from-pdf run on a fully fictitious demo invoice (17 October 2026; abridged):
{"mode": "from-pdf","document": "facture-demo-fictive.pdf","textSource": "native","fields": {"invoiceNumber": "DEMO-2026-001", "issueDate": "2026-10-01", "dueDate": "2026-10-31", "currency": "EUR","sellerName": "Exemple Fictif SARL", "sellerSiren": "687675066", "sellerVat": "FR13687675066","buyerName": "Démo Client SAS", "buyerVat": "FR88345253645","totalNet": "500.00", "totalVat": "100.00", "totalGross": "600.00"},"checks": { "totalsConsistent": true, "sirenValid": true, "sellerVatKeyValid": true, "vatMatchesSiren": true },"needsReview": false,"overallConfidence": 0.85,"legalNotesFound": ["PMT", "PMD", "AAB"],"facturx": { "valid": true, "frenchCtcReady": false, "typeCode": "380", "summaryFr": "Conforme Factur-X profil en16931 ; règles françaises 2026 (BR-FR) : 1 écart(s)." },"pdfUrl": "https://api.apify.com/v2/key-value-stores/…/records/facturx-DEMO-2026-001-a1ef2a9e.pdf","charged": true}
Generated PDFs and XMLs are saved in the run's key-value store; the dataset returns their URLs. Anyone who has a URL can download the file.
How much does it cost?
Pay per event, in USD. You pay only for a successful, deduplicated result:
| Event | When | Price |
|---|---|---|
document-validated | XSD + profile schematron + BR-FR + PDF container check | $0.015 |
document-extracted | Factur-X / CII / UBL to JSON | $0.008 |
document-validated-extracted | both in one pass | $0.02 |
invoice-generated | PDF/A-3 Factur-X + XML, charged only when the result is valid (EN 16931) | $0.04 |
pdfa-full-check | veraPDF add-on (fullPdfaCheck); not charged on timeout or empty report | $0.005 |
invoice-from-pdf | from-pdf: a valid Factur-X produced, OCR included | $0.04 |
pdf-read | from-pdf: PDF read and returned for review, no valid Factur-X, OCR included | $0.01 |
apify-actor-start (Apify platform event) | once per run, per GB of memory (default 2 GB = 2 events) | $0.00005 |
Examples: validating 100 received invoices costs $1.50; validating and extracting them costs $2.00; generating 100 invoices costs $4.00.
Free: unreadable files (not a PDF or XML, download error, private URL), invalid generated invoices, and duplicates within a run. invoice-from-pdf and pdf-read are never both charged for the same file. When your spending limit is reached the Actor stops and never charges beyond it (minimum limit: $0.05).
FAQ
What changed for French e-invoicing on 1 September 2026?
Since 1 September 2026, every business established in France and subject to VAT must be able to receive electronic invoices, whatever its size (micro-entrepreneurs included). Large companies and mid-sized companies (ETI) must also issue e-invoices and send e-reporting data from that date. SMEs and micro-businesses must issue them from 1 September 2027. Invoices are exchanged through a plateforme agréée (approved platform), directly or via compatible software connected to one. Sources: economie.gouv.fr – Tout savoir sur la facturation électronique, Service Public Entreprendre – F23208, impots.gouv.fr – Fiche 6 : comment mon entreprise va recevoir les factures.
Is Factur-X an accepted format in the French reform?
Yes. Factur-X is one of the three formats of the common base (socle) with UBL and UN/CEFACT CII, all based on EN 16931. Approved platforms must support them. Sources: impots.gouv.fr – Spécifications externes and the AFNOR XP Z12-012 standard referenced there.
Does this Actor make me compliant with the reform?
No, not on its own. This is a technical conformance tool, not a plateforme agréée and not a transmission channel. To receive and send e-invoices you must choose an approved platform (official list on impots.gouv.fr). The toolkit helps you check, read and produce the files around that.
What is the difference between valid and frenchCtcReady?
valid means the invoice conforms to EN 16931 / Factur-X (XSD + profile schematron, real VAT identifiers, a real invoice profile; MINIMUM is never valid). frenchCtcReady means it also passes the French BR-FR rules. A business-to-consumer invoice can be valid and not frenchCtcReady.
Is ZUGFeRD supported? XRechnung?
ZUGFeRD 2.x is technically the same as Factur-X and is validated with the same schematrons. XRechnung-specific rules are not checked. UBL XML is checked against the XSD only.
Is my invoice data sent anywhere?
Validation, extraction, generation and OCR run inside the Actor. In from-pdf, if you set aiApiKey, the invoice text is sent to the OpenAI-compatible provider you choose, to fill missing or low-confidence fields; you pay that provider. Without a key, nothing is sent.
Can I use it from Python, Make, Zapier or n8n?
Yes, like any Apify Actor: Apify API and Python / JavaScript clients, or the native integrations.
Limitations
- Not a plateforme agréée, not legal or tax advice.
- Schematron validation covers Factur-X / ZUGFeRD 2.x (CII). UBL is checked against the XSD only.
- BR-FR rules evolve with each version of the French specifications. This Actor uses the version bundled with the factur-x 7.7 library; check that it matches the version your platform uses.
- Full PDF/A-3 conformance of a Factur-X built on your own PDF depends on that PDF (fonts, colours); turn on
fullPdfaCheck. veraPDF is limited to 30 seconds. from-pdfreads at most 5 pages with OCR. Uncertain results are flaggedneedsReviewand are not turned into Factur-X unless you force it.- The official FNFE sample
Avoir_FR_type381_BASIC.pdffails the Factur-X 1.09.2 BASIC schematron (ruleFX-SCH-A-000026, old guideline URN). The schematron is not weakened to accept it.
Data sources, standards and licences
| Component | Licence |
|---|---|
| factur-x 7.7 (Akretion): XSD, CII parsing and PDF embedding | BSD-3-Clause |
| Factur-X 1.09.2 XSD and schematrons (FNFE-MPE / FeRD, France_RFE) | Apache-2.0 |
| French BR-FR schematron (FNFE-MPE), unmodified | EUPL 1.4 (per file header) |
| SaxonC-HE 13.1 (XSLT 3.0 engine) | MPL-2.0 |
| veraPDF 1.30 (optional, external process, unmodified) | MPL-2.0 |
| Tesseract OCR + tessdata (fra, deu, eng) | Apache-2.0 |
| pypdf, lxml, reportlab, pdfplumber, httpx | BSD / MIT |
poppler-utils pdftoppm (separate binary, not linked) | GPL-2.0 |
| DejaVu Sans fonts | Bitstream Vera / public domain |
| Test samples: ZUGFeRD/corpus incl. FNFE-MPE examples | Apache-2.0 |
Related Actors
- French SIREN/SIRET Bulk Enricher: check your customers' SIRENs before invoicing (the buyer SIREN is a new mandatory mention).
- French Supplier Check: status and insolvency notices for your suppliers.
En français
Valider, lire et générer des factures Factur-X / ZUGFeRD pour la réforme 2026 (EN 16931 + règles françaises BR-FR, PDF/A-3), ou transformer une facture PDF classique en Factur-X.
- Depuis le 1er septembre 2026, toutes les entreprises assujetties à la TVA établies en France doivent pouvoir recevoir des factures électroniques ; les grandes entreprises et ETI doivent aussi les émettre, les PME et micro-entreprises à partir du 1er septembre 2027 (sources : economie.gouv.fr, service-public F23208, impots.gouv.fr fiche 6).
- Cas d'usage : contrôle des factures fournisseurs reçues, test des fichiers produits par votre logiciel, extraction en JSON pour l'ERP, génération de factures Factur-X, conversion de PDF existants.
- Prix : validation 0,015 $, extraction 0,008 $, les deux 0,02 $, génération 0,04 $, PDF → Factur-X 0,04 $ (0,01 $ si la facture reste à revoir), veraPDF +0,005 $. Fichiers illisibles, factures générées invalides et doublons gratuits.
- Limites : outil de conformité technique, ce n'est pas une plateforme agréée et ce n'est pas un conseil fiscal. Les règles BR-FR sont celles livrées avec factur-x 7.7.
- Licences : factur-x (BSD-3), schématrons Factur-X (Apache-2.0), schématron BR-FR (EUPL), SaxonC-HE et veraPDF (MPL-2.0), Tesseract (Apache-2.0).