Dutch tax: net salary, full tax return, Box 3 and refunds, ZZP, mortgage, toeslagen, visa salary.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The Dutch state pension (AOW) from 1 July 2026 for a single person or someone with a partner: 2% of the full AOW for every insured year in the Netherlands in the 50 years before AOW age, gross and net a month, and the holiday allowance.
Years lived or worked in the Netherlands in the 50 years before AOW age, 0-50
Living alone or with a partner. Default single.
Tool list last changed Oct 25, 2026.
The Dutch state pension (AOW) from 1 July 2026 for a single person or someone with a partner: 2% of the full AOW for every insured year in the Netherlands in the 50 years before AOW age, gross and net a month, and the holiday allowance.
| Argument | Type | Description |
|---|---|---|
| insured_years* | number | Years lived or worked in the Netherlands in the 50 years before AOW age, 0-50 |
| living_situation | string | Living alone or with a partner. Default single. |
{
"type": "object",
"required": [
"insured_years"
],
"properties": {
"insured_years": {
"type": "number",
"description": "Years lived or worked in the Netherlands in the 50 years before AOW age, 0-50"
},
"living_situation": {
"enum": [
"single",
"partner"
],
"type": "string",
"description": "Living alone or with a partner. Default single."
}
},
"additionalProperties": false
}For the year someone arrives in or leaves the Netherlands (the M-form, migration tax return): the salary earned while resident, the Dutch tax on it with the tax credits for that part of the year, and the net pay a month during the resident period.
| Argument | Type | Description |
|---|---|---|
| date* | string | Registration date in the municipality (arriving) or departure date (leaving), YYYY-MM-DD, 2024-2026 |
| scenario* | string | Moving to the Netherlands or leaving it |
| gross_annual* | number | Gross salary for a full year at this pay, euros |
| thirty_percent_ruling | boolean | The 30% ruling applies. Default false. |
| holiday_allowance_on_top | boolean | Add 8% holiday allowance. Default false. |
{
"type": "object",
"required": [
"scenario",
"date",
"gross_annual"
],
"properties": {
"date": {
"type": "string",
"description": "Registration date in the municipality (arriving) or departure date (leaving), YYYY-MM-DD, 2024-2026"
},
"scenario": {
"enum": [
"arriving",
"leaving"
],
"type": "string",
"description": "Moving to the Netherlands or leaving it"
},
"gross_annual": {
"type": "number",
"description": "Gross salary for a full year at this pay, euros"
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "The 30% ruling applies. Default false."
},
"holiday_allowance_on_top": {
"type": "boolean",
"description": "Add 8% holiday allowance. Default false."
}
},
"additionalProperties": false
}Estimates which main Dutch household benefits are likely for 2026, from income, assets, rent and children's ages, with indicative yearly amounts. Read-only; it does not apply for anything, and the Belastingdienst decides eligibility. Covers healthcare allowance (zorgtoeslag), rent allowance (huurtoeslag), child benefit (kinderbijslag), child budget (kindgebonden budget), the conditions for childcare allowance (kinderopvangtoeslag), the working-parent tax credit (IACK) and exemption from municipal taxes (kwijtschelding).
| Argument | Type | Description |
|---|---|---|
| assets | number | Household savings and investments on 1 January. Default 0. |
| income* | number | Your yearly gross income (toetsingsinkomen), euros |
| housing | string | Rent, own home, or other (e.g. living with parents). Default rent. |
| you_work | boolean | You have paid work. Default true. |
| child_ages | array | Ages of children under 18 living with you, e.g. [2, 7]. Default none. |
| monthly_rent | number | Basic monthly rent (kale huur, without service costs). Needed for rent allowance. |
| partner_works | boolean |
Income during leave after a birth in the Netherlands (2026): maternity leave (UWV, 100% up to the daily wage cap), birth leave for the partner (1 week by the employer, up to 5 extra weeks at 70% from UWV) and paid parental leave (9 weeks at 70% from UWV), with what each parent receives and loses compared with normal pay.
| Argument | Type | Description |
|---|---|---|
| holiday_pay_on_top | boolean | Salaries are without the 8% holiday allowance (it comes on top). Default true. |
| partner_gross_monthly | number | Gross monthly salary of the partner, euros (0 if not working). Default 0. |
| birth_parent_gross_monthly* | number | Gross monthly salary of the parent giving birth, euros |
| parental_leave_weeks_partner | number | Paid parental leave weeks for the partner, 0-9. Default 9. |
| partner_extra_birth_leave_weeks | number | Extra birth leave weeks the partner takes, 0-5. Default 5. |
| parental_leave_weeks_birth_parent | number | Paid parental leave weeks for the birth parent, 0-9. Default 9. |
The planned new Dutch Box 3 (Wet werkelijk rendement, from 2028): tax on the actual return of the year (interest, dividends, price changes of investments incl. unrealised, rental income, minus interest and costs), compared with today's notional system. A plan; details can still change.
| Argument | Type | Description |
|---|---|---|
| debts | number | Box 3 debts, euros. Default 0. |
| savings | number | Savings on 1 January, euros. Default 0. |
| dividends | number | Dividends received, euros. Default 0. |
| interest_paid | number | Interest paid on those debts, euros. Default 0. |
| net_purchases | number | Bought minus sold during the year, euros. Default 0. |
| fiscal_partner | boolean | Fiscal partners (double tax-free amount). Default false. |
| investments_end | number | The same holdings on 31 December, euros. Default = start. |
| interest_received | number | Interest received in the year, euros. Default 0. |
When the actual return on Box 3 assets was lower than the notional return, the Belastingdienst taxes the actual return instead (following the Supreme Court rulings). For one tax year from 2017 to 2026 this compares the notional Box 3 tax with the tax on the actual return (interest, dividends, rent and value changes minus interest paid), and estimates the difference that could be refunded and which procedure applies to that year. Read-only calculation; it submits nothing and is not tax advice.
| Argument | Type | Description |
|---|---|---|
| year* | number | Tax year, 2017 to 2026 |
| debts | number | Box 3 debts on 1 January |
| savings | number | Savings on 1 January of that year |
| other_assets | number | Investments and other assets on 1 January |
| value_change | number | End value minus start value of investments, corrected for purchases and sales (negative for a loss) |
| interest_paid | number | Interest paid on Box 3 debts |
| fiscal_partner | boolean | Amounts are a fiscal-partner couple's total. Default false. |
Box 3 tax on savings and investments in the Netherlands for 2026 (the notional-return system): the tax-free allowance, the notional return on savings, investments and debts, and the 36% tax. Optionally for fiscal partners (double allowance).
| Argument | Type | Description |
|---|---|---|
| debts | number | Debts in Box 3 on 1 January (not the mortgage on your own home), euros |
| savings | number | Bank and savings balances on 1 January, euros |
| investments | number | Investments and other assets (shares, crypto, a second home) on 1 January, euros |
| fiscal_partner | boolean | Filing together with a fiscal partner (amounts are the couple's total). Default false. |
{
"type": "object",
"properties": {
"debts": {
"type": "number",
"description": "Debts in Box 3 on 1 January (not the mortgage on your own home), euros"
},
"savings": {
"type": "number",
"description": "Bank and savings balances on 1 January, euros"
},
"investments": {
"type": "number",
"description": "Investments and other assets (shares, crypto, a second home) on 1 January, euros"
},
"fiscal_partner": {
"type": "boolean",
"description": "Filing together with a fiscal partner (amounts are the couple's total). Default false."
}
},
"additionalProperties": false
}The yearly addition to income (bijtelling) for private use of a company car in the Netherlands in 2026, for electric and fuel cars (with the 60-month lock-in of an electric car's rate and cap from its first registration), and the extra income tax at the employee's marginal rate.
| Argument | Type | Description |
|---|---|---|
| electric | boolean | Fully electric. Default false. |
| catalog_value* | number | The car's list price (catalogue value incl. BPM and VAT), euros |
| taxable_income | number | Taxable income before the bijtelling, euros a year. Default 60000. |
| first_registration_year | number | Year the car was first registered (sets an electric car's rate for 60 months). Default 2026. |
{
"type": "object",
"required": [
"catalog_value"
],
"properties": {
"electric": {
"type": "boolean",
"description": "Fully electric. Default false."
},
"catalog_value": {
"type": "number",
"description": "The car's list price (catalogue value incl. BPM and VAT), euros"
},
"taxable_income": {
"type": "number",
"description": "Taxable income before the bijtelling, euros a year. Default 60000."
},
"first_registration_year": {
"type": "number",
"description": "Year the car was first registered (sets an electric car's rate for 60 months). Default 2026."
}
},
"additionalProperties": false
}Compares income tax on a gross salary in 2026 with the Belastingplan 2027 proposal (presented on Prinsjesdag 2026, a proposal until Parliament votes): brackets and tax credits, and the 30% ruling dropping to 27% unless it started before 2024.
| Argument | Type | Description |
|---|---|---|
| gross_annual* | number | Gross annual salary in euros, without holiday allowance |
| thirty_percent_ruling | boolean | Has the 30% ruling. Default false. |
| ruling_started_before_2024 | boolean | The ruling started before 2024 (keeps 30% in 2027). Default false. |
{
"type": "object",
"required": [
"gross_annual"
],
"properties": {
"gross_annual": {
"type": "number",
"description": "Gross annual salary in euros, without holiday allowance"
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "Has the 30% ruling. Default false."
},
"ruling_started_before_2024": {
"type": "boolean",
"description": "The ruling started before 2024 (keeps 30% in 2027). Default false."
}
},
"additionalProperties": false
}For one yearly budget (what a client or employer pays, excl. VAT) in the Netherlands in 2026: the net income as an employee (the budget covers salary and employer costs), as a freelancer (ZZP, with the entrepreneur deductions) and through your own BV (salary at least the customary wage, corporate tax and Box 2 on the dividend).
| Argument | Type | Description |
|---|---|---|
| bv_salary | number | Salary the BV pays you, euros a year. Default the customary wage (or less if the BV can't pay it). |
| yearly_budget* | number | Yearly amount the client or employer pays, excl. VAT, euros |
| business_costs | number | Yearly business costs as ZZP or BV, euros. Default 5000. |
| bv_extra_costs | number | Extra yearly cost of running a BV (accountant, annual accounts), euros. Default 3000. |
| meets_hours_criterion | boolean | At least 1,225 hours a year in the business (for the ZZP deductions). Default true. |
{
"type": "object",
"required": [
"yearly_budget"
],
"properties": {
"bv_salary": {
"type": "number",
"description": "Salary the BV pays you, euros a year. Default the customary wage (or less if the BV can't pay it)."
},
"yearly_budget": {
"type": "number",
"description": "Yearly amount the client or employer pays, excl. VAT, euros"
},
"business_costs": {
"type": "number",
"description": "Yearly business costs as ZZP or BV, euros. Default 5000."
},
"bv_extra_costs": {
"type": "number",
"description": "Extra yearly cost of running a BV (accountant, annual accounts), euros. Default 3000."
},
"meets_hours_criterion": {
"type": "boolean",
"description": "At least 1,225 hours a year in the business (for the ZZP deductions). Default true."
}
},
"additionalProperties": false
}The hourly rate a freelancer (ZZP) in the Netherlands needs in 2026 to take home a target net amount a month, after holidays, sick days and hours that can't be invoiced, business costs, the entrepreneur deductions, income tax and the Zvw contribution.
| Argument | Type | Description |
|---|---|---|
| starter | boolean | Gets the starters deduction (one of the first five years). Default false. |
| sick_days | number | Sick days a year. Default 10. |
| holiday_weeks | number | Weeks off a year, incl. public holidays. Default 6. |
| business_costs | number | Yearly business costs excl. VAT, euros. Default 3000. |
| hours_per_week | number | Working hours a week. Default 40. |
| target_net_monthly* | number | Net income wanted a month, euros |
| non_billable_percent | number | Share of working hours not invoiced (sales, admin), %. Default 20. |
{
"type": "object",
"required": [
"target_net_monthly"
],
"properties": {
"starter": {
"type": "boolean",
"description": "Gets the starters deduction (one of the first five years). Default false."
},
"sick_days": {
"type": "number",
"description": "Sick days a year. Default 10."
},
"holiday_weeks": {
"type": "number",
"description": "Weeks off a year, incl. public holidays. Default 6."
},
"business_costs": {
"type": "number",
"description": "Yearly business costs excl. VAT, euros. Default 3000."
},
"hours_per_week": {
"type": "number",
"description": "Working hours a week. Default 40."
},
"target_net_monthly": {
"type": "number",
"description": "Net income wanted a month, euros"
},
"non_billable_percent": {
"type": "number",
"description": "Share of working hours not invoiced (sales, admin), %. Default 20."
}
},
"additionalProperties": false
}Estimates 2026 Dutch income tax for a self-employed person (ZZP / eenmanszaak) from yearly revenue and business costs: profit, the self-employed deduction (1,225-hour criterion), starters deduction, SME profit exemption, tax credits, the separate income-related healthcare contribution (Zvw) and the income left after tax. Also shows the VAT charged on the revenue. Read-only calculation; it files nothing and is not tax advice.
| Argument | Type | Description |
|---|---|---|
| revenue* | number | Yearly revenue in euros, excluding VAT |
| starter | boolean | Qualifies for the starters deduction (new entrepreneur). Default false. |
| vat_rate | number | VAT rate charged in %: 21, 9 or 0. Default 21. |
| business_costs | number | Deductible business costs a year, excluding VAT. Default 0. |
| meets_hours_criterion | boolean | Works at least 1,225 hours a year on the business. Default true. |
{
"type": "object",
"required": [
"revenue"
],
"properties": {
"revenue": {
"type": "number",
"description": "Yearly revenue in euros, excluding VAT"
},
"starter": {
"type": "boolean",
"description": "Qualifies for the starters deduction (new entrepreneur). Default false."
},
"vat_rate": {
"type": "number",
"description": "VAT rate charged in %: 21, 9 or 0. Default 21."
},
"business_costs": {
"type": "number",
"description": "Deductible business costs a year, excluding VAT. Default 0."
},
"meets_hours_criterion": {
"type": "boolean",
"description": "Works at least 1,225 hours a year on the business. Default true."
}
},
"additionalProperties": false
}Gift tax in the Netherlands for 2026: the yearly exemption for children and others, the one-time raised exemption (general or for study) for a recipient aged 18-40, the rates per relationship and whether a gift tax return must be filed. The recipient pays; Dutch tax applies when the giver lives in the Netherlands.
| Argument | Type | Description |
|---|---|---|
| amount* | number | Total given by this giver this year (both parents count as one giver), euros |
| relationship* | string | The recipient is the giver's child, grandchild, or anyone else |
| one_time_exemption | string | Claim the one-time raised exemption. Default none. |
| recipient_aged_18_to_40 | boolean | The recipient (or their partner) is 18-40 on the day of the gift. Default false. |
| giver_lives_in_netherlands | boolean | The giver lives in the Netherlands. Default true. |
{
"type": "object",
"required": [
"amount",
"relationship"
],
"properties": {
"amount": {
"type": "number",
"description": "Total given by this giver this year (both parents count as one giver), euros"
},
"relationship": {
"enum": [
"child",
"grandchild",
"other"
],
"type": "string",
"description": "The recipient is the giver's child, grandchild, or anyone else"
},
"one_time_exemption": {
"enum": [
"none",
"general",
"study"
],
"type": "string",
"description": "Claim the one-time raised exemption. Default none."
},
"recipient_aged_18_to_40": {
"type": "boolean",
"description": "The recipient (or their partner) is 18-40 on the day of the gift. Default false."
},
"giver_lives_in_netherlands": {
"type": "boolean",
"description": "The giver lives in the Netherlands. Default true."
}
},
"additionalProperties": false
}Reverse salary calculation for salary negotiations in the Netherlands (2026): the gross annual and monthly salary needed to take home a given net amount, with or without holiday allowance and the 30% ruling.
| Argument | Type | Description |
|---|---|---|
| target_net_monthly* | number | Net pay wanted per month in euros (yearly net / 12, so including holiday allowance when that is on) |
| thirty_percent_ruling | boolean | Will have the 30% ruling. Default false. |
| holiday_allowance_on_top | boolean | The salary gets 8% holiday allowance on top. Default true. |
{
"type": "object",
"required": [
"target_net_monthly"
],
"properties": {
"target_net_monthly": {
"type": "number",
"description": "Net pay wanted per month in euros (yearly net / 12, so including holiday allowance when that is on)"
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "Will have the 30% ruling. Default false."
},
"holiday_allowance_on_top": {
"type": "boolean",
"description": "The salary gets 8% holiday allowance on top. Default true."
}
},
"additionalProperties": false
}The yearly cost of basic health insurance in the Netherlands in 2026: premium (with the discount for a voluntary extra deductible), the deductible (eigen risico) actually paid for expected care costs, and the healthcare allowance (zorgtoeslag) for the income.
| Argument | Type | Description |
|---|---|---|
| annual_income* | number | Yearly income for the healthcare allowance, euros |
| monthly_premium | number | Basic insurance premium a month, euros. Default 160. |
| extra_deductible | number | Voluntary extra deductible, euros. Default 0. |
| allowance_partner | boolean | Has an allowance partner. Default false. |
| expected_care_costs | number | Expected care costs a year that fall under the deductible, euros. Default 0. |
{
"type": "object",
"required": [
"annual_income"
],
"properties": {
"annual_income": {
"type": "number",
"description": "Yearly income for the healthcare allowance, euros"
},
"monthly_premium": {
"type": "number",
"description": "Basic insurance premium a month, euros. Default 160."
},
"extra_deductible": {
"enum": [
0,
100,
200,
300,
400,
500
],
"type": "number",
"description": "Voluntary extra deductible, euros. Default 0."
},
"allowance_partner": {
"type": "boolean",
"description": "Has an allowance partner. Default false."
},
"expected_care_costs": {
"type": "number",
"description": "Expected care costs a year that fall under the deductible, euros. Default 0."
}
},
"additionalProperties": false
}Estimates the whole 2026 Dutch income tax return: Box 1 salary tax with the tax credits and the 30% ruling, the own home (eigenwoningforfait and mortgage interest, with the best split between fiscal partners), Box 3 on savings and investments, and tax-treaty relief for real estate abroad (exempt in the Netherlands). With the payroll tax already withheld it says whether you get money back or have to pay.
| Argument | Type | Description |
|---|---|---|
| debts | number | Box 3 debts on 1 January (not the own-home mortgage) |
| savings | number | Savings on 1 January (couple total if filing together) |
| woz_value | number | WOZ value of the own home (main residence). Omit if renting. |
| investments | number | Investments and other assets on 1 January, INCLUDING the value of any property abroad |
| gross_annual* | number | Gross annual salary in euros, without holiday allowance |
| partner_gross_annual | number | Fiscal partner's gross annual salary (filing together). Omit for a single filer. |
| payroll_tax_withheld | number | Payroll tax (loonheffing) withheld in the year, from the annual statement (jaaropgaaf). Optional: without it no refund/payment is given. |
Inheritance tax in the Netherlands for 2026 for one heir: the exemption for a partner, child, disabled child, grandchild, parent or anyone else, and the rates of each group. Due when the deceased lived in the Netherlands.
| Argument | Type | Description |
|---|---|---|
| amount* | number | Value of this heir's share, euros |
| relationship* | string | The heir's relationship to the deceased |
| deceased_lived_in_netherlands | boolean | The deceased lived in the Netherlands. Default true. |
{
"type": "object",
"required": [
"amount",
"relationship"
],
"properties": {
"amount": {
"type": "number",
"description": "Value of this heir's share, euros"
},
"relationship": {
"enum": [
"partner",
"child",
"disabledChild",
"grandchild",
"parent",
"other"
],
"type": "string",
"description": "The heir's relationship to the deceased"
},
"deceased_lived_in_netherlands": {
"type": "boolean",
"description": "The deceased lived in the Netherlands. Default true."
}
},
"additionalProperties": false
}For an employee whose Dutch contract ends: the statutory transition payment (transitievergoeding), unemployment benefit (WW) amount and duration under UWV rules, and for expats the highly skilled migrant / Blue Card search period end date and the last start date for a new job to keep the 30% ruling.
| Argument | Type | Description |
|---|---|---|
| permit | string | none (EU citizen), hsm (highly skilled migrant) or bluecard. Default none. |
| holiday_pay | boolean | Receives 8% holiday allowance. Default true. |
| gross_monthly* | number | Gross base salary per month in euros, without holiday allowance |
| employment_end* | string | Last day of the contract, YYYY-MM-DD |
| employment_start* | string | Start date at this employer, YYYY-MM-DD |
| permit_two_years | boolean | Has held the permit for 2 years or more when the job ends. Default false. |
| four_of_five_years | boolean | Worked in at least 4 of the last 5 calendar years. Default true. |
For a salary in the Netherlands in 2026: the allowances a household gets (healthcare and rent allowance, child budget), the net income including them, and the share of the next €1,000 of salary that is kept after extra income tax and lost allowances. Also lists the salary ranges where a raise is mostly lost.
| Argument | Type | Description |
|---|---|---|
| assets | number | Savings and investments on 1 January, euros. Default 0. |
| partner | boolean | Has an allowance partner. Default false. |
| gross_annual* | number | Gross annual salary, euros (10000-100000) |
| monthly_rent | number | Monthly rent for rent allowance, 0 if owning. Default 0. |
| children_ages | array | Ages of children under 18. Default none. |
| partner_income | number | The partner's yearly income, euros. Default 0. |
{
"type": "object",
"required": [
"gross_annual"
],
"properties": {
"assets": {
"type": "number",
"description": "Savings and investments on 1 January, euros. Default 0."
},
"partner": {
"type": "boolean",
"description": "Has an allowance partner. Default false."
},
"gross_annual": {
"type": "number",
"description": "Gross annual salary, euros (10000-100000)"
},
"monthly_rent": {
"type": "number",
"description": "Monthly rent for rent allowance, 0 if owning. Default 0."
},
"children_ages": {
"type": "array",
"items": {
"type": "number"
},
"description": "Ages of children under 18. Default none."
},
"partner_income": {
"type": "number",
"description": "The partner's yearly income, euros. Default 0."
}
},
"additionalProperties": false
}For buying a home in the Netherlands in 2026: an indicative maximum mortgage on income, the monthly annuity payment, the first-year mortgage interest deduction worked out with the real Box 1 calculation (eigenwoningforfait, the deduction capped at the second-bracket rate), net monthly cost and whether NHG (national mortgage guarantee) is possible.
| Argument | Type | Description |
|---|---|---|
| price* | number | Purchase price of the home in euros |
| term_years | number | Term in years. Default 30. |
| loan_amount | number | Mortgage amount. Default: the price (Dutch mortgages go up to 100% of the value). |
| other_monthly_debt | number | Other monthly debt payments (student loan, car loan). Default 0. |
| gross_annual_income* | number | Household gross annual income in euros (both partners together) |
| claimant_gross_income | number | Gross income of the partner who takes the interest deduction. Default: the household income. |
| interest_rate_percent | number | Yearly interest rate in %, e.g. 3.9. Default 4. Use a current quote when you have one. |
Gross-to-net salary in the Netherlands for 2026: income tax with the general and labour tax credits, optional 8% holiday allowance on top, the 30% ruling (with its salary norm and cap) and a pension contribution. Returns net per month and per year and the effective tax rate. Single employee below state pension age.
| Argument | Type | Description |
|---|---|---|
| gross_annual* | number | Gross annual salary in euros, without holiday allowance (e.g. 60000) |
| pension_percent | number | Employee pension contribution as % of salary, 0-30. Default 0. |
| thirty_percent_ruling | boolean | The employee has the 30% ruling. Default false. |
| holiday_allowance_on_top | boolean | Add the 8% holiday allowance (vakantiegeld) on top of the gross salary. Default false. |
{
"type": "object",
"required": [
"gross_annual"
],
"properties": {
"gross_annual": {
"type": "number",
"description": "Gross annual salary in euros, without holiday allowance (e.g. 60000)"
},
"pension_percent": {
"type": "number",
"description": "Employee pension contribution as % of salary, 0-30. Default 0."
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "The employee has the 30% ruling. Default false."
},
"holiday_allowance_on_top": {
"type": "boolean",
"description": "Add the 8% holiday allowance (vakantiegeld) on top of the gross salary. Default false."
}
},
"additionalProperties": false
}How much an employee or freelancer in the Netherlands may deposit into an annuity (lijfrente) or pension bank account in 2026 and deduct in Box 1: the jaarruimte from last year's income and factor A, unused room from earlier years (reserveringsruimte), and the tax the remaining room saves.
| Argument | Type | Description |
|---|---|---|
| factor_a | number | Factor A on the 2025 pension statement (UPO); 0 without an employer pension. Default 0. |
| already_paid | number | Annuity premiums already paid in 2026, euros. Default 0. |
| last_year_income* | number | 2025 income from work or business, euros |
| this_year_taxable_income | number | 2026 taxable Box 1 income, for the tax saving. Default the same as last year. |
| unused_room_earlier_years | number | Unused room from 2016-2025, euros. Default 0. |
{
"type": "object",
"required": [
"last_year_income"
],
"properties": {
"factor_a": {
"type": "number",
"description": "Factor A on the 2025 pension statement (UPO); 0 without an employer pension. Default 0."
},
"already_paid": {
"type": "number",
"description": "Annuity premiums already paid in 2026, euros. Default 0."
},
"last_year_income": {
"type": "number",
"description": "2025 income from work or business, euros"
},
"this_year_taxable_income": {
"type": "number",
"description": "2026 taxable Box 1 income, for the tax saving. Default the same as last year."
},
"unused_room_earlier_years": {
"type": "number",
"description": "Unused room from 2016-2025, euros. Default 0."
}
},
"additionalProperties": false
}Compares the net cost of renting and of buying a home in the Netherlands over a number of years: rent with yearly increases and the return on the down payment if it stays invested (after Box 3), against mortgage payments, maintenance, the mortgage interest deduction and the equity built up.
| Argument | Type | Description |
|---|---|---|
| years | number | Years to compare, 1-30. Default 10. |
| down_payment | number | Own money put in (also pays the buying costs), euros. Default 10% of the price. |
| gross_income | number | Gross income of the person who deducts the mortgage interest, euros a year. Default 60000. |
| monthly_rent* | number | Rent now, euros a month |
| fiscal_partner | boolean | Filing with a fiscal partner. Default false. |
| property_value* | number | Price of the home to buy, euros |
| maintenance_percent | number | Yearly maintenance and owners' association costs, % of the value. Default 1. |
| interest_rate_percent |
Tax on restricted stock units in the Netherlands: each vest is taxed as wages in Box 1 at the value on the vesting day (with or without the 30% ruling), and shares you keep fall into Box 3 the next year. Year by year, with sell-to-cover or keeping the shares.
| Argument | Type | Description |
|---|---|---|
| salary* | number | Gross base salary a year, euros |
| vest_years | number | Years over which it vests evenly, 1-6. Default 4. |
| grant_value* | number | Value of the whole grant today, euros |
| keep_shares | boolean | Keep the net shares (true) or sell everything at vesting. Default false. |
| other_box3_assets | number | Other savings and investments, euros. Default 0. |
| share_growth_percent | number | Expected share price change a year, %. Default 0. |
| thirty_percent_ruling | boolean | The 30% ruling applies. Default false. |
{
"type": "object",
"required": [
"salary",
"grant_value"
],
"properties": {
"salary": {
"type": "number",
"description": "Gross base salary a year, euros"
},
"vest_years": {
"type": "number",
"description": "Years over which it vests evenly, 1-6. Default 4."
},
"grant_value": {
"type": "number",
"description": "Value of the whole grant today, euros"
},
"keep_shares": {
"type": "boolean",
"description": "Keep the net shares (true) or sell everything at vesting. Default false."
},
"other_box3_assets": {
"type": "number",
"description": "Other savings and investments, euros. Default 0."
},
"share_growth_percent": {
"type": "number",
"description": "Expected share price change a year, %. Default 0."
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "The 30% ruling applies. Default false."
}
},
"additionalProperties": false
}Net income year by year for an employee with the Dutch 30% ruling: 30%, then 27% from 2027 for rulings that started in 2024 or later, the salary norm, the end of the ruling after five years, and Box 3 on Dutch and foreign assets (partial non-resident status only for rulings that started before 2024).
| Argument | Type | Description |
|---|---|---|
| start_year | number | Year the ruling started (January assumed), 2019-2026. Default 2025. |
| dutch_assets | number | Savings and investments in the Netherlands, euros. Default 0. |
| gross_annual* | number | Gross annual salary in euros |
| fiscal_partner | boolean | Has a fiscal partner (double Box 3 allowance). Default false. |
| foreign_savings | number | Savings abroad, euros. Default 0. |
| foreign_investments | number | Investments abroad, euros. Default 0. |
| partial_non_resident | boolean | Chose partial non-resident status (only for rulings that started before 2024). Default false. |
Overdrachtsbelasting in 2026 when buying a home in the Netherlands: 2% for a home you live in, 0% for first-time buyers aged 18-34 up to a €555,000 price, 8% for other homes.
| Argument | Type | Description |
|---|---|---|
| price* | number | Purchase price / value in euros |
| own_home | boolean | The buyer will live in it as their main home. Default true. |
| buyer_age | number | Age of the buyer. Default 40. |
| first_time_starter_exemption | boolean | The buyer has never used the starters exemption. Default true. |
{
"type": "object",
"required": [
"price"
],
"properties": {
"price": {
"type": "number",
"description": "Purchase price / value in euros"
},
"own_home": {
"type": "boolean",
"description": "The buyer will live in it as their main home. Default true."
},
"buyer_age": {
"type": "number",
"description": "Age of the buyer. Default 40."
},
"first_time_starter_exemption": {
"type": "boolean",
"description": "The buyer has never used the starters exemption. Default true."
}
},
"additionalProperties": false
}For a US citizen or green-card holder with a Dutch salary: Dutch tax, the creditable part (AOW/Anw premiums are not creditable under the US-Dutch totalization agreement), and the US tax for 2026 under the Foreign Earned Income Exclusion and under the Foreign Tax Credit, incl. the child tax credit and its refundable part.
| Argument | Type | Description |
|---|---|---|
| children | number | Qualifying children under 17 with an SSN. Default 0. |
| usd_per_eur | number | Exchange rate, dollars per euro. Default 1.13. |
| filing_status | string | US filing status. Default single. |
| gross_annual_eur* | number | Dutch gross annual salary in euros, without holiday allowance |
| other_us_income_usd | number | Other US-taxed income, e.g. US dividends, in dollars. Default 0. |
| thirty_percent_ruling | boolean | Has the Dutch 30% ruling. Default false. |
{
"type": "object",
"required": [
"gross_annual_eur"
],
"properties": {
"children": {
"type": "number",
"description": "Qualifying children under 17 with an SSN. Default 0."
},
"usd_per_eur": {
"type": "number",
"description": "Exchange rate, dollars per euro. Default 1.13."
},
"filing_status": {
"enum": [
"single",
"joint"
],
"type": "string",
"description": "US filing status. Default single."
},
"gross_annual_eur": {
"type": "number",
"description": "Dutch gross annual salary in euros, without holiday allowance"
},
"other_us_income_usd": {
"type": "number",
"description": "Other US-taxed income, e.g. US dividends, in dollars. Default 0."
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "Has the Dutch 30% ruling. Default false."
}
},
"additionalProperties": false
}Checks whether a salary meets the 2026 IND salary requirement for a Dutch highly skilled migrant (kennismigrant) permit or an EU Blue Card. Holiday allowance does not count; a 13th month counts only when paid monthly. Also checks the 30% ruling salary norm.
| Argument | Type | Description |
|---|---|---|
| per | string | Whether salary is per year or per month. Default year. |
| permit | string | hsm = highly skilled migrant, bluecard = EU Blue Card. Default hsm. |
| salary* | number | Gross salary in euros, as in the offer |
| under_30 | boolean | Applicant is under 30 on the day the application is filed. Default false. |
| recent_graduate | boolean | Graduated within the last 3 years or on an orientation-year permit (reduced norm). Default false. |
| thirteenth_month | string | A 13th month: none, paid as a lump sum (does not count), or paid in 12 monthly parts (counts). Default none. |
| includes_holiday_pay | boolean | The salary amount includes the 8% holiday allowance. Default false. |
| Partner has paid work. Default true. |
| partner_income | number | Partner's yearly gross income. Omit if you have no (benefits) partner. |
| uses_childcare | boolean | Uses registered daycare, a childminder or after-school care. Default false. |
{
"type": "object",
"required": [
"income"
],
"properties": {
"assets": {
"type": "number",
"description": "Household savings and investments on 1 January. Default 0."
},
"income": {
"type": "number",
"description": "Your yearly gross income (toetsingsinkomen), euros"
},
"housing": {
"enum": [
"rent",
"own",
"other"
],
"type": "string",
"description": "Rent, own home, or other (e.g. living with parents). Default rent."
},
"you_work": {
"type": "boolean",
"description": "You have paid work. Default true."
},
"child_ages": {
"type": "array",
"items": {
"type": "number"
},
"description": "Ages of children under 18 living with you, e.g. [2, 7]. Default none."
},
"monthly_rent": {
"type": "number",
"description": "Basic monthly rent (kale huur, without service costs). Needed for rent allowance."
},
"partner_works": {
"type": "boolean",
"description": "Partner has paid work. Default true."
},
"partner_income": {
"type": "number",
"description": "Partner's yearly gross income. Omit if you have no (benefits) partner."
},
"uses_childcare": {
"type": "boolean",
"description": "Uses registered daycare, a childminder or after-school care. Default false."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"birth_parent_gross_monthly"
],
"properties": {
"holiday_pay_on_top": {
"type": "boolean",
"description": "Salaries are without the 8% holiday allowance (it comes on top). Default true."
},
"partner_gross_monthly": {
"type": "number",
"description": "Gross monthly salary of the partner, euros (0 if not working). Default 0."
},
"birth_parent_gross_monthly": {
"type": "number",
"description": "Gross monthly salary of the parent giving birth, euros"
},
"parental_leave_weeks_partner": {
"type": "number",
"description": "Paid parental leave weeks for the partner, 0-9. Default 9."
},
"partner_extra_birth_leave_weeks": {
"type": "number",
"description": "Extra birth leave weeks the partner takes, 0-5. Default 5."
},
"parental_leave_weeks_birth_parent": {
"type": "number",
"description": "Paid parental leave weeks for the birth parent, 0-9. Default 9."
}
},
"additionalProperties": false
}| investments_start | number | Shares, ETFs, crypto on 1 January, euros. Default 0. |
{
"type": "object",
"properties": {
"debts": {
"type": "number",
"description": "Box 3 debts, euros. Default 0."
},
"savings": {
"type": "number",
"description": "Savings on 1 January, euros. Default 0."
},
"dividends": {
"type": "number",
"description": "Dividends received, euros. Default 0."
},
"interest_paid": {
"type": "number",
"description": "Interest paid on those debts, euros. Default 0."
},
"net_purchases": {
"type": "number",
"description": "Bought minus sold during the year, euros. Default 0."
},
"fiscal_partner": {
"type": "boolean",
"description": "Fiscal partners (double tax-free amount). Default false."
},
"investments_end": {
"type": "number",
"description": "The same holdings on 31 December, euros. Default = start."
},
"interest_received": {
"type": "number",
"description": "Interest received in the year, euros. Default 0."
},
"investments_start": {
"type": "number",
"description": "Shares, ETFs, crypto on 1 January, euros. Default 0."
}
},
"additionalProperties": false
}| assessed_box3_tax |
| number |
| The Box 3 tax on the actual assessment, if known (more exact than the estimate) |
| interest_received | number | Interest received in the year |
| dividends_and_rent | number | Dividends and net rental income received |
{
"type": "object",
"required": [
"year"
],
"properties": {
"year": {
"type": "number",
"description": "Tax year, 2017 to 2026"
},
"debts": {
"type": "number",
"description": "Box 3 debts on 1 January"
},
"savings": {
"type": "number",
"description": "Savings on 1 January of that year"
},
"other_assets": {
"type": "number",
"description": "Investments and other assets on 1 January"
},
"value_change": {
"type": "number",
"description": "End value minus start value of investments, corrected for purchases and sales (negative for a loss)"
},
"interest_paid": {
"type": "number",
"description": "Interest paid on Box 3 debts"
},
"fiscal_partner": {
"type": "boolean",
"description": "Amounts are a fiscal-partner couple's total. Default false."
},
"assessed_box3_tax": {
"type": "number",
"description": "The Box 3 tax on the actual assessment, if known (more exact than the estimate)"
},
"interest_received": {
"type": "number",
"description": "Interest received in the year"
},
"dividends_and_rent": {
"type": "number",
"description": "Dividends and net rental income received"
}
},
"additionalProperties": false
}| thirty_percent_ruling | boolean | Has the 30% ruling. Default false. |
| foreign_property_value | number | Value of real estate abroad (already included in investments), for treaty relief |
| foreign_property_country | string | ISO country code of that property, e.g. IN, GB, US, ES. Default: other (the same relief applies without a treaty). |
| holiday_allowance_on_top | boolean | Add the 8% holiday allowance on top. Default true. |
| mortgage_interest_annual | number | Mortgage interest paid in the year on the own home, euros |
| partner_payroll_tax_withheld | number | Payroll tax withheld for the partner. Optional. |
{
"type": "object",
"required": [
"gross_annual"
],
"properties": {
"debts": {
"type": "number",
"description": "Box 3 debts on 1 January (not the own-home mortgage)"
},
"savings": {
"type": "number",
"description": "Savings on 1 January (couple total if filing together)"
},
"woz_value": {
"type": "number",
"description": "WOZ value of the own home (main residence). Omit if renting."
},
"investments": {
"type": "number",
"description": "Investments and other assets on 1 January, INCLUDING the value of any property abroad"
},
"gross_annual": {
"type": "number",
"description": "Gross annual salary in euros, without holiday allowance"
},
"partner_gross_annual": {
"type": "number",
"description": "Fiscal partner's gross annual salary (filing together). Omit for a single filer."
},
"payroll_tax_withheld": {
"type": "number",
"description": "Payroll tax (loonheffing) withheld in the year, from the annual statement (jaaropgaaf). Optional: without it no refund/payment is given."
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "Has the 30% ruling. Default false."
},
"foreign_property_value": {
"type": "number",
"description": "Value of real estate abroad (already included in investments), for treaty relief"
},
"foreign_property_country": {
"type": "string",
"description": "ISO country code of that property, e.g. IN, GB, US, ES. Default: other (the same relief applies without a treaty)."
},
"holiday_allowance_on_top": {
"type": "boolean",
"description": "Add the 8% holiday allowance on top. Default true."
},
"mortgage_interest_annual": {
"type": "number",
"description": "Mortgage interest paid in the year on the own home, euros"
},
"partner_payroll_tax_withheld": {
"type": "number",
"description": "Payroll tax withheld for the partner. Optional."
}
},
"additionalProperties": false
}| thirty_percent_ruling |
| boolean |
| Has the 30% ruling. Default false. |
| work_history_start_year | number | First calendar year with 208+ paid hours in NL or the EU. Default: the employment start year. |
{
"type": "object",
"required": [
"gross_monthly",
"employment_start",
"employment_end"
],
"properties": {
"permit": {
"enum": [
"none",
"hsm",
"bluecard"
],
"type": "string",
"description": "none (EU citizen), hsm (highly skilled migrant) or bluecard. Default none."
},
"holiday_pay": {
"type": "boolean",
"description": "Receives 8% holiday allowance. Default true."
},
"gross_monthly": {
"type": "number",
"description": "Gross base salary per month in euros, without holiday allowance"
},
"employment_end": {
"type": "string",
"description": "Last day of the contract, YYYY-MM-DD"
},
"employment_start": {
"type": "string",
"description": "Start date at this employer, YYYY-MM-DD"
},
"permit_two_years": {
"type": "boolean",
"description": "Has held the permit for 2 years or more when the job ends. Default false."
},
"four_of_five_years": {
"type": "boolean",
"description": "Worked in at least 4 of the last 5 calendar years. Default true."
},
"thirty_percent_ruling": {
"type": "boolean",
"description": "Has the 30% ruling. Default false."
},
"work_history_start_year": {
"type": "number",
"description": "First calendar year with 208+ paid hours in NL or the EU. Default: the employment start year."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"gross_annual_income",
"price"
],
"properties": {
"price": {
"type": "number",
"description": "Purchase price of the home in euros"
},
"term_years": {
"type": "number",
"description": "Term in years. Default 30."
},
"loan_amount": {
"type": "number",
"description": "Mortgage amount. Default: the price (Dutch mortgages go up to 100% of the value)."
},
"other_monthly_debt": {
"type": "number",
"description": "Other monthly debt payments (student loan, car loan). Default 0."
},
"gross_annual_income": {
"type": "number",
"description": "Household gross annual income in euros (both partners together)"
},
"claimant_gross_income": {
"type": "number",
"description": "Gross income of the partner who takes the interest deduction. Default: the household income."
},
"interest_rate_percent": {
"type": "number",
"description": "Yearly interest rate in %, e.g. 3.9. Default 4. Use a current quote when you have one."
}
},
"additionalProperties": false
}| number |
| Mortgage interest rate, % a year. Default 3.9. |
| rent_increase_percent | number | Yearly rent increase, %. Default 3. |
| home_value_growth_percent | number | Yearly change in the home's value, %. Default 2. |
| investment_return_percent | number | What the down payment would earn if invested instead, % a year. Default 4. |
{
"type": "object",
"required": [
"monthly_rent",
"property_value"
],
"properties": {
"years": {
"type": "number",
"description": "Years to compare, 1-30. Default 10."
},
"down_payment": {
"type": "number",
"description": "Own money put in (also pays the buying costs), euros. Default 10% of the price."
},
"gross_income": {
"type": "number",
"description": "Gross income of the person who deducts the mortgage interest, euros a year. Default 60000."
},
"monthly_rent": {
"type": "number",
"description": "Rent now, euros a month"
},
"fiscal_partner": {
"type": "boolean",
"description": "Filing with a fiscal partner. Default false."
},
"property_value": {
"type": "number",
"description": "Price of the home to buy, euros"
},
"maintenance_percent": {
"type": "number",
"description": "Yearly maintenance and owners' association costs, % of the value. Default 1."
},
"interest_rate_percent": {
"type": "number",
"description": "Mortgage interest rate, % a year. Default 3.9."
},
"rent_increase_percent": {
"type": "number",
"description": "Yearly rent increase, %. Default 3."
},
"home_value_growth_percent": {
"type": "number",
"description": "Yearly change in the home's value, %. Default 2."
},
"investment_return_percent": {
"type": "number",
"description": "What the down payment would earn if invested instead, % a year. Default 4."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"gross_annual"
],
"properties": {
"start_year": {
"type": "number",
"description": "Year the ruling started (January assumed), 2019-2026. Default 2025."
},
"dutch_assets": {
"type": "number",
"description": "Savings and investments in the Netherlands, euros. Default 0."
},
"gross_annual": {
"type": "number",
"description": "Gross annual salary in euros"
},
"fiscal_partner": {
"type": "boolean",
"description": "Has a fiscal partner (double Box 3 allowance). Default false."
},
"foreign_savings": {
"type": "number",
"description": "Savings abroad, euros. Default 0."
},
"foreign_investments": {
"type": "number",
"description": "Investments abroad, euros. Default 0."
},
"partial_non_resident": {
"type": "boolean",
"description": "Chose partial non-resident status (only for rulings that started before 2024). Default false."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"salary"
],
"properties": {
"per": {
"enum": [
"year",
"month"
],
"type": "string",
"description": "Whether salary is per year or per month. Default year."
},
"permit": {
"enum": [
"hsm",
"bluecard"
],
"type": "string",
"description": "hsm = highly skilled migrant, bluecard = EU Blue Card. Default hsm."
},
"salary": {
"type": "number",
"description": "Gross salary in euros, as in the offer"
},
"under_30": {
"type": "boolean",
"description": "Applicant is under 30 on the day the application is filed. Default false."
},
"recent_graduate": {
"type": "boolean",
"description": "Graduated within the last 3 years or on an orientation-year permit (reduced norm). Default false."
},
"thirteenth_month": {
"enum": [
"none",
"lump",
"monthly"
],
"type": "string",
"description": "A 13th month: none, paid as a lump sum (does not count), or paid in 12 monthly parts (counts). Default none."
},
"includes_holiday_pay": {
"type": "boolean",
"description": "The salary amount includes the 8% holiday allowance. Default false."
}
},
"additionalProperties": false
}