Skip to content

Instantly share code, notes, and snippets.

@avar
Last active August 15, 2024 15:13
Show Gist options
  • Save avar/1277841 to your computer and use it in GitHub Desktop.
Save avar/1277841 to your computer and use it in GitHub Desktop.
Calculate your income in The Netherlands with and without a 30% ruling.
# To check if this is up-to-date with the tax rates go to
# http://www.expatax.nl/tax-rates-2016.php and see if there's anything
# newer there.
#
# I make no guarantees that any of this is correct. I calculated this
# at the time and have been updating it when new tax rates come along
# because people keep finding this useful.
#
# There's also an interactive JS version of this created by
# @stevermeister at
# https://github.com/stevermeister/dutch-tax-income-calculator
# although the two seem to show conflicting values and I have no idea
# which one is correct...
use strict;
use warnings;
use Text::TabularDisplay;
use List::Util qw(sum);
my $start = 30_000 || $ARGV[0];
my $end = 200_000 || $ARGV[1];
my $step = 1_000 || $ARGV[2];
my @data;
for ( my $salary = $start ; $salary <= $end ; $salary += $step ) {
push @data => [
# Your Gross income
eurofy($salary),
# Without 30% ruling
eurofy( $salary - taxes_for($salary) ),
percentify( taxes_for($salary), $salary ),
# With 30% ruling
eurofy( $salary - taxes_for( $salary * .7 ) ),
percentify( taxes_for( $salary * .7 ), $salary ),
];
}
my $table = Text::TabularDisplay->new(
"Gross income\n(before taxes)",
"Net income\n(after taxes)",
"Tax rate",
"Net income\n(after taxes,\nwith 30% ruling)",
"Tax rate",
);
$table->add(@$_) for @data;
print $table->render, "\n";
exit;
sub taxes_for {
my $income = shift;
my @tax_brackets = (
# difference tax rate
[ 19_922 => .3655 ],
[ 66_421 - 19_922 => .4040 ],
[ 0 => .52 ],
);
my $money_left = $income;
my $taxes = 0;
foreach my $bracket (@tax_brackets) {
my ( $progressive_amount, $taxes_for ) = @$bracket;
my $taxable_amount = $money_left;
if ( $taxable_amount > $progressive_amount ) {
$taxable_amount = $progressive_amount if $progressive_amount;
}
$money_left -= $taxable_amount;
$taxes += $taxable_amount * $taxes_for;
last unless $money_left;
}
return $taxes;
}
# From perlfaq5
sub commify {
local $_ = shift;
1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
return $_;
}
sub percentify {
my ( $amount, $total ) = @_;
return sprintf "%.1f%%" => ( ( 100 * $amount ) / $total );
}
sub eurofy {
my ($number) = @_;
# Round it
$number = int $number;
return sprintf( "%s EUR", commify($number) );
}
__DATA__
$ perl 30-income-calculon.pl
+----------------+---------------+----------+------------------+----------+
| Gross income | Net income | Tax rate | Net income | Tax rate |
| (before taxes) | (after taxes) | | (after taxes, | |
| | | | with 30% ruling) | |
+----------------+---------------+----------+------------------+----------+
| 30,000 EUR | 18,646 EUR | 37.8% | 22,282 EUR | 25.7% |
| 31,000 EUR | 19,242 EUR | 37.9% | 23,000 EUR | 25.8% |
| 32,000 EUR | 19,838 EUR | 38.0% | 23,717 EUR | 25.9% |
| 33,000 EUR | 20,434 EUR | 38.1% | 24,434 EUR | 26.0% |
| 34,000 EUR | 21,030 EUR | 38.1% | 25,151 EUR | 26.0% |
| 35,000 EUR | 21,626 EUR | 38.2% | 25,868 EUR | 26.1% |
| 36,000 EUR | 22,222 EUR | 38.3% | 26,586 EUR | 26.1% |
| 37,000 EUR | 22,818 EUR | 38.3% | 27,303 EUR | 26.2% |
| 38,000 EUR | 23,414 EUR | 38.4% | 28,020 EUR | 26.3% |
| 39,000 EUR | 24,010 EUR | 38.4% | 28,737 EUR | 26.3% |
| 40,000 EUR | 24,606 EUR | 38.5% | 29,454 EUR | 26.4% |
| 41,000 EUR | 25,202 EUR | 38.5% | 30,172 EUR | 26.4% |
| 42,000 EUR | 25,798 EUR | 38.6% | 30,889 EUR | 26.5% |
| 43,000 EUR | 26,394 EUR | 38.6% | 31,606 EUR | 26.5% |
| 44,000 EUR | 26,990 EUR | 38.7% | 32,323 EUR | 26.5% |
| 45,000 EUR | 27,586 EUR | 38.7% | 33,040 EUR | 26.6% |
| 46,000 EUR | 28,182 EUR | 38.7% | 33,758 EUR | 26.6% |
| 47,000 EUR | 28,778 EUR | 38.8% | 34,475 EUR | 26.6% |
| 48,000 EUR | 29,374 EUR | 38.8% | 35,192 EUR | 26.7% |
| 49,000 EUR | 29,970 EUR | 38.8% | 35,909 EUR | 26.7% |
| 50,000 EUR | 30,566 EUR | 38.9% | 36,626 EUR | 26.7% |
| 51,000 EUR | 31,162 EUR | 38.9% | 37,344 EUR | 26.8% |
| 52,000 EUR | 31,758 EUR | 38.9% | 38,061 EUR | 26.8% |
| 53,000 EUR | 32,354 EUR | 39.0% | 38,778 EUR | 26.8% |
| 54,000 EUR | 32,950 EUR | 39.0% | 39,495 EUR | 26.9% |
| 55,000 EUR | 33,546 EUR | 39.0% | 40,212 EUR | 26.9% |
| 56,000 EUR | 34,142 EUR | 39.0% | 40,930 EUR | 26.9% |
| 57,000 EUR | 34,738 EUR | 39.1% | 41,647 EUR | 26.9% |
| 58,000 EUR | 35,334 EUR | 39.1% | 42,364 EUR | 27.0% |
| 59,000 EUR | 35,930 EUR | 39.1% | 43,081 EUR | 27.0% |
| 60,000 EUR | 36,526 EUR | 39.1% | 43,798 EUR | 27.0% |
| 61,000 EUR | 37,122 EUR | 39.1% | 44,516 EUR | 27.0% |
| 62,000 EUR | 37,718 EUR | 39.2% | 45,233 EUR | 27.0% |
| 63,000 EUR | 38,314 EUR | 39.2% | 45,950 EUR | 27.1% |
| 64,000 EUR | 38,910 EUR | 39.2% | 46,667 EUR | 27.1% |
| 65,000 EUR | 39,506 EUR | 39.2% | 47,384 EUR | 27.1% |
| 66,000 EUR | 40,102 EUR | 39.2% | 48,102 EUR | 27.1% |
| 67,000 EUR | 40,631 EUR | 39.4% | 48,819 EUR | 27.1% |
| 68,000 EUR | 41,111 EUR | 39.5% | 49,536 EUR | 27.2% |
| 69,000 EUR | 41,591 EUR | 39.7% | 50,253 EUR | 27.2% |
| 70,000 EUR | 42,071 EUR | 39.9% | 50,970 EUR | 27.2% |
| 71,000 EUR | 42,551 EUR | 40.1% | 51,688 EUR | 27.2% |
| 72,000 EUR | 43,031 EUR | 40.2% | 52,405 EUR | 27.2% |
| 73,000 EUR | 43,511 EUR | 40.4% | 53,122 EUR | 27.2% |
| 74,000 EUR | 43,991 EUR | 40.6% | 53,839 EUR | 27.2% |
| 75,000 EUR | 44,471 EUR | 40.7% | 54,556 EUR | 27.3% |
| 76,000 EUR | 44,951 EUR | 40.9% | 55,274 EUR | 27.3% |
| 77,000 EUR | 45,431 EUR | 41.0% | 55,991 EUR | 27.3% |
| 78,000 EUR | 45,911 EUR | 41.1% | 56,708 EUR | 27.3% |
| 79,000 EUR | 46,391 EUR | 41.3% | 57,425 EUR | 27.3% |
| 80,000 EUR | 46,871 EUR | 41.4% | 58,142 EUR | 27.3% |
| 81,000 EUR | 47,351 EUR | 41.5% | 58,860 EUR | 27.3% |
| 82,000 EUR | 47,831 EUR | 41.7% | 59,577 EUR | 27.3% |
| 83,000 EUR | 48,311 EUR | 41.8% | 60,294 EUR | 27.4% |
| 84,000 EUR | 48,791 EUR | 41.9% | 61,011 EUR | 27.4% |
| 85,000 EUR | 49,271 EUR | 42.0% | 61,728 EUR | 27.4% |
| 86,000 EUR | 49,751 EUR | 42.1% | 62,446 EUR | 27.4% |
| 87,000 EUR | 50,231 EUR | 42.3% | 63,163 EUR | 27.4% |
| 88,000 EUR | 50,711 EUR | 42.4% | 63,880 EUR | 27.4% |
| 89,000 EUR | 51,191 EUR | 42.5% | 64,597 EUR | 27.4% |
| 90,000 EUR | 51,671 EUR | 42.6% | 65,314 EUR | 27.4% |
| 91,000 EUR | 52,151 EUR | 42.7% | 66,032 EUR | 27.4% |
| 92,000 EUR | 52,631 EUR | 42.8% | 66,749 EUR | 27.4% |
| 93,000 EUR | 53,111 EUR | 42.9% | 67,466 EUR | 27.5% |
| 94,000 EUR | 53,591 EUR | 43.0% | 68,183 EUR | 27.5% |
| 95,000 EUR | 54,071 EUR | 43.1% | 68,891 EUR | 27.5% |
| 96,000 EUR | 54,551 EUR | 43.2% | 69,527 EUR | 27.6% |
| 97,000 EUR | 55,031 EUR | 43.3% | 70,163 EUR | 27.7% |
| 98,000 EUR | 55,511 EUR | 43.4% | 70,799 EUR | 27.8% |
| 99,000 EUR | 55,991 EUR | 43.4% | 71,435 EUR | 27.8% |
| 100,000 EUR | 56,471 EUR | 43.5% | 72,071 EUR | 27.9% |
| 101,000 EUR | 56,951 EUR | 43.6% | 72,707 EUR | 28.0% |
| 102,000 EUR | 57,431 EUR | 43.7% | 73,343 EUR | 28.1% |
| 103,000 EUR | 57,911 EUR | 43.8% | 73,979 EUR | 28.2% |
| 104,000 EUR | 58,391 EUR | 43.9% | 74,615 EUR | 28.3% |
| 105,000 EUR | 58,871 EUR | 43.9% | 75,251 EUR | 28.3% |
| 106,000 EUR | 59,351 EUR | 44.0% | 75,887 EUR | 28.4% |
| 107,000 EUR | 59,831 EUR | 44.1% | 76,523 EUR | 28.5% |
| 108,000 EUR | 60,311 EUR | 44.2% | 77,159 EUR | 28.6% |
| 109,000 EUR | 60,791 EUR | 44.2% | 77,795 EUR | 28.6% |
| 110,000 EUR | 61,271 EUR | 44.3% | 78,431 EUR | 28.7% |
| 111,000 EUR | 61,751 EUR | 44.4% | 79,067 EUR | 28.8% |
| 112,000 EUR | 62,231 EUR | 44.4% | 79,703 EUR | 28.8% |
| 113,000 EUR | 62,711 EUR | 44.5% | 80,339 EUR | 28.9% |
| 114,000 EUR | 63,191 EUR | 44.6% | 80,975 EUR | 29.0% |
| 115,000 EUR | 63,671 EUR | 44.6% | 81,611 EUR | 29.0% |
| 116,000 EUR | 64,151 EUR | 44.7% | 82,247 EUR | 29.1% |
| 117,000 EUR | 64,631 EUR | 44.8% | 82,883 EUR | 29.2% |
| 118,000 EUR | 65,111 EUR | 44.8% | 83,519 EUR | 29.2% |
| 119,000 EUR | 65,591 EUR | 44.9% | 84,155 EUR | 29.3% |
| 120,000 EUR | 66,071 EUR | 44.9% | 84,791 EUR | 29.3% |
| 121,000 EUR | 66,551 EUR | 45.0% | 85,427 EUR | 29.4% |
| 122,000 EUR | 67,031 EUR | 45.1% | 86,063 EUR | 29.5% |
| 123,000 EUR | 67,511 EUR | 45.1% | 86,699 EUR | 29.5% |
| 124,000 EUR | 67,991 EUR | 45.2% | 87,335 EUR | 29.6% |
| 125,000 EUR | 68,471 EUR | 45.2% | 87,971 EUR | 29.6% |
| 126,000 EUR | 68,951 EUR | 45.3% | 88,607 EUR | 29.7% |
| 127,000 EUR | 69,431 EUR | 45.3% | 89,243 EUR | 29.7% |
| 128,000 EUR | 69,911 EUR | 45.4% | 89,879 EUR | 29.8% |
| 129,000 EUR | 70,391 EUR | 45.4% | 90,515 EUR | 29.8% |
| 130,000 EUR | 70,871 EUR | 45.5% | 91,151 EUR | 29.9% |
| 131,000 EUR | 71,351 EUR | 45.5% | 91,787 EUR | 29.9% |
| 132,000 EUR | 71,831 EUR | 45.6% | 92,423 EUR | 30.0% |
| 133,000 EUR | 72,311 EUR | 45.6% | 93,059 EUR | 30.0% |
| 134,000 EUR | 72,791 EUR | 45.7% | 93,695 EUR | 30.1% |
| 135,000 EUR | 73,271 EUR | 45.7% | 94,331 EUR | 30.1% |
| 136,000 EUR | 73,751 EUR | 45.8% | 94,967 EUR | 30.2% |
| 137,000 EUR | 74,231 EUR | 45.8% | 95,603 EUR | 30.2% |
| 138,000 EUR | 74,711 EUR | 45.9% | 96,239 EUR | 30.3% |
| 139,000 EUR | 75,191 EUR | 45.9% | 96,875 EUR | 30.3% |
| 140,000 EUR | 75,671 EUR | 45.9% | 97,511 EUR | 30.3% |
| 141,000 EUR | 76,151 EUR | 46.0% | 98,147 EUR | 30.4% |
| 142,000 EUR | 76,631 EUR | 46.0% | 98,783 EUR | 30.4% |
| 143,000 EUR | 77,111 EUR | 46.1% | 99,419 EUR | 30.5% |
| 144,000 EUR | 77,591 EUR | 46.1% | 100,055 EUR | 30.5% |
| 145,000 EUR | 78,071 EUR | 46.2% | 100,691 EUR | 30.6% |
| 146,000 EUR | 78,551 EUR | 46.2% | 101,327 EUR | 30.6% |
| 147,000 EUR | 79,031 EUR | 46.2% | 101,963 EUR | 30.6% |
| 148,000 EUR | 79,511 EUR | 46.3% | 102,599 EUR | 30.7% |
| 149,000 EUR | 79,991 EUR | 46.3% | 103,235 EUR | 30.7% |
| 150,000 EUR | 80,471 EUR | 46.4% | 103,871 EUR | 30.8% |
| 151,000 EUR | 80,951 EUR | 46.4% | 104,507 EUR | 30.8% |
| 152,000 EUR | 81,431 EUR | 46.4% | 105,143 EUR | 30.8% |
| 153,000 EUR | 81,911 EUR | 46.5% | 105,779 EUR | 30.9% |
| 154,000 EUR | 82,391 EUR | 46.5% | 106,415 EUR | 30.9% |
| 155,000 EUR | 82,871 EUR | 46.5% | 107,051 EUR | 30.9% |
| 156,000 EUR | 83,351 EUR | 46.6% | 107,687 EUR | 31.0% |
| 157,000 EUR | 83,831 EUR | 46.6% | 108,323 EUR | 31.0% |
| 158,000 EUR | 84,311 EUR | 46.6% | 108,959 EUR | 31.0% |
| 159,000 EUR | 84,791 EUR | 46.7% | 109,595 EUR | 31.1% |
| 160,000 EUR | 85,271 EUR | 46.7% | 110,231 EUR | 31.1% |
| 161,000 EUR | 85,751 EUR | 46.7% | 110,867 EUR | 31.1% |
| 162,000 EUR | 86,231 EUR | 46.8% | 111,503 EUR | 31.2% |
| 163,000 EUR | 86,711 EUR | 46.8% | 112,139 EUR | 31.2% |
| 164,000 EUR | 87,191 EUR | 46.8% | 112,775 EUR | 31.2% |
| 165,000 EUR | 87,671 EUR | 46.9% | 113,411 EUR | 31.3% |
| 166,000 EUR | 88,151 EUR | 46.9% | 114,047 EUR | 31.3% |
| 167,000 EUR | 88,631 EUR | 46.9% | 114,683 EUR | 31.3% |
| 168,000 EUR | 89,111 EUR | 47.0% | 115,319 EUR | 31.4% |
| 169,000 EUR | 89,591 EUR | 47.0% | 115,955 EUR | 31.4% |
| 170,000 EUR | 90,071 EUR | 47.0% | 116,591 EUR | 31.4% |
| 171,000 EUR | 90,551 EUR | 47.0% | 117,227 EUR | 31.4% |
| 172,000 EUR | 91,031 EUR | 47.1% | 117,863 EUR | 31.5% |
| 173,000 EUR | 91,511 EUR | 47.1% | 118,499 EUR | 31.5% |
| 174,000 EUR | 91,991 EUR | 47.1% | 119,135 EUR | 31.5% |
| 175,000 EUR | 92,471 EUR | 47.2% | 119,771 EUR | 31.6% |
| 176,000 EUR | 92,951 EUR | 47.2% | 120,407 EUR | 31.6% |
| 177,000 EUR | 93,431 EUR | 47.2% | 121,043 EUR | 31.6% |
| 178,000 EUR | 93,911 EUR | 47.2% | 121,679 EUR | 31.6% |
| 179,000 EUR | 94,391 EUR | 47.3% | 122,315 EUR | 31.7% |
| 180,000 EUR | 94,871 EUR | 47.3% | 122,951 EUR | 31.7% |
| 181,000 EUR | 95,351 EUR | 47.3% | 123,587 EUR | 31.7% |
| 182,000 EUR | 95,831 EUR | 47.3% | 124,223 EUR | 31.7% |
| 183,000 EUR | 96,311 EUR | 47.4% | 124,859 EUR | 31.8% |
| 184,000 EUR | 96,791 EUR | 47.4% | 125,495 EUR | 31.8% |
| 185,000 EUR | 97,271 EUR | 47.4% | 126,131 EUR | 31.8% |
| 186,000 EUR | 97,751 EUR | 47.4% | 126,767 EUR | 31.8% |
| 187,000 EUR | 98,231 EUR | 47.5% | 127,403 EUR | 31.9% |
| 188,000 EUR | 98,711 EUR | 47.5% | 128,039 EUR | 31.9% |
| 189,000 EUR | 99,191 EUR | 47.5% | 128,675 EUR | 31.9% |
| 190,000 EUR | 99,671 EUR | 47.5% | 129,311 EUR | 31.9% |
| 191,000 EUR | 100,151 EUR | 47.6% | 129,947 EUR | 32.0% |
| 192,000 EUR | 100,631 EUR | 47.6% | 130,583 EUR | 32.0% |
| 193,000 EUR | 101,111 EUR | 47.6% | 131,219 EUR | 32.0% |
| 194,000 EUR | 101,591 EUR | 47.6% | 131,855 EUR | 32.0% |
| 195,000 EUR | 102,071 EUR | 47.7% | 132,491 EUR | 32.1% |
| 196,000 EUR | 102,551 EUR | 47.7% | 133,127 EUR | 32.1% |
| 197,000 EUR | 103,031 EUR | 47.7% | 133,763 EUR | 32.1% |
| 198,000 EUR | 103,511 EUR | 47.7% | 134,399 EUR | 32.1% |
| 199,000 EUR | 103,991 EUR | 47.7% | 135,035 EUR | 32.1% |
| 200,000 EUR | 104,471 EUR | 47.8% | 135,671 EUR | 32.2% |
+----------------+---------------+----------+------------------+----------+
@l-sala
Copy link

l-sala commented Feb 25, 2015

Hi! I do not understand your calculations. For a gross salary of 37.000, the actual net income (2015) is around 300€ lower than the real net income. Do some categories have special rates and/or other tax discounts?
This is also confirmed by this website, which calculations are closer to the real net income: http://www.expatax.nl/calculations/grosstonet/gross-net.htm

@chrisjbrown
Copy link

Also agree with @Mollan86. Net income is far great than my real net income.

@avar
Copy link
Author

avar commented Aug 30, 2015

Thanks. I've updated this just now for the 2015 rates. Sorry about the delay everyone, just noticed when someone linked to this and I saw it was still using 2014, and this whole discussion that I'd missed.

@avar
Copy link
Author

avar commented Aug 30, 2015

@stevermeister: I added a link to yours at the top. Also our two versions show different values, yours allows you to calculate with accounting for age & social security. But the values are always slightly different, do you know what mistake I've made here?

This table was never meant to be your fully tax story, just an approximation to show how much of a difference the 30% ruling made. But I think at the time I wrote it it was accurate for that assuming a spherical cow in a vacuum...

@gimmi81
Copy link

gimmi81 commented Feb 20, 2016

The data is slightly different than other online calculators, which seem more accurate.
Could it be because of the exclusion of tax credits in your table, that i see on other websites?

http://thetax.nl/

@avar
Copy link
Author

avar commented Mar 16, 2016

@konstantin-gorbunov Sorry about the late reply. I bumped this for the 2016 rates.

@gimmi81 Yes for sure there's much better calculators out there now, although this one should still be 100% correct when not taking into account the various deductibles.

Looking at http://thetax.nl though with say 100K EUR / yearly with 30% and social security it yields 74365 but mine does 72071. I don't know why.

I mainly wrote it to give people a ballpark idea of what they might expect without the deductibles.

@avar
Copy link
Author

avar commented Mar 16, 2016

@stevermeister: If you know why our two calculators are off that would be super-useful info :)

@zubivan
Copy link

zubivan commented Jul 5, 2016

Thx, still quite accurate, though we can update it a bit for 2016.

@shubzinator
Copy link

Can we get an update for 2017? :)

@einarjon
Copy link

einarjon commented Apr 3, 2017

@stevermeister/@avar: I compared these a while ago (early/mid-2016), and I noticed that when adding "General Tax Credit" and "Labour Tax Credit" to this calculator, the two outcomes only differed by about €1.

@DutchUmbrella
Copy link

@koraykupe
Copy link

koraykupe commented Jun 30, 2017

How income taxes is calculated?

Let's assume that taxable income is 37000

2017 Total rate is 36.55% up to € 19,982
and 40.80% for € 19,982 to € 67,072

Is the tax amount 37000 * 40.80 = 15.096 or (19982*36.55) + (37000-19982)*40.80 = 7303 + 6943 = 14.246?

and how is personal tax credit and Labour tax credit calculated?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment