Is there more nuisance in my neighbourhood than last year?
The police count nuisance reports per neighbourhood and per month, so this question has a real answer: put the same months of this year and last year side by side. Across the Netherlands, 380,026 reports came in from January to September 2026, 7.9% more than in the same months of 2025. More than four fifths of that rise comes from reports about confused persons (from 126,584 to 149,519). In Utrecht the total fell by 2%, while Lunetten-Zuid and Transwijk-Noord had three quarters more reports. A report is not an incident, small neighbourhoods swing a lot, and before March 2021 the police registered differently.
Short answerNationally, yes: 380,026 nuisance reports from January to September 2026, against 352,128 in the same months of 2025 (+7.9%). It differs a lot per neighbourhood. Run the script with your own municipality code.
Registered nuisance: 462 thousand reports per year in 2025, 65% more than in 2012
Registered nuisance, 2012 – 2025, in thousand reports per year. The highest point was 2021 (537).
Step by step
- 1
Find your neighbourhood code (BU…) in the boundary map.
- 2
Fetch that neighbourhood's monthly figures from the nuisance table.
- 3
Divide by residents from the key figures for a fair comparison.
Join on buurtcode (BU)
Start with AI
Paste this prompt into Claude or ChatGPT. It names the real endpoints, the join key and the pitfalls, so the assistant writes usable code straight away. Always check the result against the source itself.
Build a small web page (one HTML file with JavaScript) where I pick a municipality and see, per neighbourhood, whether there is more or less nuisance this year than last year.
Data: police figures via Statistics Netherlands (CBS), OData v3, no key, CORS is open:
https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=Overlast eq '0.0.0 ' and substringof('BU0344',WijkenEnBuurten) and Perioden eq '2026MM09'&$format=json
What you need to know:
- GeregistreerdeOverlast_1 is the number of reports. Perioden: '2026MM09' is a month, '2025JJ00' a full year.
- Keys have a fixed length and are padded with spaces: '0.0.0 ', 'E33 ', 'GM0344 ', 'NL00 '. Without the spaces you get an empty list and no error.
- Types (dimension Overlast): 0.0.0 total, E33 confused person, E35 youth, E38 alcohol or drugs, E41 homeless people, M22 other noise.
- Neighbourhood names: /WijkenEnBuurten?$filter=Municipality eq 'GM0344'. Municipalities are the rows whose Key starts with GM.
- At most 10,000 rows per response; follow odata.nextLink.
- Months without reports may be missing or listed as 0: count a missing month as 0.
- Compare January up to the newest month of this year with the same months last year, not the latest month with the one before.
- The police revise earlier months: always reload the full series. Before March 2021 registration was different (series break).
Output: at the top, the municipality total and the newest month in the data. Below, a sortable table per neighbourhood with reports last year, this year and the change in percent. Neighbourhoods with fewer than 50 reports in grey, marked 'too small to compare'.
Optional: reports per 1,000 residents using AantalInwoners_5 from CBS 86358NED (key figures 2026), joined on neighbourhood code. Codes can change between years; drop neighbourhoods that don't match and say how many.
Try it yourself
A small script that answers the core of the question. Needs: Python 3.10+ en requests. Tested on 2026-10-15; below is the real output of that run.
# Overlast per buurt: de eerste negen maanden van 2026 tegen dezelfde maanden van 2025.
# Bron: politie via CBS, tabel 47024NED (dataderden.cbs.nl). Geen sleutel nodig.
import requests
UA = {"User-Agent": "opendataindex-voorbeeld/0.2 (+https://opendataindex.nl)"}
BASIS = "https://dataderden.cbs.nl/ODataApi/OData/47024NED"
GEMEENTE = "0344" # Utrecht; zoek je eigen code op (GM + 4 cijfers)
MAANDEN = 9 # januari t/m september: de nieuwste maand in de tabel
def rijen(filter_):
url, uit = f"{BASIS}/TypedDataSet", []
params = {"$filter": filter_, "$select": "WijkenEnBuurten,Perioden,GeregistreerdeOverlast_1", "$format": "json"}
while url: # max 10.000 rijen per antwoord; volg odata.nextLink
j = requests.get(url, params=params, headers=UA, timeout=60).json()
uit += j["value"]
url, params = j.get("odata.nextLink"), None
return uit
perioden = [f"{j}MM{m:02d}" for j in (2025, 2026) for m in range(1, MAANDEN + 1)]
per = " or ".join(f"Perioden eq '{p}'" for p in perioden)
# Let op: '0.0.0 ' (totaal) heeft een spatie aan het eind, net als de andere sleutels.
data = rijen(f"Overlast eq '0.0.0 ' and substringof('BU{GEMEENTE}',WijkenEnBuurten) and ({per})")
namen = {b["Key"].strip(): b["Title"] for b in requests.get(
f"{BASIS}/WijkenEnBuurten", params={"$filter": f"Municipality eq 'GM{GEMEENTE}'", "$format": "json"},
headers=UA, timeout=60).json()["value"]}
som = {}
for r in data:
jaar = r["Perioden"][:4]
buurt = r["WijkenEnBuurten"].strip()
som.setdefault(buurt, {"2025": 0, "2026": 0})[jaar] += r["GeregistreerdeOverlast_1"] or 0
t25 = sum(v["2025"] for v in som.values()); t26 = sum(v["2026"] for v in som.values())
print(f"Gemeente GM{GEMEENTE}, {len(som)} buurten, jan-sep: 2025 {t25:,} -> 2026 {t26:,} meldingen ({(t26 - t25) / t25:+.1%})")
print("\nGrootste stijging (buurten met minstens 50 meldingen in 2025):")
groot = [(b, v) for b, v in som.items() if v["2025"] >= 50]
for b, v in sorted(groot, key=lambda x: x[1]["2026"] / x[1]["2025"], reverse=True)[:10]:
print(f" {b} {namen.get(b, '?')[:28]:28} {v['2025']:>5} -> {v['2026']:>5} ({(v['2026'] - v['2025']) / v['2025']:+.0%})")
Gemeente GM0344, 111 buurten, jan-sep: 2025 13,583 -> 2026 13,311 meldingen (-2.0%) Grootste stijging (buurten met minstens 50 meldingen in 2025): BU03440223 2e Daalsebuurt en omgeving 67 -> 124 (+85%) BU03440823 Transwijk-Noord 168 -> 295 (+76%) BU03440712 Lunetten-Zuid 168 -> 293 (+74%) BU03440415 Tuinwijk-Oost 73 -> 111 (+52%) BU03441013 Vleuten 83 -> 126 (+52%) BU03441032 De Meern-Zuid 66 -> 100 (+52%) BU03440433 Wittevrouwen 83 -> 125 (+51%) BU03440221 Nijenoord, Hoogstraat en omg 56 -> 81 (+45%) BU03440931 Leidsche Rijn-Centrum 232 -> 327 (+41%) BU03440423 Voordorp en Voorveldsepolder 82 -> 112 (+37%)
The sources3

Registered nuisance by neighbourhoodIn depth
Every month the police count how many nuisance reports came in, per neighbourhood and per type: from confused persons and youth to noise and drugs. Statistics Netherlands (CBS) publishes the figures as an open table, one month after the fact.

Key figures for districts and neighbourhoods
Over a hundred figures per neighbourhood: residents by age, households, property values, income, benefits, cars and distance to amenities. A new table every year.

District and neighbourhood map
The official boundaries of all municipalities, districts and neighbourhoods, as a map service (WFS) and download. The geometry you need to map neighbourhood figures.
How the sources fit together
- Registered nuisance by neighbourhoodKey figures for districts and neighbourhoodsvia
buurtcode (BU)Income and residents per neighbourhood are in the key figures. In Staat van the link between low income and nuisance was strong (ρ ≈ 0.58).
- Registered nuisance by neighbourhoodDistrict and neighbourhood mapvia
buurtcode (BU)The boundaries turn the table into a map. Use boundaries from the same year as the figures' classification.
- Key figures for districts and neighbourhoodsRegistered nuisance by neighbourhoodvia
buurtcode (BU)The key figures provide the denominator for almost any neighbourhood comparison.
- District and neighbourhood mapKey figures for districts and neighbourhoodsvia
buurtcode (BU)Join on code and use the same year for boundaries and figures.
More examples with this data
Nuisance reports: highest on average in July, lowest in February
Average household size: highest in Urk (3.2 people), lowest in Wageningen and 2 other municipalities (1.6 people)
Homes without a natural gas connection: highest in Purmerend (67%), lowest in Simpelveld and 3 other municipalities (2%)
Electricity an average home feeds back into the grid: highest in Tubbergen (2,120 kWh), lowest in Amsterdam (140 kWh)
Also in the indexes
Datasets from data.overheid.nl, the National Georegister, CBS, Eurostat and city portals that fit this question.
- Geregistreerde overlast; soort overlast, wijk en buurtPolitie
- Kwadrant (Wijken - Buurten)dataportaal Breda
- Geregistreerde overlast; soort overlast, wijk en buurtPolitie
- Plangebied Wijkerbroek te Wijk bij Duurstede, gemeente Wijk bij Duurstede; Plangebied Wijkerbroek te Wijk bij Duurstede, gemeente Wijk bij Duurstede; archeologisch vooronderzoek: een inventariserend veldonderzoek (verkennend en karterend booronderzoek)DANS Data Station Archaeology
- Inventariserend veldonderzoek - verkennende fase Zonnepark Wijkersloot te Wijk bij Duurstede, gemeente Wijk bij Duurstede (UT) Inventariserend veldonderzoek - verkennende fase Zonnepark Wijkersloot te Wijk bij Duurstede, gemeente Wijk bij Duurstede (UT)DANS Data Station Archaeology
- 2017100301 gemeente Wijk bij Duurstede Wijk bij Duurstede Markt 24 Markt 24, Wijk bij Duurstede, gemeente Wijk bij Duurstede: inventariserend veldonderzoek in de vorm van boringenin de verkennendefaseDANS Data Station Archaeology
- De kaart toont het aandeel fiets- en wandelpaden per buurt. Een lichtgroene kleur betekent relatief veel fiets- en wandelpaden. Die komen voor in buurten waar meer mensen wonen, voornamelijk binnen de bebouwde kom. Het landelijk gebied heeft minder fiets- en wandelpaden en ook minder …Provincie Noord-Holland
- CBS Wijken en Buurten 2026 versie 0 ATOMBeheer PDOK
- CBS Wijken en Buurten 2026 versie 0 WFSBeheer PDOK
- CBS Wijken en Buurten 2026 versie 0 OGC API FeaturesBeheer PDOK
Other worked-out questions
- How much grant money does a foundation in Amsterdam receive?3 sources
- How much warmer has it become?2 sources
- How clean is the air on my street?3 sources
- What does my area look like from space?3 sources
- Did house prices rise faster here than elsewhere in Europe?2 sources
- How many cars in my municipality are electric?2 sources