Skip to main content

Create ZUGFeRD Invoice in Make

What this module does

PDF4me — Create a ZUGFeRD invoice generates hybrid e-invoices directly inside your Make scenario. Supply invoice data as CSV, JSON, or XML — the module produces a PDF/A-3 document with a machine-readable ZUGFeRD XML file embedded inside it, or an XML-only output for ERP systems that handle their own rendering. The result aligns with the EN 16931 European e-invoicing standard and is accepted as Factur-X in France and across EU markets. Conformance levels and specification version are configurable to match exactly what your buyer or public-sector recipient requires.

Authenticating Your API Request

Every PDF4me module in Make requires a valid Connection. Create or select one that holds your PDF4me API key so the scenario can call the invoice generation service securely.

Important Facts You Should Not Miss

XmlWithPdf is a PDF/A-3 file, not a regular PDF

The hybrid output is a PDF/A-3 document — the ZUGFeRD XML is embedded as a compliant attachment inside the file. ERP systems extract the XML automatically; humans can still open and read the PDF in any standard viewer. Set Render Invoice on PDF to Yes to have invoice line items drawn visually on the page.

Conformance levels depend on ZUGFeRD version

Version 1.0 supports BASIC, COMFORT, EXTENDED. Version 2+ expands to MINIMUM, BASICWL, BASIC, EN16931, EXTENDED, XRECHNUNG. XRECHNUNG and EN16931 are required for public-sector invoicing in Germany. Always match the version and level to what the buyer system expects.

Input Format controls which data field appears

Selecting XML shows the Invoice XML Data field; JSON shows Invoice JSON Data; CSV shows Invoice CSV Data. Only populate the field that matches your chosen format. When using XML format, the module also exposes a File radio so you can pull the XML from Dropbox directly or map it from a prior module.

Make PDF4me Dev Create a ZUGFeRD invoice module showing Connection, File Name and Document mapped from a prior step, and Input Format set to XML

Start with Connection, then map the base PDF (File Name, Document) and set Input Format (here XML).

Make Create a ZUGFeRD invoice with Input Format XML, File set to Map, Invoice XML Data mapped from a prior module, Output Mode XmlWithPdf, and zugferd Version 1.0

With File = Map, map Invoice XML Data, set Output Mode (XmlWithPdf or XmlOnly), then choose zugferd Version (e.g. 1.0).

Parameters

Required: Connection, Input Format, Output Mode, zugferd Version. The invoice data field (Invoice XML Data, Invoice JSON Data, or Invoice CSV Data) appears dynamically based on your Input Format selection — only the matching field needs to be populated.

Make Create a ZUGFeRD invoice Output Mode XmlWithPdf, zugferd Version 1.0, Conformance Level BASIC, Render Invoice on PDF Yes, and language de

Lower part of the module: Output Mode, zugferd Version, Conformance Level, Render Invoice on PDF, and language (typical XmlWithPdf setup). The table below lists every field in order.

ParameterRequiredWhat it doesExample / Options
ConnectionYesPDF4me API connection used to authenticate invoice generation requests. Click Add and paste your API key if connecting for the first time.Your PDF4me connection
FileConditionalSource of the base PDF where the ZUGFeRD invoice will be embedded (when Output Mode is XmlWithPdf). Radio button with two options: Dropbox - Download a File (pulls directly from a Dropbox account without a prior download step) or Map (supplies the PDF from a prior module — Dropbox, Google Drive, OneDrive, HTTP, etc.). Choose Map for the most flexible workflow. When Map is selected, the two sub-fields below appear.Map
File → File NameConditionalSub-field of File (visible when Map is selected). Filename of the base PDF including the .pdf extension. Map from the prior module's filename output — for example, the File Name field of a Dropbox or Google Drive Download module.1. File Name
File → DocumentConditionalSub-field of File (visible when Map is selected). Binary PDF content where the ZUGFeRD XML will be embedded. Map from the prior module's binary data field — typically the Data field of Dropbox, Google Drive, or OneDrive download modules. Hint shown in module: "PDF file where Zugferd invoice should be added".1. Data
Input FormatYesFormat of the invoice data being supplied. Use XML for existing ZUGFeRD XML; JSON or CSV for structured data. Hint: "Format of the invoice data being supplied. Use XML for existing ZUGFeRD XML, JSON or CSV for structured data."XML sampleJSON sampleCSV sample
Invoice XML DataConditionalThe ZUGFeRD XML invoice content to embed. Appears when Input Format = XML and File = Map. Hint: "Use when inputFormat is XML, please refer to our Create a ZUGFeRD invoice for guidelines." Map from a prior Dropbox download or HTTP module output.XML sample3. Data (mapped)
Invoice JSON DataConditionalStructured invoice data in JSON format. Appears when Input Format = JSON. Map a JSON string from a Google Sheets, Airtable, or HTTP module. See sample JSON below.JSON sample(mapped JSON string)
Invoice CSV DataConditionalInvoice row data in CSV format. Appears when Input Format = CSV. Map a CSV row from an iterator, Google Sheets, or file download module. See sample CSV below.CSV sample(mapped CSV row)
Output ModeYesXmlWithPdf returns a PDF/A-3 file with ZUGFeRD XML embedded inside, the standard hybrid e-invoice. XmlOnly returns only the XML invoice file without a PDF wrapper. Hint: "XmlWithPdf returns a PDF with embedded ZUGFeRD XML. XmlOnly returns only the XML invoice file."XmlWithPdf
zugferd VersionYesZUGFeRD specification version. Set to match what the recipient ERP or buyer system expects. Hint: "ZUGFeRD specification version." Version 1.0 and 2+ have different conformance level sets (see table below).1.0 / 2+
Conformance LevelNoZUGFeRD conformance profile. Available levels differ by version; see the Conformance Level Reference table below. Hint: "ZUGFeRD conformance level." Defaults to BASIC if not specified.BASIC
Render Invoice on PDFNoWhen set to Yes, invoice line items are drawn visually on the PDF pages. Applies only when Output Mode is XmlWithPdf. Options: Yes, No, Empty. Hint: "Render invoice data visually on PDF pages. Applies only when outputMode is XmlWithPdf."Yes
languageNoTwo-letter locale code for invoice label localisation. Supported: de, en, fr, it, es, nl, pl, pt, cs. Hint: "Language code for invoice localisation (e.g. de, en, fr, it, es, nl, pl, pt, cs). Defaults to de if not specified."de

Conformance Level Reference

The available conformance levels differ by zugferd Version. Always match the level to what your buyer or ERP system requires.

Version 1.0
LevelUse when
BASICMandatory EN 16931 fields only. Widest compatibility, safe default.
COMFORTAdds optional fields for line-item detail and additional references.
EXTENDEDFull field set for complex B2B invoices with delivery, allowances, and charges.
Version 2+ (Factur-X)
LevelUse when
MINIMUMAbsolute minimum fields. Buyer reference and totals only.
BASICWLBASIC without line items. Header-level data only.
BASICMandatory EN 16931 fields. Recommended starting point.
EN16931Full EN 16931 compliance for cross-border and public sector.
EXTENDEDFull field set including German-specific extensions.
XRECHNUNGGerman public-sector e-invoice mandate (XRechnung profile).

Sample Invoice Files

Use these sample files to test the module with each input format before connecting your live data source. Each file represents the same invoice in a different format so you can compare the structure.

CSV Column Reference

The CSV input must follow this exact column order. Each row produces one invoice.

ColumnDescriptionExample
InvoiceIdUnique invoice identifierINV-2025-001
IssueDateInvoice issue date (YYYY-MM-DD)2025-01-15
SellerNameSeller company nameTest Company
SellerStreetSeller street address123 Main St
SellerCitySeller cityTest City
SellerPostalCodeSeller postal / ZIP code12345
SellerCountryISO 3166-1 alpha-2 country codeDE
SellerVatIdSeller VAT registration numberDE123456789
BuyerNameBuyer company or person nameCustomer Inc
BuyerStreetBuyer street address456 Oak Ave
BuyerCityBuyer cityCustomer City
BuyerPostalCodeBuyer postal / ZIP code67890
BuyerCountryISO 3166-1 alpha-2 country codeDE
ProductNameLine item product or service nameTest Product
QuantityQuantity of the line item10.0
UnitPriceNet unit price9.90
TaxPercentVAT / tax percentage19.0
CurrencyISO 4217 currency codeEUR
PaymentReferencePayment reference stringPAY-REF-001
IBANPayee IBAN for bank transferDE08700901001234567890
BICPayee bank BIC / SWIFT codeGENODEF1M04

JSON Invoice Structure

When using Input Format: JSON, the payload must include the following top-level keys. All nested objects and arrays follow the structure shown in the sample file.

KeyTypeDescription
InvoiceIdStringUnique invoice number, e.g. "471102"
IssueDateString (ISO 8601)Invoice date, e.g. "2013-03-05T00:00:00"
InvoiceTypeStringDocument type label, e.g. "RECHNUNG"
TypeCodeStringUN/EDIFACT document type code — 380 for standard invoice
IsTestBooleantrue for test runs, false / omit for production
NotesArray of stringsFree-text notes shown in the invoice header (payment terms, GLN, etc.)
SellerObjectSeller party: Name, Address (Street, City, PostalCode, Country), TaxId, VatId, GLN
BuyerObjectBuyer party: Name, Address (Street, City, PostalCode, Country, LineTwo), GLN
PaymentObjectPayment details: PaymentReference, Currency, IBAN, BIC
DeliveryDateString (ISO 8601)Actual delivery date, e.g. "2013-03-05T00:00:00"
LineItemsArray of objectsInvoice lines — each with Quantity, UnitCode, UnitPrice, LineTotal, ProductName, GTIN, SellerProductId
TotalsObjectMonetary totals: LineTotal, ChargeTotal, AllowanceTotal, TaxBasisTotal, TaxTotal, GrandTotal, TaxPercent, Currency

Quick Setup

  1. Add PDF4meCreate a ZUGFeRD invoice to your scenario.
  2. Select Connection (or click Add to create one with your API key).
  3. Choose Input Format — XML, JSON, or CSV. The data field that appears depends on this selection.
  4. Set File to Map and connect the invoice data field (Invoice XML Data / JSON Data / CSV Data) from the prior module output. Or choose Dropbox - Download a File to pull the file directly from Dropbox.
  5. Set Output Mode to XmlWithPdf for a hybrid PDF/A-3 invoice, or XmlOnly for XML only.
  6. Set zugferd Version (1.0 or 2+) then pick Conformance Level from the version-appropriate set — start with BASIC.
  7. If using XmlWithPdf: set Render Invoice on PDF to Yes to draw line items visually, and set language to your target locale (e.g. de, en, fr).
  8. Save and click Run once. Route the Document Data output to Dropbox, Google Drive, an ERP webhook, or an email module.

Output Fields

FieldTypeWhat it contains
Document NameStringFilename of the generated invoice file — e.g. invoice-471102.pdf or invoice-471102.xml.
Document DataBufferBinary content of the ZUGFeRD hybrid PDF/A-3 or XML file. Map into an upload, email attachment, or ERP HTTP module for the next step in your scenario.

Workflow Examples

Workflow ExamplesCommon Make scenario patterns using Create ZUGFeRD Invoice for automated e-invoicing.
Generate hybrid invoices from order data (JSON)
  1. An order is marked as shipped in your ERP or Airtable — the scenario triggers.
  2. Line items, pricing, buyer address, and tax data are fetched and assembled into a JSON payload.
  3. Create ZUGFeRD invoice runs with Input Format JSON, Output Mode XmlWithPdf, version 2+, Conformance Level BASIC, language de.
  4. The hybrid PDF is emailed to the buyer via Gmail and a copy uploaded to the invoices archive in Google Drive.
Batch invoices from a monthly CSV export
  1. Accounting drops a CSV file of monthly invoices into Dropbox.
  2. A Watch Files trigger detects the new file and an Iterator processes each row.
  3. Create ZUGFeRD invoice runs per row with Input Format CSV, generating one hybrid PDF per invoice.
  4. All PDFs are uploaded to a structured archive folder and a completion summary email is sent to the finance team.
XRECHNUNG XML for German public-sector invoicing
  1. A government contract invoice is triggered from an Airtable record.
  2. Create ZUGFeRD invoice runs with Input Format JSON, Output Mode XmlOnly, version 2+, Conformance Level XRECHNUNG.
  3. The XML file is POST-ed directly to the buyer's Peppol-compatible ERP API via an HTTP module.
  4. A success or error response is logged to a Google Sheet for the finance team to review.

Frequently Asked Questions

What is ZUGFeRD and why does it use a PDF?+
ZUGFeRD is a German and EU e-invoicing standard that combines a visually readable PDF/A-3 document with a machine-readable XML file embedded inside it. Humans can open the PDF in any viewer; ERP and accounting systems extract the XML automatically for processing — no manual data entry needed. The same format is called Factur-X in France and other EU markets, and both align to the EN 16931 European e-invoicing standard.
What is the difference between XmlWithPdf and XmlOnly output mode?+
XmlWithPdf produces a PDF/A-3 hybrid document with ZUGFeRD XML embedded as an attachment — this is the standard e-invoice format readable by both humans and ERPs. XmlOnly returns just the XML invoice file without any PDF wrapper, useful when the receiving system only needs the structured data and generates its own document view. Use XmlOnly with the XRECHNUNG conformance level for German public-sector submissions that require pure XML delivery.
Which Conformance Level and ZUGFeRD Version should I use?+
The available conformance levels depend on which zugferd Version you select. Version 1.0 supports BASIC, COMFORT, and EXTENDED. Version 2+ adds MINIMUM, BASICWL, EN16931, EXTENDED, and XRECHNUNG. Start with BASIC for the broadest buyer compatibility — it covers all mandatory EN 16931 fields. Move to EN16931 for cross-border EU compliance, or XRECHNUNG when submitting invoices to German federal and state government buyers who are legally required to accept the XRechnung profile.
Is ZUGFeRD the same as Factur-X?+
They are the same technical format under different names. ZUGFeRD is the German designation; Factur-X is the French equivalent. Both align to EN 16931 and are cross-compatible — a ZUGFeRD 2.x invoice is accepted by systems expecting Factur-X and vice versa. Version 1.0 is a German-only older specification; version 2.x is the aligned EU standard.
Can I only supply one input format per scenario run?+
Yes. Selecting XML shows the Invoice XML Data field, selecting JSON shows Invoice JSON Data, and selecting CSV shows Invoice CSV Data. Only fill in the field matching your chosen format in a given run — do not populate multiple data fields in the same execution. If you need to process different formats, split them into separate scenario branches with a Router module that filters by source type.
What does the Render Invoice on PDF option do?+
When Render Invoice on PDF is set to Yes, the module draws the invoice line items, totals, seller/buyer details, and payment information visually on the PDF pages. When set to No, the output is a PDF/A-3 container with the ZUGFeRD XML embedded but minimal or no visual rendering on the page — the PDF may appear nearly blank to a human reader. This option only applies when Output Mode is XmlWithPdf; it has no effect when using XmlOnly.

Same Task on Other Platforms

Get Help