Netherlands 🇳🇱
E-invoicing requirements and best practices for the Netherlands.
Overview​
| Aspect | Details |
|---|---|
| B2G Mandate | Required for central government since 2017 |
| B2B Status | Encouraged, rapidly growing |
| Preferred CIUS | Peppol BIS 3.0 (NLCIUS optional) |
| Primary Scheme | 0106 (KVK) |
| Government Portal | DigiInkoop |
Identifier Schemes​
KVK Number (0106) — Recommended​
The Chamber of Commerce (Kamer van Koophandel) number:
# Format: 8 digits
participant = {
"scheme": "0106",
"identifier": "12345678", # KVK number
"name": "Example BV",
"country": "NL"
}
Validation:
- Exactly 8 digits
- No check digit
- Look up at kvk.nl
OIN (0190) — Government​
Overheidsidentificatienummer for government entities:
# Format: 20 digits
participant = {
"scheme": "0190",
"identifier": "00000001234567890000",
"name": "Rijksoverheid Department",
"country": "NL"
}
When to use:
- Sending to Dutch government (B2G)
- Central and local government entities
Government E-invoicing (B2G)​
DigiInkoop​
All invoices to the Dutch central government go through DigiInkoop:
- Register your KVK on Peppol
- Send to government OIN via Peppol
- Invoice delivered to DigiInkoop
- Processed by the receiving ministry
Required Fields for B2G​
<!-- Buyer reference (required for government) -->
<cbc:BuyerReference>123456789</cbc:BuyerReference>
<!-- Order reference -->
<cac:OrderReference>
<cbc:ID>PO-2024-00123</cbc:ID>
</cac:OrderReference>
<!-- Contract reference (if applicable) -->
<cac:ContractDocumentReference>
<cbc:ID>CONTRACT-2024-001</cbc:ID>
</cac:ContractDocumentReference>
Common Government OINs​
| Entity | OIN |
|---|---|
| Rijksoverheid (general) | Check DigiInkoop |
| Belastingdienst | Look up per department |
Invoice Requirements​
Standard Fields​
<Invoice>
<!-- Dutch company must have KVK -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0106">12345678</cbc:EndpointID>
<!-- VAT number if applicable -->
<cac:PartyTaxScheme>
<cbc:CompanyID>NL123456789B01</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Company BV</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">12345678</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
</Invoice>
VAT Requirements​
Dutch VAT format: NL + 9 digits + B + 2 digits
# Valid Dutch VAT examples
valid_vat = [
"NL123456789B01",
"NL987654321B02"
]
BTW Codes​
| Code | Rate | Description |
|---|---|---|
| S | 21% | Standard rate |
| AA | 9% | Reduced rate |
| Z | 0% | Zero rate (exports) |
| E | 0% | Exempt |
| G | 0% | Intra-community |
Example Invoice​
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>NL-INV-2024-00123</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
<cbc:DueDate>2024-02-15</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<!-- For government invoices -->
<cbc:BuyerReference>PO-12345</cbc:BuyerReference>
<!-- Dutch Seller -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0106">12345678</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Voorbeeld BV</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Kalverstraat 1</cbc:StreetName>
<cbc:CityName>Amsterdam</cbc:CityName>
<cbc:PostalZone>1012AB</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL123456789B01</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Voorbeeld BV</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">12345678</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
<!-- Dutch Buyer -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0106">87654321</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Klant BV</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Damrak 100</cbc:StreetName>
<cbc:CityName>Amsterdam</cbc:CityName>
<cbc:PostalZone>1012LP</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Klant BV</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<!-- Payment with Dutch IBAN -->
<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cac:PayeeFinancialAccount>
<cbc:ID>NL12ABCD3456789012</cbc:ID>
<cbc:Name>Voorbeeld BV</cbc:Name>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">21.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">21.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">121.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="HUR">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Adviesuren</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">10.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>
Validation​
GoRoute validates against Dutch requirements:
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/validate",
headers={"X-API-Key": "your_api_key"},
data=invoice_xml
)
# Dutch-specific checks include:
# - KVK number format validation
# - Dutch VAT number format
# - OIN format for government
# - IBAN format for Dutch banks
B2B Adoption​
While not mandated, B2B e-invoicing is growing rapidly:
- Large enterprises: Most accept Peppol
- SME: Growing adoption via accounting software
- Recommended: Register on Peppol to receive invoices