Belastingdienst APIbelastingdienst.nl ↗
Access Dutch tax brackets, VAT rates, payroll rules, and more from the official Belastingdienst website. 14 endpoints covering income, corporate, and property taxes.
What is the Belastingdienst API?
The Belastingdienst API provides structured access to official Dutch tax information across 14 endpoints, covering everything from Box 1 income tax brackets to energy tax rates and AOW pension data. The get_income_tax_brackets endpoint returns rate bands with exact lower/upper bounds and percentages for 2025 and 2026, while search lets you run full-text queries across all Belastingdienst information pages to locate any topic by Dutch keyword.
curl -X POST 'https://api.parse.bot/scraper/7bf4673a-67d5-43de-b9da-266551d6c913/search' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"count": "10",
"query": "btw aangifte"
}'Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace belastingdienst-nl-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Belastingdienst_API SDK — bounded, re-runnable; every call capped."""
from parse_apis.Belastingdienst_API import Belastingdienst, TaxType, PageNotFound
client = Belastingdienst()
# Search for tax info pages on VAT returns
for result in client.pages.search(query="btw aangifte", limit=3):
print(result.title, result.url)
# Get income tax brackets for 2025
for bracket in client.income_tax_results.get(year="2025", limit=3):
print(bracket.bracket, bracket.income_range, bracket.rate_percent)
# Get only BPM motor vehicle tax data using the TaxType enum
for item in client.motor_vehicle_tax_results.get(year="2025", tax_type=TaxType.BPM, limit=1):
print(item.bpm.description, item.bpm.source_url)
# Drill down: fetch full page from a search result
hit = client.pages.search(query="inkomstenbelasting", limit=1).first()
try:
page = hit.details()
print(page.title, page.meta_description)
except PageNotFound as e:
print("page gone:", e.path)
print("exercised: pages.search, income_tax_results.get, motor_vehicle_tax_results.get, SearchResult.details")
Full-text search over all Dutch tax information pages. Returns ranked results with title, description, and URL. Each item is a summary with enough context to decide which page to fetch in full.
| Param | Type | Description |
|---|---|---|
| count | integer | Number of results to return (1-100). |
| queryrequired | string | Search terms in Dutch (e.g. 'btw aangifte', 'inkomstenbelasting'). |
{
"type": "object",
"fields": {
"query": "The search query that was executed",
"results": "Array of search result items with title, description, and url",
"estimated_count": "Total estimated matching results across the index"
},
"sample": {
"data": {
"query": "btw aangifte",
"results": [
{
"url": "https://www.belastingdienst.nl/wps/wcm/connect/nl/jonge-ondernemers/jonge-ondernemers",
"title": "Jonge ondernemers en de btw-aangifte",
"description": "We willen jonge ondernemers graag helpen met de btw-aangifte. Een foutje is namelijk snel gemaakt."
},
{
"url": "https://www.belastingdienst.nl/wps/wcm/connect/nl/btw/content/ik-moet-btw-aangifte-doen-hoe-vul-ik-die-in",
"title": "Ik moet btw-aangifte doen - hoe vul ik die in?",
"description": "Hebt u hulp nodig met het invullen van de btw-aangifte? Op deze pagina leggen we u stap voor stap uit hoe u de btw-aangifte invult."
}
],
"estimated_count": 449
},
"status": "success"
}
}About the Belastingdienst API
Tax Rate Endpoints
The API exposes dedicated endpoints for the major Dutch tax categories. get_income_tax_brackets returns Box 1 bracket objects with year, bracket, income_range, lower_bound, upper_bound, and rate_percent fields, filterable by year. get_box2_box3_rates covers substantial interest income (Box 2) with bracket thresholds and rates, alongside the Box 3 flat rate for savings and investments. get_corporate_tax_rates returns the vennootschapsbelasting tiered structure with profit threshold, low rate, and high rate. All rate endpoints accept an optional year parameter; omitting it returns all available years.
Payroll, VAT, and Property Taxes
get_payroll_tax_info returns werkkostenregeling (WKR) vrije ruimte percentage tiers, reiskostenvergoeding per kilometre, and 30%-ruling salary thresholds — all per year. get_vat_rates returns the four BTW categories (standard 21%, reduced 9%, zero 0%, exempt) with descriptions of which goods and services fall under each. Property-related endpoints include get_transfer_tax_rates, which returns residential_rate_percent, commercial_rate_percent, and a first_time_buyer_exemption object describing the startersvrijstelling, and get_inheritance_gift_tax_brackets, which breaks down erfbelasting rates by relationship category (partner/children, grandchildren, others).
Search and Full-Page Content
The search endpoint accepts a Dutch-language query string and an optional count (1–100), returning ranked results with title, description, url, and estimated_count. get_page fetches the full content of any Belastingdienst page by its path segment, returning structured sections (each tagged as h1–h4, p, or li), links with text and URL, title, and meta_description. This pair makes it possible to locate and read any guidance page programmatically.
Specialised Tax Endpoints
get_energy_tax_rates covers energiebelasting rates per unit across consumption tiers for gas (€/m³) and electricity (€/kWh) for years 2019–2026, including ODE surcharges. get_motor_vehicle_tax_rates returns BPM CO2-based rate tables and motorrijtuigenbelasting general information. get_aow_pension_info provides AOW eligibility age, premium rates, transition monthly rates, and the tax brackets applicable to AOW holders, across multiple tax years.
The Belastingdienst API is a managed, monitored endpoint for belastingdienst.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when belastingdienst.nl changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official belastingdienst.nl API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Dutch net salary calculator using Box 1 brackets from
get_income_tax_bracketsand travel allowance data fromget_payroll_tax_info. - Automate annual tax compliance checks by querying updated corporate tax tiers via
get_corporate_tax_rateseach budget cycle. - Populate a BTW invoicing tool with the correct VAT category and rate for each product type using
get_vat_rates. - Calculate property acquisition costs for Dutch real estate transactions by combining residential and commercial rates from
get_transfer_tax_rates. - Retrieve current 30%-ruling thresholds for expat HR onboarding workflows via
get_payroll_tax_info. - Search Belastingdienst guidance by keyword using
searchand surface the full article text viaget_pagefor a Dutch tax Q&A assistant. - Track year-on-year changes in energy tax rates across consumption bands using
get_energy_tax_rateswith a year filter.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the Belastingdienst have an official developer API?+
What does `get_tax_credits` return and how is it structured?+
get_tax_credits returns an array of tax_credits objects per year, each with credit_name, label, and a details field that includes income ranges, amounts, and phase-out formulas as published on the Belastingdienst site. It covers algemene heffingskorting and arbeidskorting. Filter by year (e.g. '2025' or '2026') to limit results to a single tax year.Does the API cover gift tax (schenkbelasting) separately from inheritance tax?+
get_inheritance_gift_tax_brackets combines erfbelasting bracket data by relationship category. Schenkbelasting exemption tables and annual gift allowances are not returned as a separate structured endpoint. You can fork the API on Parse and revise it to add an endpoint dedicated to gift tax thresholds and exemptions.How current is the tax rate data?+
source_url field returned by most rate endpoints points to the exact page on belastingdienst.nl the data originates from, so you can verify the publication date directly. The Belastingdienst typically updates rates pages in late autumn for the following tax year.Does the API return data on toeslagen (benefits/allowances) such as zorgtoeslag or huurtoeslag?+
search endpoint can locate Belastingdienst pages about toeslagen, and get_page will fetch their text content, but there is no structured toeslag-specific endpoint. You can fork the API on Parse and revise it to add structured endpoints for zorgtoeslag income thresholds or huurtoeslag tables.