303,489 datasets indexed1,419 publishers
Open Data IndexThe index of open data about the Netherlands
Open Data Index›Worked-out question
Worked out · 3 sources · 3 steps

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).

Source: CBS, tabel 47024NED (Geregistreerde overlast; soort overlast, wijk en buurt) · opgehaald 18 oktober 2026Open the table Single block

Step by step

  1. 1

    Find your neighbourhood code (BU…) in the boundary map.

  2. 2

    Fetch that neighbourhood's monthly figures from the nuisance table.

  3. 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%})")
Output
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

Politie, via CBSNetherlands, neighbourhood

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.

OpenAPIDownloadSafety
Up to date
updated yesterday

Key figures for districts and neighbourhoods

CBSNetherlands, neighbourhood

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

OpenAPIDownloadPopulationHousing and landEconomy
Up to date
updated yesterday

District and neighbourhood map

CBS en Kadaster, via PDOKNetherlands, neighbourhood

The official boundaries of all municipalities, districts and neighbourhoods, as a map service (WFS) and download. The geometry you need to map neighbourhood figures.

OpenMap layerDownloadHousing and land
Reachable
yearly

How the sources fit together

More examples with this data

Also in the indexes

Datasets from data.overheid.nl, the National Georegister, CBS, Eurostat and city portals that fit this question.

Other worked-out questions