Peppol UBL Invoice Generator
Pricing
from $10.00 / 1,000 invoice generateds
Peppol UBL Invoice Generator
Peppol UBL invoice generator for structured JSON inputs. Generate BIS Billing invoice XML and check it against the bundled EN 16931 and Peppol rule profiles before file delivery. Inspect pinned rule versions for your workflow; Peppol network transport is not included.
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
8 days ago
Last modified
Categories
Share
Peppol UBL invoice generator: strict JSON in, a generated and technically validated Peppol BIS Billing 3.0 UBL invoice or credit note XML out.
The Actor calculates totals with decimal arithmetic, generates the UBL XML, runs an independent pinned validation stack (UBL XSD, CEN EN 16931 and Peppol Schematron rules, both the 3.0.20-hotfix rules and the 3.0.21 mandatory-transition rules), 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 and ERP developers who need Peppol BIS Billing 3.0 UBL XML without building and maintaining the EN 16931 mapping and rule checks themselves.
- SaaS and accounting tools that sell to B2B or public-sector customers in Peppol countries (Belgium, Germany, the Netherlands, the Nordics, Australia, Singapore and others) and want a pay-per-invoice generator behind an API.
- Teams that send through a Peppol Access Point and want every document to pass the Peppol rules before it reaches the network.
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
Peppol extension (extensions.peppol). Unknown fields are rejected instead of being silently ignored.
Seller and buyer endpoint identifiers are required. Each document also needs a buyer reference
or purchase-order reference.
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","purchase_order_reference": "PO-2026-1001","seller": {"name": "Example Supplier GmbH", "vat_id": "DE123456789","endpoint_id": "4000001123452", "endpoint_scheme": "0088","address": {"line1": "Musterstrasse 10", "city": "Berlin", "postal_code": "10115", "country_code": "DE"}},"buyer": {"name": "Example Buyer GmbH", "vat_id": "DE987654321","endpoint_id": "4000001987658", "endpoint_scheme": "0088","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": {"peppol": {"business_process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"}}}}
Production v1 capabilities
- Generate UBL Invoice and UBL CreditNote documents.
- Support negative invoices, line and document adjustments, prepayments, rounding, attachments, references, delivery, payment, and multiple VAT groups.
- Validate UBL Schema, CEN EN 16931, active Peppol rules, and the announced mandatory-transition rules in one call. A document is delivered only when both rule sets accept it.
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 UBL XML artifact 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 XML was stored and charged |
artifactKey | Key of the UBL XML in the run's key-value store |
evidenceKey | Key of the evidence JSON |
evidence.artifactSha256 | SHA-256 of the XML |
evidence.ruleArtifactSha256 | SHA-256 of each pinned Schematron and configuration file |
evidence.validation | Engine, scenario, counts per rule set and findings |
Output example (real row from run 4LZnuZ6Rm6EVUVQFi with the example input, shortened):
{"inputIndex": 0,"invoiceNumber": "INV-2026-0001","processingStatus": "SUCCEEDED","conformanceStatus": "ACCEPTED","artifactDelivered": true,"artifactKey": "ARTIFACT-0001-INV-2026-0001.xml","evidenceKey": "EVIDENCE-0001.json","evidence": {"standard": "Peppol BIS Billing","artifactSha256": "549b9477bca91863228dcae79f8698c0e7c7bf8919cfab3fa1a1c68dbb29c2c0","artifactBytes": 4944,"versions": {"generator": "1.0.0", "standard": "3.0.20-hotfix; forward gate 3.0.21"},"validation": {"status": "ACCEPTED","engine": "UBL XSD plus dual Saxon Schematron","counts": {"fatal": 0, "error": 0, "warning": 0, "information": 0},"reports": {"activeRules": {"status": "ACCEPTED", "version": "3.0.20-hotfix"},"transitionRules": {"status": "ACCEPTED", "version": "3.0.21"}},"findings": []},"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 Peppol UBL invoice
- Open the Actor and click Try for free. The example input is a complete Peppol BIS Billing invoice between two German companies.
- Replace seller, buyer, lines and payment with your data. Keep amounts and quantities as strings,
and set each party's Peppol
endpoint_idandendpoint_scheme(for example0088for GLN,0208for a Belgian enterprise number,9930for a German VAT number). - For a credit note use invoice type code
381. - Click Start. Each dataset row shows
ACCEPTEDor the findings; the XML artifact and the evidence JSON are in the run's key-value store under the keys given in the row. - Send the XML through your own Peppol Access Point. 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 XML from the key-value store:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("kamerozkan/peppol-ubl-invoice-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"]:xml = store.get_record(row["artifactKey"])["value"]
curl -X POST "https://api.apify.com/v2/acts/kamerozkan~peppol-ubl-invoice-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 XML to your Access Point integration or document storage.
FAQ
Does it send the invoice over the Peppol network? No. It generates and technically checks the UBL XML; you send it through your own Peppol Access Point or service provider.
Which rule versions are used? Peppol BIS Billing 3.0.20-hotfix active rules plus the 3.0.21 mandatory-transition rules, with CEN EN 16931 and the UBL 2.1 XSD. Every Schematron file is pinned by SHA-256 and the hashes are in each evidence record.
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 only validate or read an existing Peppol XML? Use the separate Peppol BIS preflight validator or the Peppol UBL to JSON parser Actors 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.