Harbor EU E-Invoicing for WooCommerce
Harbor EU E-Invoicing for WooCommerce turns a WooCommerce order into a structured EN 16931 invoice: a UBL 2.1 XML document that carries the seller and buyer identifiers, the VAT breakdown per category and rate, allowances and charges, and the payment details. The XML is generated on your own server and stored with the order, ready to be downloaded or handed to whatever channel you use to deliver it.
Read this before you install: which profile do you need?
The plugin has two profiles, set under WooCommerce > E-Invoicing.
- Peppol BIS Billing 3.0 (the default) is the profile used by the Peppol network. It requires an electronic address for both parties. In practice that means the buyer must supply a valid EU VAT number at checkout. An order without one cannot be issued as a Peppol invoice, and the plugin will say so instead of producing a document that a Peppol access point would reject.
- EN 16931 is the profile to choose if you also sell to consumers, or to business buyers who have no VAT number. It is the European semantic standard without the Peppol-specific rules, and the buyer’s electronic address is optional.
If you sell B2C, choose EN 16931. If you sell B2B into the Peppol network, choose Peppol and collect VAT numbers at checkout.
What the free version does
- Adds a VAT number field and a purchase order reference field to the checkout. Both are registered on the block checkout (WooCommerce 8.9 or later) and on the classic shortcode checkout, and both are optional.
- Adds a Generate button and a Download link to the order screen.
- Produces UBL 2.1 Invoice XML in the Peppol BIS Billing 3.0 or EN 16931 profile.
- Derives the VAT category from the tax WooCommerce actually charged: standard rate, zero rate, exempt, reverse charge for services, intra-community supply of goods, export outside the EU, and not subject to VAT for a seller without a VAT number.
- Issues invoice numbers in an unbroken sequence, resettable yearly or monthly, that never change once assigned.
- Stores every invoice in the database. Downloads are served through WordPress with a capability check and a nonce, so the file is never exposed by a URL.
- Works with High-Performance Order Storage.
Requirements
- WordPress 6.3 or later
- WooCommerce 8.0 or later (8.9 or later for the VAT field on the block checkout)
- PHP 8.0 or later
- A complete seller record: legal name, street, city, postcode, country, contact name, contact phone and contact email. These are mandatory under the German, Italian and Dutch national rules, and the plugin will not issue an invoice without them.
Filters
hein_is_service– whether a line item is a service. By default a virtual or downloadable product is a service, which determines whether a cross-border EU supply is reported as an intra-community supply of goods or as a reverse charge on services. Use this filter for a service that is sold as an ordinary simple product.hein_tax_category– the resolved VAT category for a line, charge or allowance.hein_invoice_data– the complete invoice array before it is serialized.hein_invoice_number– the assigned invoice number.hein_buyer_endpoint– the buyer’s electronic address, when it cannot be derived from a VAT number.hein_manage_capability– the capability required to generate and download an invoice. Defaults toedit_shop_order.hein_item_tax_percent– the VAT rate resolved for a line, when your tax setup is not one WooCommerce reports per line.hein_unit_code– the UN/ECE Rec 20 unit of measure for a line. Defaults toC62(piece).hein_payment_means_code– the UNTDID 4461 payment means code derived from the order’s gateway.hein_rounding_tolerance– how far the document total may differ from the sum of its parts before generation fails. Defaults to 0.05.hein_eu_countries– the list of country codes treated as EU member states.hein_generator_formats– the list of available invoice formats.hein_invoice_filename– the filename used for a downloaded invoice.hein_store_to_filesystem– whether an invoice is also written to the uploads folder.
Not in this plugin: features of the separate paid version
This plugin does UBL 2.1 only, generated manually from the order screen. The following are not capabilities of the plugin you are reading about. They belong to a separate paid product sold at harborplugins.com, and their code is not present in this plugin in any form, enabled or disabled: the XRechnung, ZUGFeRD / Factur-X and FatturaPA formats, automatic generation on order completion, bulk regeneration, Peppol network delivery through the Storecove access point, and VeriFACTU reporting (beta).
If you need any of those, this plugin is not the one to install. If you need UBL 2.1 you need nothing else: what is described under “What the free version does” is the whole plugin, not a trial of it.
Privacy
Invoices are generated and stored on your own server. No order or customer data is sent anywhere by this plugin. VAT numbers are checked offline against the format published for each member state; there is no call to any validation service. See the Privacy Policy section for what the licensing SDK involves.
Privacy Policy
All invoice data is derived from your own WooCommerce orders and stored in your own database. This plugin does not transmit order data, customer data or VAT numbers to any external service.
This plugin uses the Freemius SDK for licensing and updates. On activation you are shown a one-time opt-in screen; if you skip it, no diagnostic data is collected. If you opt in, Freemius collects non-personally-identifiable environment data (site URL, WordPress version, PHP version, plugin version) for update delivery and, where applicable, license validation. See the Freemius privacy policy.
