Use this skill with your AI agent
Paste this skill into your AI agent's context, or save the file to your project. Works with any AI agent that reads markdown.
| 1 | --- |
| 2 | name: nl-payroll-tax |
| 3 | description: > |
| 4 | Use this skill whenever asked about Dutch payroll taxes (loonheffingen) or the work cost scheme (werkkostenregeling / WKR). Trigger on phrases like "loonheffingen", "payroll tax Netherlands", "werkkostenregeling", "WKR", "loonbelasting", "premies volksverzekeringen", "premies werknemersverzekeringen", "wage tax NL", "eindheffing", "vrije ruimte", "salary administration", "loonadministratie", "werkgeverslasten", "employer costs NL", "payroll period filing", "loonstrook", "jaarloonopgave", "UWV premies", "WAO/WIA", "ZW premie", "AWf premie", "Whk premie", or any question about Dutch employer withholding, social contributions, or employee benefit taxation. Also trigger when reviewing payroll runs, computing employer costs, or advising on WKR allocation. ALWAYS read this skill before touching any Dutch payroll tax work. |
| 5 | version: 1.0 |
| 6 | jurisdiction: NL |
| 7 | tax_year: 2025 |
| 8 | category: international |
| 9 | depends_on: |
| 10 | - income-tax-workflow-base |
| 11 | --- |
| 12 | |
| 13 | # Netherlands Payroll Tax — Loonheffingen & Werkkostenregeling (WKR) v1.0 |
| 14 | |
| 15 | > **Based on work by [John in 't Hout (@johnhout)](https://github.com/johnhout/knowledge-work-belastingzaken)**, licensed under MIT. Adapted for the OpenAccountants format. |
| 16 | |
| 17 | --- |
| 18 | |
| 19 | ## Section 1 — Quick Reference |
| 20 | |
| 21 | | Field | Value | |
| 22 | |---|---| |
| 23 | | Country | Netherlands (Koninkrijk der Nederlanden) | |
| 24 | | Tax | Loonheffingen (wage tax + social insurance contributions) | |
| 25 | | Currency | EUR only | |
| 26 | | Period | Per pay period (month/4-week); annual reconciliation (loonaangifte) | |
| 27 | | Primary legislation | Wet op de loonbelasting 1964 (Wet LB); Wet financiering sociale verzekeringen (Wfsv) | |
| 28 | | WKR legislation | Articles 31, 31a Wet LB 1964 | |
| 29 | | Tax authority | Belastingdienst | |
| 30 | | Filing portal | Loonaangifte via payroll software or Mijn Belastingdienst | |
| 31 | | Contributor | Open Accountants Community | |
| 32 | | Validated by | Pending — requires sign-off by a qualified Dutch belastingadviseur or salarisadministrateur | |
| 33 | | Skill version | 1.0 | |
| 34 | |
| 35 | ### Components of Loonheffingen [T1] |
| 36 | |
| 37 | | Component | Paid by | Rate/Notes | |
| 38 | |---|---|---| |
| 39 | | Loonbelasting (wage tax) | Employee (withheld by employer) | Progressive rates aligned with Box 1 IB | |
| 40 | | Premie volksverzekeringen (AOW/Anw/Wlz) | Employee (withheld by employer) | Combined ~27.65% on first bracket | |
| 41 | | Premie werknemersverzekeringen (WW/WIA/ZW) | Employer | Various rates; see table below | |
| 42 | | Inkomensafhankelijke bijdrage Zvw | Employer | 6.57% (2025) | |
| 43 | |
| 44 | ### Volksverzekeringen Rates 2025 [T1] |
| 45 | |
| 46 | | Premium | Rate | Max income (EUR) | |
| 47 | |---|---|---| |
| 48 | | AOW (state pension) | 17.90% | EUR 38,441 | |
| 49 | | Anw (survivors) | 0.10% | EUR 38,441 | |
| 50 | | Wlz (long-term care) | 9.65% | EUR 38,441 | |
| 51 | | **Total** | **27.65%** | **EUR 38,441** | |
| 52 | |
| 53 | These are withheld from the employee's gross salary (combined with wage tax in bracket 1 rate of 35.82%). |
| 54 | |
| 55 | ### Werknemersverzekeringen (Employer Contributions) 2025 [T1] |
| 56 | |
| 57 | | Premium | Rate | Max salary base (EUR) | Notes | |
| 58 | |---|---|---|---| |
| 59 | | AWf (unemployment — general) | 2.64% (fixed) / 7.64% (flex) | EUR 66,956 | Fixed contract = lower rate | |
| 60 | | Whk (disability — differentiated) | Sector-dependent (avg ~1.5%) | EUR 66,956 | Based on sector and claims history | |
| 61 | | Aof (disability — basic) | 6.18% (large) / 5.82% (small employer) | EUR 66,956 | Small = < 25× avg premium base | |
| 62 | | **Zvw (health insurance)** | **6.57%** | **EUR 66,956** | Employer-paid (not withheld from employee) | |
| 63 | |
| 64 | ### AWf Premium — Contract Type Distinction [T1] |
| 65 | |
| 66 | | Contract type | AWf rate 2025 | |
| 67 | |---|---| |
| 68 | | Permanent contract (vast contract, schriftelijk) | 2.64% | |
| 69 | | Flexible contract (bepaalde tijd, oproep, uitzend) | 7.64% | |
| 70 | |
| 71 | **Conditions for low rate:** |
| 72 | - Written permanent contract (schriftelijke arbeidsovereenkomst voor onbepaalde tijd) |
| 73 | - Not an on-call contract (geen oproepovereenkomst) |
| 74 | - Employee works ≥ contracted hours (no excessive overtime correction needed) |
| 75 | |
| 76 | ### Wage Tax Tables 2025 [T1] |
| 77 | |
| 78 | The loonbelasting/premie volksverzekeringen are computed using Belastingdienst-provided tax tables: |
| 79 | |
| 80 | | Table type | Application | |
| 81 | |---|---| |
| 82 | | White table (witte tabel) | Standard employment | |
| 83 | | Green table (groene tabel) | One-off payments, holiday allowance, bonuses | |
| 84 | | Anonymous table | No BSN or ID provided — 52% flat rate | |
| 85 | | Table for DGA | DGA monthly minimum salary | |
| 86 | |
| 87 | --- |
| 88 | |
| 89 | ## Section 2 — Werkkostenregeling (WKR) — Work Cost Scheme |
| 90 | |
| 91 | ### Concept [T1] |
| 92 | |
| 93 | The WKR allows employers to provide tax-free benefits to employees within a "free space" (vrije ruimte) budget. Benefits exceeding the free space are subject to 80% flat-rate employer tax (eindheffing). |
| 94 | |
| 95 | ### Vrije Ruimte 2025 [T1] |
| 96 | |
| 97 | | Fiscal wage base (loonsom) | Free space percentage | |
| 98 | |---|---| |
| 99 | | First EUR 400,000 | 1.92% | |
| 100 | | Above EUR 400,000 | 1.18% | |
| 101 | |
| 102 | **Example:** Employer with EUR 1,000,000 wage base: |
| 103 | - Free space = EUR 400,000 × 1.92% + EUR 600,000 × 1.18% = EUR 7,680 + EUR 7,080 = EUR 14,760 |
| 104 | |
| 105 | ### WKR Categories [T1] |
| 106 | |
| 107 | | Category | Treatment | Examples | |
| 108 | |---|---|---| |
| 109 | | Gerichte vrijstellingen (targeted exemptions) | Fully exempt — do NOT count against vrije ruimte | Travel allowance (max EUR 0.23/km), training costs, verhuiskostenvergoeding, extraterritoriale kosten (30% ruling) | |
| 110 | | Nihilwaarderingen (nil valuations) | Valued at EUR 0 — do NOT count against vrije ruimte | Workplace facilities (coffee, fruit), work clothing required for job, tools used at workplace | |
| 111 | | Vrije ruimte (free space) | Counts against budget; excess taxed at 80% | Christmas gifts, company parties, non-targeted benefits, staff outings | |
| 112 | | Individueel belast (individually taxed) | Taxed as employee wage (not WKR) | Benefits employee chooses to have taxed individually | |
| 113 | |
| 114 | ### Gerichte Vrijstellingen — Key Amounts 2025 [T1] |
| 115 | |
| 116 | | Exemption | Amount/Rule | |
| 117 | |---|---| |
| 118 | | Travel allowance (reiskostenvergoeding) | Max EUR 0.23 per km (no cap on distance) | |
| 119 | | Relocation allowance (verhuiskostenvergoeding) | Max EUR 7,750 + actual moving costs | |
| 120 | | Study/training costs | Fully exempt if related to (future) employment | |
| 121 | | Meals at workplace (maaltijden) | Valued at EUR 3.55 per meal (2025); excess over employee contribution = WKR | |
| 122 | | Extraterritoriale kosten (30% ruling) | 30% of salary exempt or actual extraterritorial costs | |
| 123 | | Work-from-home allowance (thuiswerkvergoeding) | EUR 2.35 per day (2025) | |
| 124 | | Internet/phone (if partly business) | Reasonable business portion exempt | |
| 125 | |
| 126 | ### Eindheffing (Flat-Rate Tax on Excess) [T1] |
| 127 | |
| 128 | | Situation | Rate | |
| 129 | |---|---| |
| 130 | | Benefits exceeding vrije ruimte | 80% eindheffing (paid by employer) | |
| 131 | | Benefits exceeding EUR 2,400/occasion (gebruikelijkheidstoets) | Cannot use WKR — must be individually taxed | |
| 132 | |
| 133 | **Gebruikelijkheidstoets:** A single benefit provision cannot exceed EUR 2,400 per employee per occasion under the WKR. If it does, it must be individually taxed or split. |
| 134 | |
| 135 | --- |
| 136 | |
| 137 | ## Section 3 — Filing Obligations and Deadlines |
| 138 | |
| 139 | ### Periodic Filing [T1] |
| 140 | |
| 141 | | Obligation | Frequency | Deadline | |
| 142 | |---|---|---| |
| 143 | | Loonaangifte (payroll tax return) | Per pay period (monthly or 4-weekly) | Last day of month following pay period | |
| 144 | | Payment of loonheffingen | Per pay period | Same as filing deadline | |
| 145 | | Correctie loonaangifte | As needed | Within 5 years; penalties may apply after initial filing | |
| 146 | |
| 147 | ### Annual Obligations [T1] |
| 148 | |
| 149 | | Obligation | Deadline | Notes | |
| 150 | |---|---|---| |
| 151 | | Jaaropgave (annual statement to employees) | 28 February | Employer provides to each employee | |
| 152 | | WKR eindheffing determination | In first payroll return of following year | Determine if vrije ruimte exceeded; report 80% tax | |
| 153 | | Renseignementen (information returns) | Various | Third-party payments > EUR 5,000/year | |
| 154 | |
| 155 | ### Key Dates [T1] |
| 156 | |
| 157 | | Event | Date | |
| 158 | |---|---| |
| 159 | | Payroll return deadline (monthly) | Last day of month + 1 month | |
| 160 | | Annual employer statement (jaaropgave) | 28 February | |
| 161 | | WKR assessment moment | 31 December (assess full year usage) | |
| 162 | | Report eindheffing | First return period of new year | |
| 163 | |
| 164 | --- |
| 165 | |
| 166 | ## Section 4 — Required Inputs and Refusal Catalogue |
| 167 | |
| 168 | ### Required Inputs |
| 169 | |
| 170 | **Minimum viable:** Payroll run summary for the period. Employee count and contract types. Gross salary totals. |
| 171 | |
| 172 | **Recommended:** Detailed payroll journal, WKR administration (benefits provided per category), sector classification for Whk, AWf contract type split. |
| 173 | |
| 174 | **Ideal:** Full payroll software export, employment contracts, WKR policy document, expense claim registers, prior-year WKR reconciliation, UWV correspondence. |
| 175 | |
| 176 | ### Refusal Catalogue |
| 177 | |
| 178 | **R-LH-1 — No payroll data available.** "Cannot compute loonheffingen without payroll run data. Provide at minimum gross salary totals per period." |
| 179 | |
| 180 | **R-LH-2 — Contract types unclear.** "Cannot determine AWf rate (2.64% vs 7.64%) without confirmed contract types. Flag all employees as flex rate (conservative) until confirmed." |
| 181 | |
| 182 | **R-LH-3 — WKR allocation undocumented.** "Cannot confirm vrije ruimte compliance without benefit-by-benefit administration. Flag for payroll advisor." |
| 183 | |
| 184 | **R-LH-4 — Anonymous employee (no BSN).** "Must apply 52% anonymous rate. Cannot file normally without BSN and ID copy." |
| 185 | |
| 186 | **R-LH-5 — 30% ruling status unclear.** "Cannot apply extraterritorial exemption without confirmed Belastingdienst ruling. Apply standard treatment." |
| 187 | |
| 188 | --- |
| 189 | |
| 190 | ## Section 5 — Computation Examples |
| 191 | |
| 192 | ### Example: Monthly Payroll Tax Computation |
| 193 | |
| 194 | ``` |
| 195 | Given: |
| 196 | - Gross monthly salary: EUR 5,000 |
| 197 | - Employee: permanent contract, below AOW age |
| 198 | - No special deductions |
| 199 | |
| 200 | Step 1: Determine loonbelasting + premie volksverzekeringen |
| 201 | → Use white monthly table from Belastingdienst |
| 202 | → Approximate: EUR 5,000 × 35.82% = EUR 1,791 (first bracket) |
| 203 | → Actual amount per tax table (includes heffingskortingen) |
| 204 | |
| 205 | Step 2: Employer premiums: |
| 206 | → AWf (permanent): EUR 5,000 × 2.64% = EUR 132 |
| 207 | → Aof: EUR 5,000 × 5.82% = EUR 291 (small employer) |
| 208 | → Whk: EUR 5,000 × 1.50% = EUR 75 (example sector rate) |
| 209 | → Zvw: EUR 5,000 × 6.57% = EUR 328.50 |
| 210 | |
| 211 | Step 3: Total employer cost above gross: |
| 212 | → EUR 132 + EUR 291 + EUR 75 + EUR 328.50 = EUR 826.50 |
| 213 | |
| 214 | Step 4: Employee net (approximate): |
| 215 | → EUR 5,000 − EUR 1,791 + heffingskortingen (from table) = net salary |
| 216 | ``` |
| 217 | |
| 218 | ### Example: WKR Assessment |
| 219 | |
| 220 | ``` |
| 221 | Given: |
| 222 | - Annual wage base (fiscale loonsom): EUR 800,000 |
| 223 | - Benefits provided: Christmas packages EUR 8,000, staff party EUR 5,000, bicycle scheme EUR 3,000 |
| 224 | |
| 225 | Step 1: Calculate vrije ruimte: |
| 226 | → EUR 400,000 × 1.92% = EUR 7,680 |
| 227 | → EUR 400,000 × 1.18% = EUR 4,720 |
| 228 | → Total: EUR 12,400 |
| 229 | |
| 230 | Step 2: Determine which benefits count: |
| 231 | → Christmas packages: EUR 8,000 (vrije ruimte) |
| 232 | → Staff party: EUR 5,000 (vrije ruimte) |
| 233 | → Bicycle scheme: EUR 3,000 (vrije ruimte — not a gerichte vrijstelling) |
| 234 | → Total allocated: EUR 16,000 |
| 235 | |
| 236 | Step 3: Excess: |
| 237 | → EUR 16,000 − EUR 12,400 = EUR 3,600 |
| 238 | |
| 239 | Step 4: Eindheffing: |
| 240 | → EUR 3,600 × 80% = EUR 2,880 (employer pays) |
| 241 | ``` |
| 242 | |
| 243 | --- |
| 244 | |
| 245 | ## Section 6 — Control Checks and Red Flags |
| 246 | |
| 247 | | Check | Issue if triggered | |
| 248 | |---|---| |
| 249 | | AWf rate mismatch vs contract type | Incorrect premium — back-payment risk | |
| 250 | | WKR benefit > EUR 2,400 per person per occasion | Gebruikelijkheidstoets failed — must individually tax | |
| 251 | | Vrije ruimte exceeded without eindheffing | Missing tax payment | |
| 252 | | Employee hours > 130% of contracted hours | AWf low rate at risk (herzieningsregeling) | |
| 253 | | Late filing (> 1 month) | EUR 65 fine per return; escalates | |
| 254 | | Missing jaaropgave | Employee cannot file IB return correctly | |
| 255 | | DGA on payroll below EUR 56,000 | Gebruikelijk loon non-compliance | |
| 256 | | No written employment contracts | All employees default to flex AWf rate | |
| 257 | |
| 258 | --- |
| 259 | |
| 260 | ## Section 7 — Official Source Verification Requirements |
| 261 | |
| 262 | Before any rate, threshold, or deadline is used in output: |
| 263 | |
| 264 | 1. Verify payroll filing instructions on `belastingdienst.nl/loonheffingen` |
| 265 | 2. Verify premium rates in the annual "Nieuwsbrief Loonheffingen" (Belastingdienst) |
| 266 | 3. Verify statutory text on `wetten.overheid.nl` (Wet LB 1964, Wfsv) |
| 267 | 4. Record exact URL and retrieval date (YYYY-MM-DD) |
| 268 | 5. If source unavailable or conflicting: mark as **UNVERIFIED** and require professional confirmation |
| 269 | |
| 270 | --- |
| 271 | |
| 272 | ## Section 8 — Escalation Points |
| 273 | |
| 274 | Escalate to a qualified salarisadviseur or belastingadviseur when: |
| 275 | |
| 276 | - Employee/contractor classification (dienstverband vs. opdracht) is unclear |
| 277 | - 30% ruling eligibility or application questions |
| 278 | - Cross-border employment (posting, frontier worker, split payroll) |
| 279 | - Payroll corrections affecting multiple prior periods |
| 280 | - Werknemersverzekeringen premium disputes with UWV |
| 281 | - WKR exceeds vrije ruimte by material amount (> EUR 10,000) |
| 282 | - Reorganisation or mass dismissal payroll implications |
| 283 | - Expatriate or DGA compensation structuring |
| 284 | |
| 285 | --- |
| 286 | |
| 287 | **⚠️ DISCLAIMER: This skill provides workflow support only and does not constitute tax or payroll advice. All positions must be reviewed and signed off by a qualified Dutch belastingadviseur or salarisadministrateur before filing. Rates and thresholds change annually — verify against the current year's Nieuwsbrief Loonheffingen from belastingdienst.nl.** |
| 288 | |
| 289 | --- |
| 290 | |
| 291 | *OpenAccountants — open-source tax computation skills* |
| 292 | *openaccountants.com* |
| 293 |
Run this skill, then get an accountant to check it
After running the full skill pack in Claude, sign up and upload your worksheet. We'll connect you with a trusted accountant in our network who can review your numbers before you file.
Discussions(0)
No discussions yet. Verified accountants can post questions about this skill.
Quality
Q2: Research-verified
Deep research against tax authority sources. Not yet tested on real data.
Needs real client data + practitioner sign-off to reach Q1.
Accountant Review
About
Use this skill whenever asked about Dutch payroll taxes (loonheffingen) or the work cost scheme (werkkostenregeling / WKR). Trigger on phrases like "loonheffingen", "payroll tax Netherlands", "werkkostenregeling", "WKR", "loonbelasting", "premies volksverzekeringen", "premies werknemersverzekeringen", "wage tax NL", "eindheffing", "vrije ruimte", "salary administration", "loonadministratie", "werkgeverslasten", "employer costs NL", "payroll period filing", "loonstrook", "jaarloonopgave", "UWV premies", "WAO/WIA", "ZW premie", "AWf premie", "Whk premie", or any question about Dutch employer withholding, social contributions, or employee benefit taxation. Also trigger when reviewing payroll runs, computing employer costs, or advising on WKR allocation. ALWAYS read this skill before touching any Dutch payroll tax work.
Use this skill
This skill is open source and free to use in any AI agent. Copy it, download it, or clone the repo. If you find an error, flag it — a licensed accountant will review.