Dutch Planners: Avoid Losing 800 Buurten in CBS Buurtdata GIS Joins
Get the official CBS neighbourhood geometries as GeoPackage from the Wijk- en Buurtkaart, which covers every municipality, wijk and buurt in the Netherlands with geometry only. Core statistics arrive separately through StatLine’s Kerncijfers wijken en buurten. For automated pipelines, PDOK republishes the same boundaries through WMS, WFS and OGC API Features, so you rarely need to touch a manual download at all once a workflow is built.
TL;DR:The neighborhood geometries are in RD coordinate system (EPSG:28992), allowing direct overlay with other Dutch spatial layers without reprojection.Use the full GeoPackage for comprehensive attribute data or PDOK’s ATOM feed for automatic updates in scripted workflows to avoid manual downloads.Join geometries to statistical data via neighborhood codes, ensuring normalization of codes and consistency of reporting years to prevent mismatched or incomplete analysis.Boundaries change annually, so record version details and verify if boundary shifts impact your longitudinal comparisons.CBS neighborhood data is best suited for demographic and planning context but has limited spatial precision, making it unreliable for parcel-level zoning accuracy.
3D CityplannerTurn Neighbourhood Data Into ScenariosUse a browser-based digital twin to analyse Dutch spatial data, compare development scenarios and support clearer urban planning decisions.Explore 3D Cityplanner
Table of Contents
- Where to download the Wijk- en Buurtkaart and which files to choose
- File formats, coordinate system and projection details
- Using PDOK webservices for dynamic maps and automated workflows
- How to join CBS geometries to StatLine kerncijfers using region codes
- Handling versioning and indelingswijziging between reporting years
- Practical GIS workflow tips for urban planning and 3D scenario work
- Limitations and accuracy considerations of CBS buurtdata GIS
- What attribute data comes with CBS buurtdata, and how to read it
- How to bring CBS buurtdata into QGIS or ArcGIS
- Where CBS neighbourhood data earns its place in urban planning
- Watching planners actually use neighbourhood boundaries
- Turning CBS boundaries into a scenario you can present
- Sources
- FAQ
Where to download the Wijk- en Buurtkaart and which files to choose
CBS hosts the dataset on its own dossier page, where you get the full GeoPackage for the current year plus links to prior releases. PDOK mirrors the same boundaries through its ATOM download service, which suits scripted retrieval far better than a browser click.
Which one you pick depends on the job:
- Full GeoPackage from CBS when you need every attribute and geometry vintage in one file for a one-off analysis.
- PDOK ATOM feed when a script or ETL job needs to check for updates and pull new versions automatically.
- Zipped Shapefile bundles (older years only) when a legacy tool in your stack still expects that format.
Large-area downloads (the whole country at buurt level) can run into hundreds of megabytes once you add historical years, so keep a local cache and only refetch the year that changed rather than the whole archive each time.
File formats, coordinate system and projection details
CBS delivers the 2026 Wijk- en Buurtkaart as GeoPackage with full, non-generalised geometry, while older vintages sometimes only exist as Shapefile. Coordinates are in RD, EPSG:28992, the Dutch national grid, which means you can overlay the boundaries directly onto BAG building footprints or BGT topography without reprojecting.
A few points worth flagging:
- Confirm the CRS on import; some GIS tools silently assume WGS84 and misplace the layer.
- Keep the full geometry for anything below municipal scale, since simplification can shift boundaries by several metres.
- Generalise only for national overview maps where visual clarity matters more than edge accuracy.
Pro Tip: Never simplify a buurt boundary before running a spatial join against BAG or BGT layers. Even a modest generalisation tolerance can pull a building across a boundary line that was correct in the source data, which quietly corrupts any development capacity or population count you calculate afterwards.
Using PDOK webservices for dynamic maps and automated workflows
PDOK exposes CBS Wijken en Buurten through WMS, WFS and OGC API Features, and choosing the right one depends on whether you need pixels or geometry.
- WMS renders the boundaries as a tiled image, ideal for a dashboard basemap or a quick reference layer behind a 3D scenario view where you do not need to query individual features.
- WFS returns actual vector geometry with attributes, so use it when you need to select buurten dynamically, filter by population or urbanity, or run a spatial join in QGIS or ArcGIS.
- OGC API Features offers the same vector data through a more modern, paginated REST interface, better suited to scripted access at scale than classic WFS requests.
Check the GetCapabilities document for WMS/WFS, or the landing page for OGC API Features, before building anything permanent. Endpoints occasionally shift layer names between releases, and PDOK’s ATOM download services also let you script retrieval of historic years alongside the current one. Be mindful of request volume on shared public services; batch large exports through the ATOM feed rather than hammering WFS with thousands of individual queries.
How to join CBS geometries to StatLine kerncijfers using region codes
The geometry file and the statistics table are two separate products, and matching them correctly comes down to codes. CBS uses GM codes (4 positions) for municipalities, WK codes (6 positions) for wijken, and BU codes (8 positions) for buurten, each nested inside the level above it.
A reliable join workflow looks like this:
- Download the Wijk- en Buurtkaart geometry for your target year.
- Pull the matching Kerncijfers wijken en buurten table from StatLine for the same year.
- Normalise both code columns: trim whitespace and confirm leading zeros, since API deliveries sometimes introduce spacing that breaks an exact-match join.
- Join on the buurtcode or wijkcode field, verifying row counts match before trusting any output map.
Pro Tip: Run a count check after every join. If your geometry has 14,000 buurten and your joined table has 13,200, you have silently lost boundaries to a code mismatch, usually from an unnormalised space or a year mismatch between the two files.
Handling versioning and indelingswijziging between reporting years
Boundaries change every year. New housing developments split buurten, municipal mergers redraw wijk lines, and treating a buurtcode as a permanent key is one of the most common mistakes in longitudinal analysis. The toelichting on the Wijk- en Buurtkaart documents exactly how the dataset is constructed and when boundaries shift.
Build reproducibility into the workflow with three habits:
- Record the year and version number of the Wijk- en Buurtkaart in your project metadata every time you import it, alongside the peildatum for any linked StatLine table.
- Check the indelingswijziging_wijken_en_buurten flag before comparing two years directly. Where it is set, a straight year-on-year comparison at buurt level is not valid without adjustment.
- Harmonise or document changes: aggregate to a stable higher-level zone (often the wijk or municipality) when buurt boundaries have shifted, or run a geometry comparison to quantify exactly what changed.
Skipping this step is how a “20% population growth” headline in a report turns out to be a boundary redraw rather than actual growth.
Practical GIS workflow tips for urban planning and 3D scenario work
Neighbourhood boundaries are contextual layers, not parcel-accurate legal limits. Treat them accordingly when they enter a planning workflow: reliable for demographic context, urbanity classification, and area-level statistics, but not a substitute for the BAG, BGT or BRK when you need parcel-level or zoning precision.
A workflow that holds up across a masterplanning project typically includes:
- Full geometry for site-level feasibility work; generalised or simplified layers only for city-wide overview maps.
- CBS buurten combined with BAG for building massing and BGT for public space, greenery and parking layout.
- Version-controlled geometry files, so a scenario built in January and revisited in June references the same peildatum.
- Joins stored as reusable database views rather than one-off spreadsheet merges, so the next analyst inherits a working pipeline instead of rebuilding it.
Pro Tip: Store the buurtcode join as a database view, not a flattened export. When next year’s Wijk- en Buurtkaart lands, you swap the source table and the view recalculates automatically, instead of quietly running last year’s statistics against this year’s map.
For a typical feasibility study, the pipeline runs: pull the current-year GeoPackage, join StatLine kerncijfers by buurtcode, layer BAG and BGT on top for massing and public space, then bring the result into a 3D scenario environment for sunlight, visibility and development-capacity checks against neighbouring plots.
Limitations and accuracy considerations of CBS buurtdata GIS
CBS neighbourhood data is built for statistical reporting first, spatial precision second. That distinction matters in three practical ways.
Boundaries follow administrative and statistical logic rather than cadastral survey lines, so a buurt edge running along what looks like a canal or road may sit a few metres off the true feature depending on how the dataset was constructed from BRK parcels, municipal submissions and Bestand Bodemgebruik. For a district-level population map, that is irrelevant. For siting a building against a boundary line, it is not.
Some buurten are extremely small (a handful of households) or extremely sparse (industrial zones, water bodies), which makes per-capita statistics unstable at that level. A single new apartment block can shift a “population density” figure disproportionately in a small buurt, in a way it never would at wijk or municipal level.
Timing mismatches are another recurring issue. The geometry for a given year may be released before the matching kerncijfers, or vice versa, and mixing a 2026 boundary file with an older statistics table produces plausible-looking but wrong results. Always confirm both files share the same peildatum before publishing any figure derived from the join.
Finally, indelingswijziging means the same buurtcode can refer to a different physical area from one year to the next. Any dashboard or model that assumes code stability across years needs the harmonisation approach described earlier, or it will silently misreport trend data.

What attribute data comes with CBS buurtdata, and how to read it
The geometry file itself is deliberately lean. It carries the boundary polygons plus the identifying codes (gemeentecode, wijkcode, buurtcode), name fields, and a handful of area and water indicators, but not the rich demographic detail most planners actually want.
The substantial attribute content lives in StatLine’s Kerncijfers wijken en buurten, delivered as separate tables you join by code. The first 2026 release covers themes including population counts, surface area, postcode ranges and stedelijkheid (urbanity classification), with further themes added in subsequent updates through the year.
A few interpretation notes matter when reading these tables:
- Population figures are typically rounded or suppressed at very low counts to protect privacy, so a “0 to 5” style value is a deliberate disclosure control, not missing data.
- Urbanity (stedelijkheid) is a classified score based on address density, useful for quickly segmenting buurten by character but not a substitute for a detailed land-use layer.
- Area figures usually split land and water, which matters when calculating density; dividing population by total area including large water bodies understates true residential density.
- Postcode fields link buurten to postal geography, useful for merging with datasets published at postcode level rather than CBS’s own codes.
Treat the kerncijfers as a snapshot tied to a specific peildatum rather than a live feed. Re-download the relevant year’s table whenever you refresh a project, rather than assuming last year’s numbers still hold.
How to bring CBS buurtdata into QGIS or ArcGIS
Getting the Wijk- en Buurtkaart working in either platform follows a similar sequence, with minor differences in how each tool handles GeoPackage and web services.
In QGIS: add the GeoPackage directly through the Data Source Manager, which reads the layer natively without conversion. Confirm the project CRS is set to EPSG:28992 so it matches the source data rather than reprojecting on the fly. To bring in a PDOK service instead, add a WFS or OGC API Features connection using the landing URL, browse available layers, and load the buurt layer directly as a vector source, filterable by attribute before it even downloads.
In ArcGIS: GeoPackage support varies by version, so test import early rather than assuming compatibility. Where native support is limited, PDOK’s WFS endpoint works reliably as an ArcGIS Server-style connection, letting you query buurten by attribute or extent without a manual file download. ArcGIS Pro handles EPSG:28992 correctly once set as the project’s spatial reference, and existing BAG or BGT layers in the same CRS overlay without transformation.
Whichever platform you use, do the join early in the pipeline rather than late. Bring in the geometry, normalise and join the StatLine attributes, then save the result as a new layer or view before starting any spatial analysis. That way, every downstream map, buffer or overlay operation works from one clean, already-validated dataset rather than repeating the join logic in five different places.

Where CBS neighbourhood data earns its place in urban planning
Neighbourhood boundaries show up constantly in early-stage planning work, often in ways that go beyond a simple reference map.
A housing feasibility study might overlay proposed massing against buurt-level population density and household composition to argue for a specific unit mix, pairing the CBS geometry with local zoning constraints. A redevelopment project near a station might use urbanity classification to justify a shift toward higher-density typologies, backed by the same stedelijkheid figure a municipal planning committee would recognise from its own reporting. A retail feasibility assessment often layers buurt population and age structure against a proposed catchment area to test whether local demand supports a new facility.
Municipalities frequently use the boundaries as the reporting unit for public consultation, splitting a large area development into wijk-sized chunks so residents see impact assessments scoped to their own neighbourhood rather than an abstract citywide figure. Combined with a zoning-focused visualisation of the underlying plan data, this turns a technical dataset into something a non-technical stakeholder group can actually discuss at a public meeting.
Watching planners actually use neighbourhood boundaries
Official boundaries do something subtle in stakeholder meetings: they remove an argument before it starts. When everyone in the room recognises the same buurt lines from CBS, disagreement moves straight to substance, not geography. Layering these boundaries into a 3D scenario, alongside massing, greenery and parking, makes that comparability visible rather than buried in a spreadsheet.
— Anne Dullemond
Turning CBS boundaries into a scenario you can present
There are browser-based alternatives to piecing together a scenario view from static exports and disconnected desktop tools. These solutions read official GIS layers, bring buurt-level geometry into automated area and building generation, and allow users to compare development scenarios side by side for sunlight, visibility and parking impact, without requiring installation.
That matters most at the feasibility stage, when a municipality or developer needs to test several massing options against real neighbourhood context before committing budget to detailed design. Rather than exporting a join from QGIS into a static image for a stakeholder deck, you can load the same CBS-based geometry directly into a live 3D scenario and adjust building footprints while the room watches. If you want to see this applied to a real site, request a Gebiedsscan or check the pricing plans, with a Starter tier available monthly and additional plans suited for larger practices.
FAQ
What format does CBS buurtdata GIS come in?
The current Wijk- en Buurtkaart is distributed as GeoPackage, with full non-generalised geometry. Older years may only be available as Shapefile.
What coordinate system does CBS use for neighbourhood boundaries?
CBS delivers boundaries in RD, EPSG:28992, the Dutch national grid. This lets you overlay the data directly onto BAG and BGT layers without reprojecting.
How do I join CBS geometry to StatLine statistics?
Match the geometry and the Kerncijfers wijken en buurten table using GM, WK or BU region codes for the same year, normalising whitespace and leading zeros before the join.
Why don’t my buurt statistics match between years?
An indelingswijziging (boundary redraw) has likely occurred between reporting years. Check the indelingswijziging flag and aggregate to a stable higher-level zone if you need a direct comparison.
Can I access CBS neighbourhood data through a web service instead of downloading files?
Yes. PDOK publishes the same boundaries through WMS, WFS and OGC API Features, suited to map display and automated vector queries respectively.
Can I use CBS buurtdata in a 3D planning tool rather than a desktop GIS?
Yes. 3D Cityplanner ingests official GIS layers like the Wijk- en Buurtkaart directly into browser-based scenario modelling, letting you compare massing, sunlight and parking options against real neighbourhood boundaries. Current plan pricing is listed on the 3D Cityplanner pricing page.