ZUGFeRD / Factur-X PDF Generator
Pricing
from $10.00 / 1,000 invoice generateds
ZUGFeRD / Factur-X PDF Generator
Generate a visible Factur-X 1.09 and ZUGFeRD 2.5 EN 16931 PDF/A-3 with pinned XML, container, and PDF/A validation evidence.
Pricing
from $10.00 / 1,000 invoice generateds
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
ZUGFeRD and Factur-X PDF invoice generator: strict JSON in, a generated and technically validated ZUGFeRD 2.5 / Factur-X 1.09 hybrid invoice out (a visible PDF/A-3 with the EN 16931 CII XML embedded).
The Actor calculates totals with decimal arithmetic, renders the visible invoice, embeds the generated XML, runs an independent pinned validation stack (Mustang ZF_250 rules plus veraPDF PDF/A-3 checks), stores only accepted artifacts, and returns a SHA-256 evidence record. A rejected artifact is not delivered and not charged.
Who it is for
- Billing, ERP and accounting developers in Germany and France who must send structured e-invoices (German B2B obligation: receiving since 2025, sending phased in from 2027; French reform from 2026) and want a hybrid PDF that people can read and software can parse.
- SaaS tools that create invoices for small businesses and need a pay-per-invoice ZUGFeRD / Factur-X API instead of maintaining the CII mapping, PDF/A-3 conversion and validators themselves.
- Teams that already have a visible PDF/A invoice and only need the EN 16931 XML embedded and checked.
Input
Use invoice for one document or invoices for a batch of up to 100. Amounts and
quantities must be JSON strings such as "19.00", not floating-point numbers.
The input schema exposes the complete production v1 canonical model and the strict
product extension (extensions.facturx). Unknown fields are rejected instead of being
silently ignored.
Options in extensions.facturx:
| Option | Meaning |
|---|---|
profile | en16931 (production v1 profile) |
language | en, de or fr for the visible invoice |
template | modern or classic layout |
accent_color | Brand color as #RRGGBB |
logo_base64 | Your logo as Base64 (up to 1.5 MB) |
document_title, footer_text | Custom title and footer line |
source_pdf_base64 | Optional existing PDF/A-1 or PDF/A-3 visible invoice; the XML is embedded into it |
Input example (the Actor's prefilled example, shortened):
{"invoice": {"invoice_number": "INV-2026-0001","issue_date": "2026-07-29","due_date": "2026-08-28","currency": "EUR","invoice_type_code": "380","buyer_reference": "BUYER-REF-1001","seller": {"name": "Example Supplier GmbH", "vat_id": "DE123456789","address": {"line1": "Musterstrasse 10", "city": "Berlin", "postal_code": "10115", "country_code": "DE"}},"buyer": {"name": "Example Buyer GmbH", "vat_id": "DE987654321","address": {"line1": "Einkaufsweg 20", "city": "Hamburg", "postal_code": "20095", "country_code": "DE"}},"lines": [{"id": "1", "description": "Consulting services", "quantity": "2", "unit_code": "HUR","unit_price": "500.00", "tax_rate": "19", "tax_category": "S"}],"payment": {"means_code": "30", "reference": "INV-2026-0001", "iban": "DE89370400440532013000"},"extensions": {"facturx": {"profile": "en16931", "language": "de", "template": "modern","accent_color": "#184E77", "footer_text": "Thank you for your business."}}}}
Production v1 capabilities
- Generate Factur-X / ZUGFeRD EN 16931 invoices, credit notes, and corrected invoices.
- Render English, German, or French visible invoices with modern or classic layouts, logo, accent color, title, and footer options.
- Accept an optional existing PDF/A-1 or PDF/A-3 visible document, then embed the generated CII XML.
- Validate the CII rules, the attachment relationship, XMP metadata, and PDF/A-3 conformance.
The production v1 profile is EN 16931. A user-supplied visible document must identify as PDF/A-1 or PDF/A-3 and is container-validated, but visual-to-XML semantic comparison is not performed.
Output
Each dataset row contains the technical assessment, artifact key, evidence key, hash, byte count, generator version, standard version, pinned ruleset, and bounded findings. The PDF and the evidence JSON are private key-value store records.
| Field | Meaning |
|---|---|
invoiceNumber | Your invoice number |
conformanceStatus | ACCEPTED, or the reason it was not |
artifactDelivered | true when the PDF was stored and charged |
artifactKey | Key of the ZUGFeRD / Factur-X PDF in the run's key-value store |
evidenceKey | Key of the evidence JSON |
evidence.artifactSha256 | SHA-256 of the PDF |
evidence.validation.container | PDF/A part and status, embedded factur-x.xml, AFRelationship, XMP conformance level |
evidence.validation.counts | Fatal, error, warning and information counts |
Output example (real row from run wN6uyn2Nr33yAzXs6 with the example input, shortened):
{"inputIndex": 0,"invoiceNumber": "INV-2026-0001","processingStatus": "SUCCEEDED","conformanceStatus": "ACCEPTED","artifactDelivered": true,"artifactKey": "ARTIFACT-0001-INV-2026-0001.pdf","evidenceKey": "EVIDENCE-0001.json","evidence": {"standard": "ZUGFeRD / Factur-X","artifactSha256": "9b7fb215015aa7584c2f42f8166c17b2274b05453634983d1d17915ee38b210e","artifactBytes": 59416,"mediaType": "application/pdf","versions": {"generator": "1.0.0", "standard": "2.5 / 1.09", "ruleset": "Mustang 2.24.0 ZF_250 plus veraPDF 1.30.2"},"validation": {"status": "ACCEPTED","scenario": "ZUGFeRD 2.5 / Factur-X 1.09 EN16931","profile": "ZUGFERD_EN16931","counts": {"fatal": 0, "error": 0, "warning": 0, "information": 0},"container": {"type": "PDF_A_3", "pdfaStatus": "COMPLIANT", "metadataStatus": "CONSISTENT","embeddedFileName": "factur-x.xml", "afRelationship": "Alternative","xmp": {"conformanceLevel": "EN 16931", "pdfaPart": "3", "pdfaConformance": "U"}}},"transmitted": false},"error": null}
How much does it cost?
You pay $0.01 per generated invoice that passed validation and was delivered, plus the Apify
Actor start event of $0.00005 (counted per GB of run memory as Apify defines it, a fraction of a
cent per run). Invoices that end in NEEDS_INPUT or fail generation or validation are not charged.
Worked example: one batch run with 100 invoices costs 100 x $0.01 = $1.00 plus the start event. A single invoice in its own run costs $0.01 plus the start event. Batching up to 100 invoices per run keeps the start fee negligible.
How to generate a ZUGFeRD / Factur-X invoice
- Open the Actor and click Try for free. The example input is a complete invoice between two German companies.
- Replace seller, buyer, lines and payment with your data. Keep amounts and quantities as strings.
- Pick
language,template, colors and logo inextensions.facturx, or pass your own PDF/A invoice insource_pdf_base64. For a credit note use invoice type code381. - Click Start. Each dataset row shows
ACCEPTEDor the findings; the PDF and the evidence JSON are in the run's key-value store under the keys given in the row. - Send the PDF to your customer by email or through your own channel. This Actor does not transmit it.
Integrations and API
Call it from your billing system with the Apify API or the apify-client package and download
the PDF from the key-value store:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("kamerozkan/zugferd-facturx-pdf-generator").call(run_input={"invoices": [invoice_1, invoice_2]})store = client.key_value_store(run["defaultKeyValueStoreId"])for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row["artifactDelivered"]:pdf_bytes = store.get_record(row["artifactKey"])["value"]
curl -X POST "https://api.apify.com/v2/acts/kamerozkan~zugferd-facturx-pdf-generator/runs?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" -d @invoice.json
It also works from Make, n8n, Zapier or any HTTP client, and a webhook on ACTOR.RUN.SUCCEEDED
can push the finished PDF to your mailer or document storage.
FAQ
Is ZUGFeRD 2.5 the same as Factur-X 1.09? Yes, they are the German and French names of the same hybrid format. One generated PDF serves both.
Which validators are used? Mustang 2.24.0 with the ZF_250 rules for the XML and veraPDF 1.30.2 for PDF/A-3. Both are pinned by SHA-256 and the hashes are in each evidence record.
Is it accepted as an e-invoice in Germany? The EN 16931 profile of ZUGFeRD is a structured
e-invoice format under the German rules. Acceptance by a specific recipient is not guaranteed;
ACCEPTED means the artifact passed the pinned technical checks.
I need XRechnung for a public-sector buyer. Use the XRechnung invoice generator from the same author; German public-sector portals often ask for XRechnung.
Why must amounts be strings? To keep exact decimal arithmetic. Floating-point numbers are rejected so totals and VAT never drift by a cent.
What happens if my input is incomplete? The row reports NEEDS_INPUT with the missing or
invalid fields, and nothing is charged for that invoice.
Can I read an existing ZUGFeRD PDF? Use the ZUGFeRD / Factur-X PDF to JSON Actor from the same author.
Is my invoice data public? No. Artifacts and evidence are stored in your run's private key-value store, and the dataset row holds only hashes, keys and findings.
Something is not working? Open an issue on the Issues tab with your run link.
Operational boundary
This Actor generates and validates the document. It does not submit to Peppol,
KSeF, SdI, or a French platform. It does not authenticate to an authority, create
a qualified signature, perform legal archival, assign an official network
identifier, or guarantee recipient or tax-authority acceptance. ACCEPTED means
the generated artifact passed the documented pinned offline technical gate.