ZUGFeRD / Factur-X PDF Generator avatar

ZUGFeRD / Factur-X PDF Generator

Pricing

from $10.00 / 1,000 invoice generateds

Go to Apify Store
ZUGFeRD / Factur-X PDF Generator

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

Kamer Ozkan

Maintained by Community

Actor 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:

OptionMeaning
profileen16931 (production v1 profile)
languageen, de or fr for the visible invoice
templatemodern or classic layout
accent_colorBrand color as #RRGGBB
logo_base64Your logo as Base64 (up to 1.5 MB)
document_title, footer_textCustom title and footer line
source_pdf_base64Optional 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.

FieldMeaning
invoiceNumberYour invoice number
conformanceStatusACCEPTED, or the reason it was not
artifactDeliveredtrue when the PDF was stored and charged
artifactKeyKey of the ZUGFeRD / Factur-X PDF in the run's key-value store
evidenceKeyKey of the evidence JSON
evidence.artifactSha256SHA-256 of the PDF
evidence.validation.containerPDF/A part and status, embedded factur-x.xml, AFRelationship, XMP conformance level
evidence.validation.countsFatal, 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

  1. Open the Actor and click Try for free. The example input is a complete invoice between two German companies.
  2. Replace seller, buyer, lines and payment with your data. Keep amounts and quantities as strings.
  3. Pick language, template, colors and logo in extensions.facturx, or pass your own PDF/A invoice in source_pdf_base64. For a credit note use invoice type code 381.
  4. Click Start. Each dataset row shows ACCEPTED or the findings; the PDF and the evidence JSON are in the run's key-value store under the keys given in the row.
  5. 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 ApifyClient
client = 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.