Peppol e-invoicing from a self-hosted ERP

A practical guide to sending and receiving Peppol BIS Billing 3.0 invoices from self-hosted Odoo or ERPNext, covering the Odoo Peppol proxy dependency, external access point options, participant registration and partner testing.

On this page

Peppol e-invoicing from a self-hosted ERP: why the ERP choice is only half the decision

Odoo and ERPNext can both produce Peppol BIS Billing 3.0 documents, but the network path decides where invoice data travels, which party must be accredited and what evidence you can produce later. A finance or IT leader running either platform on their own infrastructure has three broad routes for exchanging invoices with trading partners: the platform's Peppol proxy, an external access point the company connects to directly, or a service provider that carries the exchange on its behalf. Each route sends invoice content to a different party, so the choice is a data flow and accreditation decision that the ERP selection alone cannot settle.

Self-hosting keeps the database, document storage and approval workflow inside your infrastructure, but a transmitted invoice still leaves that environment through the chosen route. The platform's proxy must therefore be assessed like any other third party: who operates it, where it processes data, how failed transmissions are retried and what logs it returns to you. With Odoo, the Peppol module depends on that proxy, and the edition matters. Odoo Community is open source under LGPL-3.0, while Enterprise source code is not publicly available and requires a subscription. Confirm in writing which edition and plan you need, whether the Peppol capability is included in it, and what it costs to run on your hosting model.

ERPNext is licensed under GPL-3.0 and can run on a bench installation, Docker Compose or Frappe Cloud, and its pricing page states that implementation is available through certified partners. Ask any platform or partner which Peppol connection they support for your country, which versions it applies to and who holds the access point role. The answers differ by platform and release. No single platform fits every scenario, so map your trading partners, countries and document volumes to a route first, then choose the ERP that connects to it cleanly.

Which requirements shape a Peppol build on self-hosted ERP

This table maps the requirements that bear on a Peppol build from Odoo or ERPNext to the source that states each one and to what it means for the implementation. The eCFR rules apply only to covered institutions, so confirm applicability with counsel before treating them as obligations, and use the Peppol specification as the reference for document and identifier content.

RequirementSource to confirmWhat it means for the build
Peppol BIS Billing 3.0 document contentPeppol BIS Billing 3.0 specification (confirm the current version with the Peppol Authority)The ERP must generate UBL or equivalent syntax with mandatory fields, tax categories and codes. Validate outputs against the specification before any trading partner test.
Participant identifiers and network registrationPeppol participant identifier scheme and the Peppol service provider or authority documentation (confirm current rules)Buyer and seller identifiers must be stored as master data in the ERP. Registration in the network depends on the chosen access point, so confirm which identifiers your partners use.
Encryption in transit and at rest16 CFR 314.4, where the company is a covered financial institutionInvoice traffic to the access point should use encrypted channels, and stored invoices, attachments and database backups should be encrypted at rest. Confirm applicability with counsel.
MFA and access control for invoice users16 CFR 314.4, where the company is a covered financial institutionUsers who create, approve or send invoices need multi-factor authentication and role-based permissions in the ERP. Confirm how Odoo or ERPNext login and identity integration will enforce this.
Change management for ERP and connector upgrades16 CFR 314.4 change management requirement, where applicableOdoo and ERPNext upgrades and access point connector updates should follow a documented test and approval process before reaching production, with rollback steps defined.
Logging of authorized user activity16 CFR 314.4 logging requirement, where applicableRecord who created, changed, sent or received each invoice and when. Confirm the log retention period and where logs are stored, since an assessor will ask for them.
Retention of bills receivable and payable17 CFR 240.17a-4(b), for broker-dealersBroker-dealers must preserve records such as bills receivable and payable for not less than three years, the first two in an easily accessible place. Plan storage of sent and received invoices accordingly and confirm applicability with counsel.

Odoo's Peppol module or an external access point: which path fits

Odoo offers a Peppol capability through its own module. Before you rely on it, confirm with Odoo how the module reaches the Peppol network, because the module depends on a proxy service that sits between your database and the network. That proxy dependency determines whose infrastructure carries your invoice payloads and who holds the certificates used for network identity. Odoo's pricing page states that only the Custom plan can be hosted on Odoo.sh or on-premise, and that only Custom includes external API access and custom modules, so a self-hosted Odoo deployment with the module points you to the Custom plan.

  • Certificates: Ask whether Odoo or its proxy holds the Peppol access point certificates, or whether you can bring your own.
  • Payload path: Ask which hosts receive invoice XML, whether the proxy stores it, and for how long.
  • Edition and plan: Confirm the module is available on the Custom plan for your hosting model, and whether it requires Enterprise activation.
  • Support horizon: Check the support window for your Odoo major version, since standard support is documented for three years after a major release.
  • Data residency: Confirm the proxy region and whether it meets your sovereignty requirements.

Ask Odoo for the module's data flow diagram and the terms that cover the proxy in writing before you commit to this path.

Which open-source ERPs fit Peppol invoicing and why

Peppol connectivity depends less on the ERP brand than on which edition, version and connection path you choose. The cards below set out where Odoo Community, Odoo Enterprise and ERPNext each fit, and where an external access point changes the work. Check the Peppol module availability and the support window for your edition before you commit.

Odoo Community as the open core

Odoo Community is the LGPL-3.0 core on which the licensed Enterprise edition is built, so it suits teams that want the source and can carry their own integration work. Confirm with Odoo whether the Peppol module you need is available in the Community edition, because the Peppol capability may depend on Enterprise features. Plan the upgrade path yourself, since the Community edition has no access to Odoo's upgrade service.

Odoo Enterprise for managed Peppol

Odoo Enterprise is the subscription edition with added features and support, and its source is not publicly available. On-premise deployment requires the Custom plan, which is the only plan that can be hosted on-premise or on Odoo.sh, so budget for that tier before you design the setup. Standard support covers the first three years after a major release, including security updates, so the Peppol module's version must stay inside that window.

ERPNext on Frappe 15 or 16

ERPNext is GPL-3.0 and built on the MIT-licensed Frappe Framework, and it can be installed with Docker Compose or the bench tool. Version 15 is supported until the end of 2027 and version 16 until the end of 2029, so choose the version against the e-invoicing timeline you must meet. Server Scripts are disabled by default from version 15, so any custom Peppol mapping logic must be enabled deliberately and tested on your own server.

External access point connector

Connecting the ERP to an external Peppol access point keeps the network, certificates and accreditation with a provider and limits the custom code you maintain inside the ERP. Ask the provider which ERP connectors it supports, how it maps your invoice data to BIS Billing 3.0, and where invoice and receipt data is stored. Confirm the connector version against your ERP version before upgrades, because the connector and the ERP each release on their own schedule.

Partner testing before go-live

A connection that sends a sample invoice is not the same as one that passes trading partner testing. Test with each partner's receiving process, including invalid invoices, rejected documents and receipt handling, before you enable live sending. Record which ERP version, module version and access point version passed each test, so the evidence stays valid after upgrades.

How a Peppol rollout runs from registration to live invoices

This sequence moves a Peppol rollout from a scope decision to live invoices on a self-hosted Odoo or ERPNext system, with a written record at each phase so that the go-live decision rests on evidence rather than assumptions.

  1. Decide scope and access point route

    The client's finance lead, ERP owner and DeployOpen's solution architect agree which document types, directions (outbound, inbound or both), countries and trading partners are in scope. The team also decides whether the Odoo Peppol module with its proxy dependency, a connection to an external access point, or a self-hosted access point is the route. The output is a signed scope document that names the route, the owners and what is excluded, so later changes go through a written change request.

  2. Build the master data and participant list

    The team compiles a master data list covering legal entity names, tax identifiers, company registration numbers, Peppol participant identifiers, buyer and supplier addresses, and tax rates mapped to the ERP. Each trading partner is checked for a registered Peppol identifier and a matching capability in the directory, and gaps are logged. The output is a master data list with an owner and status per record, which becomes the input for every later test. Confirm with the chosen access point which identifier schemes it supports.

  3. Set up a sandbox on a test copy

    DeployOpen configures the test environment in the client's own infrastructure. For Odoo, this means duplicating the production database and neutralizing it so no test message reaches a live partner or external service. For ERPNext, a separate site with its own configuration is used. The Peppol connection is pointed at the test environment of the access point. The output is a documented sandbox with version numbers, configuration keys and a neutralization record, confirmed before any test invoice is generated.

  4. Test invoices with trading partners

    Test invoices in BIS Billing 3.0 format are sent and received with each partner that has agreed to test. For each case, the team checks the XML against the validation rules, the delivery status, the acknowledgement, and how rejected or malformed documents appear in the ERP. Inbound invoices are checked for correct posting to payables. The output is a test evidence log listing scenario, date, result, error handling and sign-off by the partner and the client's finance team. Open failures block cutover.

  5. Cut over with dual running

    The production configuration is applied and live invoices are issued while the previous process stays available as a fallback for a period agreed in the scope document. During dual running, outbound invoices are reconciled against what the ERP recorded and against what partners received. Any discrepancy is logged and resolved before the old path is retired. The output is a cutover record that lists the go-live date, the configuration version, the reconciliation results and the named approver for retiring the fallback.

  6. Hand over with hypercare and archiving

    For an agreed period, the team monitors delivery failures, partner rejections, certificate expiry and changes in the ERP that affect invoice output, and resolves them with the client. Operating runbooks, the access point configuration, and the archive location for transmitted and received documents are handed over. The output is a handover pack with runbooks, a monitoring checklist, and a closure report confirming that open issues have owners. Ask the implementation partner which hypercare terms and retainer options apply in writing.

What auditors and regulators ask to see for Peppol invoices

Which Peppol invoices did we send and receive in a period?

The ERP invoice register is the primary record, and the access point's transmission log confirms what left your systems and what arrived at the buyer's. Auditors usually ask for a complete list for a date range, with the status of each document. Reconcile the two sources by invoice number, Peppol message identifier and date. Confirm with your team:

  • Which system is the book of record for outbound and inbound invoices.
  • Whether the ERP stores the outbound UBL XML and the inbound file exactly as received.
  • How rejected, errored and resent documents appear in the export.
  • Whether the list can be filtered by counterparty and period without manual edits.
What proves a Peppol invoice reached the buyer?

The access point's transmission responses and status messages are the main delivery evidence, stored alongside the invoice they relate to. A message showing the document was delivered to the receiving access point is stronger than an internal log saying the send button was clicked. Store these responses in the archive with the invoice record, not only in the connector's dashboard. Confirm with your access point provider or service provider how long they keep receipts, how you export them in bulk, and what a rejected or pending status looks like in their records. Confirm also how your team handles a missing response within the timeframe your internal procedure sets.

How do we show who changed connector and access point settings?

Configuration changes should be traceable to an approved ticket, a named person and a before and after record. Auditors look for change records for the connector, certificates, endpoint settings and mapping rules, not only for the invoice data. Keep connector configuration in version control where possible, and link each merge or deployment to a ticket in your ticketing system. Confirm with your team who approves changes to Peppol identifiers, certificates and tax mappings, how emergency changes are recorded afterward, and whether the ERP's own audit trail captures changes to master data such as tax IDs and buyer Peppol IDs.

Who accessed invoice data, and when was it logged?

Access evidence comes from the ERP's user activity logs, the identity provider's sign-in records and the access point's administrative logs. Under the FTC Safeguards Rule at 16 CFR 314.4, covered financial institutions must log the activity of authorized users, so the same expectation is a sensible baseline for any company handling financial records. Confirm that multi-factor authentication covers every account that can read or send invoices, that administrator actions are logged separately, that logs are kept in a location the ERP administrators cannot edit, and that you can produce a per-user access report for a stated period.

How fast can we retrieve an archived invoice in its original format?

Retrieval depends on the archive store, the file format kept and how the invoice is indexed. Auditors usually ask for the original structured XML, any rendered PDF and the related receipts, all tied to one invoice number. Test retrieval before an audit rather than during one. Confirm with your team which retention period applies in each country where you invoice, whether the archive is write-once or protected against deletion, how invoices are indexed for search, and whether a test restore has been run on a sample set. Also confirm who holds the decryption keys and who can approve a restore request.

How do we prove penetration tests and vulnerability assessments were done?

Keep dated test reports, scope documents, remediation tickets and retest evidence for every system in the invoicing path, including the ERP, the connector, the access point and the archive. The FTC Safeguards Rule at 16 CFR 314.4 requires covered financial institutions to run annual penetration tests and vulnerability assessments at least every six months unless continuous monitoring is in place. Confirm which systems are in scope, who performed each test, when the last test occurred and whether findings on the invoicing path were closed with evidence. DeployOpen runs security testing for applications, APIs and infrastructure, and the results can be provided as evidence, but the independent assessment of your controls remains with your auditor.

Does DeployOpen issue audit reports for our Peppol setup?

No. DeployOpen plans, implements, hardens and documents self-hosted systems, and prepares the controls and evidence that a compliance assessment will review. Independent auditors and certification bodies issue audit reports, attestations and certifications. Under a fixed-scope engagement, the deliverables should list the evidence each control produces, where it is stored and who owns it, so your auditor can test it. Confirm with your auditor which evidence they will sample, which periods they cover and whether they need access to the access point's records or only to your exports. Ask any implementation partner to state this boundary in writing.

What to ask an implementation partner before handing over ERP invoicing

Start by asking whether the partner has run Peppol test exchanges with real trading partners on the exact ERP version you will run, not only on a demo instance. Ask for the names of the Peppol document types tested (BIS Billing 3.0 invoices and credit notes), the receiving partners involved, and the error cases they reproduced, such as a rejected tax ID or a missing Peppol participant identifier. Ask how they handle Odoo edition and plan prerequisites before the scope is signed. The Peppol module and its proxy dependency depend on the subscription and hosting model, and the Custom plan is the only one that can be hosted on Odoo.sh or on-premise according to Odoo's pricing page. Get written confirmation of which edition, hosting option and modules the quote assumes.

Ask how the partner plans ERP upgrades. On Odoo Online and Odoo.sh, major versions are mandatory every two years, and Odoo's standard support for Odoo 20.0 runs until September 2029. Ask who tests the upgraded database before production, how the Peppol configuration and access point connection are re-validated after each upgrade, and whether the upgrade and the e-invoicing test cycle are priced separately. Ask who holds the Peppol certificates, access point credentials and API keys, where they are stored, and how they are rotated and revoked when a person leaves. The answer should name your own staff as the owner of the legal identity, not the integrator.

Finally, ask how logs and archives are kept. Request the retention period for sent and received invoices, the format of stored documents, and whether the archive can be read without the ERP running. Ask how change requests are scoped and priced when a national mandate changes, and whether a change to a validation rule is a fixed-scope item or a retainer item. Agree in writing on the acceptance tests, the hand-over documentation and the support terms after go-live. Confirm these answers against the mandate and archive rules that apply to you, since the partner cannot decide your legal retention obligations.

Peppol from self-hosted ERP: common questions on cost, time and effort

What drives the cost of setting up Peppol from a self-hosted ERP?

The main drivers are the ERP edition, the route you choose, the number of trading partners, the integration work and the testing effort. Odoo Enterprise and Odoo Community differ in what is included, so the edition decides how much of the Peppol path you build yourself. Connecting to an external access point is a different cost profile from running your own access point and SMP, because the latter adds accreditation, certificates and operations. Each partner you must exchange invoices with adds mapping, validation and test cycles. Ask for a quote that separates one-time work (design, integration, testing) from recurring items (hosting, upgrades, certificate renewal, monitoring, any per-document fees from a provider). DeployOpen does not publish prices; a quote follows from a written scope.

How long does Peppol testing take with trading partners?

Testing time depends mainly on how many trading partners you need to test with and how ready each one is. A partner with a working Peppol setup and clean master data can be tested quickly, while a partner that must fix its own system or identifiers adds waiting time you do not control. Your own ERP readiness, including tax IDs, Peppol participant IDs and invoice mapping, also sets the pace. No fixed duration applies across engagements, so confirm the testing plan, the partner list and the exit criteria in writing before work starts. Ask your implementation partner to show how it tracks partner readiness and failed test documents.

What must our team provide before a Peppol project starts?

You need to provide clean master data for your company and customers, including legal names, tax identifiers and the Peppol participant identifiers you plan to use. You also need access to the ERP environment, the decision owners who can approve mappings and go-live, and a list of test partners who are willing to exchange sample invoices. Your finance and tax team should confirm which document types and tax treatments must be supported, and your security team should confirm how credentials and certificates will be stored. Missing inputs usually cause the most delay, so agree on an owner for each item during scoping.

Can our internal team set up Peppol from a self-hosted ERP alone?

A team with strong ERP administration and integration skills can handle parts of the work, such as master data cleanup and configuration, but Peppol adds network, certificate and validation requirements that most ERP teams have not run before. Connecting to an external access point usually leaves less infrastructure to run, while a self-hosted access point needs accreditation and ongoing operations. Decide which parts you will own, which parts a partner will deliver and how knowledge will transfer. A fixed-scope engagement can cover a defined part of the work with written deliverables, while ongoing support is available as a retainer. Confirm your team's gaps against the scope before deciding.

What recurring work follows a Peppol go-live?

Recurring work includes ERP upgrades, certificate renewal, monitoring of transmissions and validation errors, and updates when mandates or formats change. On Odoo Online and Odoo.sh, major version upgrades are mandatory every two years according to Odoo's upgrade documentation, so your Peppol integration must be retested after each one. Odoo standard support covers the first three years after a major release, and paid extended support is limited, so plan the upgrade path early. ERPNext releases minor versions frequently, so a patch cadence and regression tests are needed. Ask any partner for its upgrade, monitoring and support terms in writing, and confirm who owns certificate renewal and on-call response.

Does the choice of Odoo edition change the Peppol setup effort?

Yes, the edition affects what you can run and how you maintain it. Odoo Community is open source under LGPL-3.0, while Odoo Enterprise adds features, support and an upgrade service that requires an Enterprise subscription for on-premise use. Per Odoo's pricing page, only the Custom plan can be hosted on Odoo.sh or on-premise and includes external API access and custom modules, which matter for integration with an external access point. Confirm which Peppol capabilities your chosen edition and plan provide before you scope the work, because the answer changes both the build and the recurring cost.

How do we check that a Peppol project is on track?

Ask for a written scope with named deliverables, a partner list, test cases for each document type and clear acceptance criteria before go-live. Track progress by counting partners that have completed test exchanges, documents that passed validation and open defects by severity. Your team should also review how transmission errors are logged and who receives alerts. DeployOpen plans, implements, integrates, documents and supports self-hosted platforms in your own infrastructure, and it prepares systems and evidence for compliance assessments without issuing audit reports. Confirm that the reporting you receive matches the decisions you must make.

How DeployOpen scopes a Peppol build as a fixed-scope engagement

A Peppol build for a self-hosted ERP starts with a written scope, and that scope fixes the deliverables and timeline before any work begins. For an Odoo or ERPNext project, the scope document should name each element explicitly: which ERP instance and company records send or receive documents, whether the Odoo Peppol module or an external access point handles transport, which Peppol participant identifiers are registered for each legal entity, which trading partners are in the first test cycle, and what happens to rejected documents. DeployOpen agrees this list with the client in writing, so both sides know what is delivered and what is excluded. Ask the partner to show how changes after kickoff are priced and approved, because mandate timelines and partner onboarding dates often move during a project.

DeployOpen implements, integrates, hardens, backs up and documents the self-hosted platform inside the client's own cloud account, data center or air-gapped network. For this topic, that covers the ERP deployment, the connection to the chosen access point, certificate and credential handling, network paths, backup and restore of the database and generated XML archives, and the runbooks that operations staff will use. DeployOpen prepares the evidence a compliance assessment will look for, such as configuration records, access logs, change records and test results. DeployOpen does not issue audit reports, attestations or certifications. Independent auditors and certification bodies make those determinations, so confirm with your auditor which artifacts they will accept before the first test cycle.

How DeployOpen delivers Peppol e-invoicing for self-hosted ERP

DeployOpen plans, implements, integrates, hardens, documents and supports self-hosted open-source ERP inside the client's own infrastructure. For Peppol e-invoicing, we start with a written scope that names the ERP, the countries, the document formats and the access point arrangement, then build and test the connection with the client's trading partners.

How we scope

  • We confirm which ERP edition or version runs the invoicing workflow, such as Odoo or ERPNext, and which modules are in use.
  • We record the countries, Peppol participant identifiers and BIS Billing 3.0 document types the written scope covers.
  • We agree in writing whether the client connects to an external access point or runs one, and who holds each accreditation and certificate.

How we build

  • We configure the ERP's Peppol module or integrate it with the chosen access point, including master data such as tax IDs and buyer identifiers.
  • We set up validation of outgoing and incoming invoices, error queues and the handling of rejected or duplicate documents.
  • We test sending and receiving with the client's trading partners in a non-production environment before any live traffic is switched on.

How we hand over

  • We deliver documentation of the configuration, integration points, certificate locations and the procedure for onboarding new trading partners.
  • We document the test evidence from partner exchanges, including sample invoices, validation results and resolved error cases.
  • We train the client's finance and IT staff on daily monitoring, error handling and how to apply changes when the ERP or the access point is upgraded.

How we support

  • Engagements are fixed-scope, and scope, deliverables and timelines are agreed in writing before work starts.
  • Ongoing support, upgrades and continuous testing are available as a retainer, so changes to the ERP or the Peppol setup are handled under agreed terms.
  • Before quoting, ask us to confirm which parts of the ERP upgrade path, certificate renewal and access point updates the retainer covers.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.