Skip to main content

Extract data from Peppol e-invoices

Peppol turns an invoice into a message that two accounting systems exchange without a human in between. Instead of emailing a PDF, a supplier hands a structured UBL invoice to its Peppol Access Point, which routes it across the network to the buyer's Access Point using participant identifiers on both ends, the four-corner model that public buyers across Europe now mandate. The payload follows Peppol BIS Billing 3.0, a customisation of the EN 16931 standard, so the same Business Terms travel on every invoice regardless of which system generated it. Reading a Peppol invoice is a matter of the Business Terms and the routing metadata around them. Each field maps to a coded term: the invoice number is BT-1, the specification identifier that declares Peppol conformance is BT-24, the buyer reference that carries a public body's Leitweg-ID is BT-10, and the payment means code follows UNTDID 4461. Sender and receiver appear not only as company names but as electronic addresses, the participant identifiers an Access Point uses to deliver the document. A receiver that also keeps a PDF rendering needs both views to agree. Talonic reads a Peppol invoice, whether from the UBL payload or its PDF rendering, into the Business Term structure a downstream system expects. An invoice from Aachen Data Systems GmbH to a Brandenburg public authority, carrying a Leitweg-ID and a SEPA payment means code, returns its participant identifiers, two service lines, a 19% VAT breakdown, and a gross total of 18,088.00 EUR that reconciles to the amount due for the receiving Access Point.

What gets extracted from Peppol e-invoices

Invoice Number (BT-1)RE-2026-11827
Specification Identifier (BT-24)Peppol BIS Billing 3.0
Buyer Reference (BT-10)04011000-1234512345-06Leitweg-ID
Supplier Participant ID0204:DE290143756
Buyer Participant ID0204:04011000
CurrencyEUR
Payment Means Code58UNTDID 4461, SEPA credit transfer
Line Items2 service lines: name, quantity, net price, VAT rate
Total With VAT18,088.00 EUR

How extraction works for Peppol e-invoices

A Peppol document is structured UBL by design, but it reaches many teams as a PDF rendering, a print export, or a validation report, and the coded Business Terms still have to be recovered. Talonic classifies the invoice and maps every value to its EN 16931 business term in the Field Registry, so BT-1, the BT-24 specification identifier, the BT-10 buyer reference, and the payment means code resolve by meaning rather than by position on the page. Supplier and buyer participant identifiers are captured as electronic addresses alongside their VAT identifiers, the VAT breakdown must sum to the tax total and the payable, and the Leitweg-ID that routes a public-sector invoice is preserved. Confidence and pixel-region provenance for each field follow DIN SPEC 91491, so an interoperability analyst can reconcile the rendered invoice against the message the Access Point delivered.

Sample extraction

A Peppol BIS Billing 3.0 e-invoice to a public authority

{
  "document_number": "RE-2026-11827",
  "document_date": "2026-06-30",
  "invoice_type_code": "380",
  "specification_identifier": "urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:bis3:ubl",
  "currency": "EUR",
  "buyer_reference": "04011000-1234512345-06",
  "supplier": {
    "name": "Aachen Data Systems GmbH",
    "tax_id": "DE290143756",
    "peppol_id": "0204:DE290143756",
    "city": "Aachen",
    "country_code": "DE"
  },
  "buyer": {
    "name": "Ministerium für Digitales Brandenburg",
    "peppol_id": "0204:04011000",
    "city": "Potsdam",
    "country_code": "DE"
  },
  "line_items": [
    {
      "line_id": "1",
      "item_name": "Cloud platform subscription, annual",
      "quantity": 12,
      "quantity_unit_code": "MON",
      "item_net_price": 1200,
      "line_net_amount": 14400,
      "item_vat_category_code": "S",
      "item_vat_rate": 19
    },
    {
      "line_id": "2",
      "item_name": "Onboarding services",
      "quantity": 5,
      "quantity_unit_code": "HUR",
      "item_net_price": 160,
      "line_net_amount": 800,
      "item_vat_category_code": "S",
      "item_vat_rate": 19
    }
  ],
  "subtotal": 15200,
  "total_amount_without_vat": 15200,
  "vat_breakdown": [
    {
      "vat_category_code": "S",
      "vat_category_taxable_amount": 15200,
      "vat_category_rate": 19,
      "vat_category_tax_amount": 2888
    }
  ],
  "tax_amount": 2888,
  "payment_means_code": "58",
  "iban": "DE21370501980001234567",
  "bic": "AACSDE33XXX",
  "total_amount": 18088,
  "amount_due": 18088
}

Frequently asked

Can it read the UBL payload as well as a PDF rendering?

Yes. A Peppol invoice is structured UBL by design, but many teams see it as a PDF rendering or a print export; the extraction recovers the coded Business Terms from either view and checks that the two agree.

How are the participant identifiers captured?

The supplier and buyer electronic addresses, the participant identifiers an Access Point routes on, are captured alongside the VAT identifiers, so the invoice can be matched to the sender and receiver on the network.

Does it keep the Leitweg-ID and specification identifier?

The BT-10 buyer reference that carries a public body Leitweg-ID and the BT-24 specification identifier that declares Peppol BIS Billing 3.0 conformance are both preserved, since a public-sector receiver routes and validates on them.

Is the payment means code recognised?

The payment means code is read against UNTDID 4461, so a SEPA credit transfer (58) is distinguished from a standard credit transfer (30), and the IBAN and BIC are captured for the payable.

Author note

Reviewed by Talonic engineering · last reviewed 2026-07-06