ICP Declaration
The Opgaaf Intracommunautaire Prestaties (ICP, or "ICP declaration") is the quarterly summary of supplies you've made to VAT-registered businesses in other EU countries. Every NL company that delivers intra-community is required to file it — separately from the BTW return, but the two must reconcile.
What's reportable
A line lands in your ICP declaration when all of these are true:
- The Customer has a Tax Category that matches one of the ICP triggers
configured in EU Intracommunity Settings (default:
EU-B2B). - The Customer's Country is an EU member state (other than yours).
- The Customer has a valid EU VAT number on their
tax_idfield. - The Sales Invoice (or credit note) has a posting date inside the declared period.
ICP splits supplies into:
- Rubriek 3a — Goods (intracommunautaire leveringen van goederen)
- Rubriek 3b — Services (intracommunautaire diensten)
- Rubriek 3a + 3b combined for ABC-triangulation transactions where you act as the middle party.
The split is driven by the Item Group of each invoice line — Items in a
group whose is_stock_item is checked count as goods; others count as
services. ABC triangulation requires explicit marking on the Sales
Invoice.
Creating a declaration
Search ICP Declaration in the awesomebar → New.
- Company — pick the company filing.
- From Date / To Date — typically a calendar quarter (2026-01-01 to 2026-03-31 for Q1 2026).
- Save. The app walks every Sales Invoice in the period, filters to those matching the ICP triggers, and produces a per-customer summary plus a per-invoice drill-down.
The form lists:
- Customer (party name)
- Customer VAT number (their tax_id)
- Country (their country)
- Total Supplies (sum of net amounts for the period)
- Rubriek (3a goods, 3b services, or both for ABC)
Reconciliation against the BTW return
This is the critical check: the ICP total must equal BTW return Box 3b for the same period. If they don't, the Belastingdienst will spot it and ask questions.
The app doesn't automatically reconcile — that's a deliberate choice; if there's a discrepancy you want to investigate it manually rather than let the system paper over it. Run both reports side-by-side and the totals should match to the cent. If they don't, common causes:
- A Sales Invoice posted in the period but with a Customer whose Tax Category was changed after the BTW return was generated.
- A credit note for a previous period being included in this period.
- ABC-triangulation rows counted differently in BTW (Box 3b) vs ICP (3a + 3b).
Refreshing data
Late-arriving invoices are the rule, not the exception. After creating the declaration, the form's menu has Refresh Declaration Data which re-walks the source invoices and updates the totals.
Filing
Submission is done outside this module — print the ICP Declaration Official print format, log into Mijn Belastingdienst Zakelijk, type the per-customer values into the official form, submit.
Direct electronic filing via Digipoort isn't supported yet — on the roadmap.
Reports for audit
Two reports back the declaration:
- ICP Declaration Summary — by customer, the official filing layout. Print and use as input to the Belastingdienst form.
- ICP Declaration Details — transaction-level drill-down. Use this to investigate any unexpected total or to answer questions from your accountant.