Privacy Policy

What this app collects, what it sends to AI providers, and how to use your rights under the GDPR.

Last updated: 26 October 2026

Who we are

NL Tax Calculator is an independent project run by one person. It is not a company or a tax advisory firm. For questions about how your data is handled, email [email protected].

What we collect

Your filing numbers never reach our servers unless you use an AI feature

Everything you type into the calculator (your income, mortgage, savings, investments) is calculated in your browser and saved only to that browser's local storage (localStorage). It is never sent to our servers, never logged, and never visible to us, unless you explicitly use one of the AI features described below or generate a shareable link.

Account data
If you create an account: your email address and a securely hashed password, held by our authentication provider (Supabase).
Technical/usage data
IP address (last octet zeroed before storage), page visited, browser user-agent and time of each page view. We use this to detect abuse and understand how the site is used. Sign-in, sign-out and sign-up events are recorded in the same way.
Feedback form
Whatever you type, plus an optional name/email if you choose to give one. Your IP address is shortened to its /24 subnet before storage, so we do not keep the exact address.
Community Salary Insights (opt-in)
If you choose to share on this optional page: your salary is rounded into a 5,000 EUR-wide band server-side before storage (the exact figure is never kept), plus whether the 30% ruling applies and an optional country of origin. No account, name or IP address is stored with it, so a submission cannot be linked back to you.
AI feature usage
Which AI route was called, the model used, and the token count and estimated cost, for billing and abuse monitoring. The content of your questions or documents is not stored in this record.

AI features and what leaves our servers

Four optional features send data to third-party AI providers

Four features in this app call third-party AI models. All four require you to be signed in, and none of them work unless you actively use them.

Tax assistant chat
Your typed question, the conversation so far, and your current calculation (income figures, Box 3 balances, DTAA country and amounts) are sent to an AI model (OpenAI or Google Gemini, whichever is currently configured). We ask you not to type your BSN or bank account number, and automatically block messages that appear to contain one.
Document upload (AI-read)
The payslip, annual statement, or photo you upload is sent to OpenAI's vision model to read the numbers off it. The file itself is not stored on our server. It is processed in memory and then discarded. Many Dutch documents (a jaaropgave, for instance) show your BSN, IBAN, address, or phone number printed on them. Before the file is sent, we run automatic on-server text recognition (OCR) over it, including page-by-page for PDFs, and black out anything shaped like a BSN, IBAN, postcode, phone number, or email address, plus any name or address printed next to a label like "Naam:" or "Adres:". This runs for every upload with no action needed from you, but it is an automatic check, not a guarantee (poor scan quality, an unusual layout, or a field with no recognizable label can cause it to miss something), so please still black out sensitive details yourself first if you can.
Letter explainer (AI-read)
A letter you upload to the letter explainer gets the same automatic blacking-out of BSN, IBAN, names, addresses and contact details on every page before it is sent to OpenAI's vision model; if that step fails, the letter is not sent at all. The model returns only what the letter means, its dates and amounts, and is instructed not to repeat personal details. The file and the result are kept in memory only until you have seen the explanation, and are not stored.
Asking a verified adviser
Only when you send a question on the Ask a tax adviser page, and only after you tick the consent box: your typed question and your email address are emailed to the adviser you picked, who replies to you directly, and you get a copy. We do not keep a copy. Your calculation is never sent through our servers: you can download it on that page and send it to the adviser yourself. Any work and fees are between you and the adviser.
AI method review
A summary of your calculation (the same figures as the chat feature, without your name) is sent to a single AI model to sanity-check the tax rules applied. The specific model is configured by the site admin (Google Gemini, Mistral, or OpenAI). This feature shows its own consent notice the first time you use it.
Cover letter writer
When you press "Write my cover letter" (after ticking the consent box), the job ad you entered and your CV are sent to OpenAI to write one letter. From pasted CV text we first remove email addresses, phone numbers, address lines, BSN, IBAN and lines with date of birth, nationality or marital status; a PDF is sent as it is. Nothing you enter is stored on our servers; we log only that a letter was written (for the limit of 10 a day) and the token count, kept 12 months for billing. "Remember my CV" keeps the text in your own browser only. OpenAI does not use API data to train its models and may keep it up to 30 days for abuse monitoring.

Apart from the cover letter writer, which needs your CV (with contact details removed from pasted text), none of these features are designed to send your name, BSN or bank details. The AI provider (OpenAI, Google, or Mistral depending on configuration) processes the request on servers outside the EU/EEA under their own standard contractual clauses. We do not control their retention policies; see their own privacy policies for how long they keep API request data.

NL Salary Lens browser extension

What the extension reads, sends and stores

What it reads
Only on the job sites and the housing sites (Pararius, Funda, Kamernet) listed on the extension page: text containing a euro sign, to find salaries, rents and asking prices, and the words around a salary that state its terms (such as "incl. holiday allowance", "13th month" or "32 hours a week"), so that tag can use them. When you click "Cover letter for this job", also that one job ad (title, company, location, description). Never other websites, your messages or your profile.
What it sends
To calculate: the amounts it found and your settings (30% ruling, holiday allowance, pension %) to nltaxcalculator.nl; if you enter your current salary, that number too, to show the difference; on housing sites, the asking price of a home for sale (with your current salary, if set, for the tax refund). Nothing identifies the amounts as yours. It also checks which features are switched on and the latest version number. The cover letter button opens the job ad on our cover letter page; it is sent on only when you press "Write my cover letter" there (see AI features above).
What it stores
Your settings in the browser's extension storage (synced with your browser profile, like any extension setting), and saved jobs, your rent and your current salary on this device only, never synced. Removing the extension deletes them.
Usage counts (optional, off by default)
If you switch them on: event counts such as "tags shown" or "job saved" with the job site's name (for example www.linkedin.com). No IP address, page content or identifier is stored with them. They are kept with our other analytics for at most 90 days.
Account connection (only if sign-in is required)
If the site requires sign-in for the extension, "Connect account" gives the extension a token that identifies your account, valid 30 days and stored on this device only. It is sent with each calculation so the server can check it; it is not linked to the amounts you look up, which are not stored.
On our server
The amounts, the current salary and asking prices are calculated and not stored. "Compare" with 3 to 5 saved jobs opens a page that has the job titles and salaries in its link and calculates them in your browser; nothing is stored. Like every request, they pass our normal rate limiting, which uses your IP address for at most a minute.

Partner links

How we earn from links to other services

Some pages show a box marked "Partner" with a link to a service that fits the topic, such as money transfers, a bank account, health insurance comparison or mortgage advice. If you use that link and become a customer, the partner may pay us a commission. It costs you nothing extra.

Partner links never change a calculation, a figure or the order of anything on this site, and they are not advice: compare for yourself before you choose. When you click one, we count the click (which partner and which page), the same way as other actions on the site; the partner then handles your visit under its own privacy policy.

AI assistant connector (ChatGPT, Claude)

What reaches us when an assistant uses our calculators

What we receive
When you have connected an AI assistant to nltaxcalculator.nl/dutch-tax/api/mcp, the assistant sends us only the inputs of one calculation, such as a gross salary, a savings amount or a number of children. Not your name, account, chat or documents: the assistant decides what to send, and our tools only accept numbers, dates, yes/no choices and short lookup words (such as a Dutch term to explain or a word to search the official figures). The guided tasks take only a choice such as a tax year or "arriving or leaving"; a letter or payslip you discuss stays in your chat with the assistant.
What we keep
Nothing of the inputs or results. Our server logs record which tool, reference resource or guided task was used and when, without the inputs, like they record every request to the site, to keep the service running. Rate limiting uses the IP address of the calling service (normally the assistant provider, not you) for at most a minute.
No account
The connector needs no account, key or sign-in, sets no cookies and is the same for everyone.
The assistant itself
Your conversation is handled by the assistant provider (for example OpenAI or Anthropic) under their own privacy policy; we never see it.

Deadline reminders by email

If you ask the tax calendar to email you before your dates, we store your email address, your language and your answers to the calendar questions (yes/no answers and a few dates, such as when your 30% ruling started). Nothing is sent until you click the link in the confirmation email. After that you get one email a week before each date in your calendar, and a log of which dates we reminded you of, so none is sent twice.

We use these details only to send the reminders, through our email provider; we do not sell or share them. Every reminder has an unsubscribe link, and unsubscribing deletes your address, your answers and the log straight away. A signup that is never confirmed is deleted too.

Cookies and browser storage

Session cookie
If you sign in, a strictly-necessary cookie keeps you logged in. It doesn't track you across other sites and isn't used for advertising.
localStorage
Your filing inputs, any scenarios you save and your light/dark theme choice are saved in your browser only, so the calculator remembers your numbers next time you visit. This never leaves your device.
Ad cookies (Google AdSense)
Only set if you click "Accept" on the cookie notice. They are used to show ads and, if personalized, to base them on your activity. If you click "Reject" or ignore the notice, nothing ad-related loads: no ad script, no ad cookies and no requests to Google's ad servers. Change your choice anytime via "Cookie settings" in the footer, or manage Google's own ad personalization directly at adssettings.google.com.

The session cookie and localStorage above are strictly necessary for the app to function (not tracking or advertising), which under the GDPR/ePrivacy rules doesn't legally require consent. Ad cookies are not needed for the app to work, so we ask first via the cookie notice's Accept/Reject choice rather than just disclosing them. You're also free to clear your browser's storage at any time, which resets the calculator to blank and, separately, resets your cookie choice.

How long we keep data

Account data
Kept while your account exists. Deleted on request (see Your rights below).
Page visits, auth events, error logs
Purged automatically after 90 days.
AI usage records (cost/token counts, no content)
Kept for 12 months for billing history, then purged.
Feedback messages
Kept until you ask us to delete a specific message. They help us spot recurring problems.
Community Salary Insights submissions
Kept indefinitely to build up the overall picture. Because a submission is never linked to any account, session, or IP address, there is no way for us to identify or remove a specific one on request.

Your rights

Under the GDPR, you can ask us to:

Email [email protected] to use any of these rights. We reply within 30 days. Since your filing data already lives only in your own browser, "access" and "erasure" for that specific data is as simple as opening your browser's storage settings or clicking "clear saved data" in the app itself.

Security measures

Passwords are hashed by our authentication provider, never stored in plain text. All traffic is encrypted (HTTPS). API routes that call AI models or return sensitive data require you to be signed in, are rate-limited per IP address, and are screened for prompt-injection and PII before your message reaches an AI model. Admin access to logs and user management is restricted to a fixed allow-list of email addresses.

Changes to this policy

If this policy changes materially, we'll update the date at the top of this page. Continued use of the app after a change means you accept the updated policy.