# Municipal sewer networks (GWSW)

The sewer management data of municipalities that share it under the Urban Water Data Dictionary (GWSW) of the RIONED foundation: pipes with material, diameter and construction year, manholes, pumps, structures, house connections and discharge points such as combined sewer overflows. On 16 October 2026 it held 1.8 million pipes, 1.45 million manholes and 14,905 discharge points from 144 municipalities (out of 342), plus one dataset from the water authorities. Via PDOK as OGC API, WFS, WMS and GeoPackage.

- Publisher: Stichting RIONED, Publieke Dienstverlening Op de Kaart
- Area: Netherlands · Finest detail: pipe and manhole
- Period: actuele stand (aanlegjaren tot ver in de vorige eeuw) · Refreshed: weekly
- Access: Open · Licence: CC0 1.0 (volgens de landing page van de OGC API)
- Join keys: uri, dataset (gemeente), stelsel, coördinaten
- Status: ok (2026-10-15) · 8 collecties · beheerleiding
- URL: https://www.pdok.nl/introductie/-/article/stedelijk-water-riolering-

## What can you do with it?
- **Where does the sewer overflow?.** The beheerlozing collection has 14,905 discharge points: external overflows (in heavy rain sewage flows into a ditch or canal), outlets and emergency outlets. Map them next to bathing water.
- **Where is asbestos cement still in the ground?.** 11,900 pipes are asbestos cement, 683,489 PVC and 682,052 concrete. Colour a map by material or compute the share of old materials per municipality.
- **How old is the sewer?.** The begindatum field gives a pipe's construction year. Build an age profile per neighbourhood and compare it with the municipality's sewer plan.
- **Which municipalities share their sewer data?.** The dataset field names the municipality. On 16 October 2026 there were 144; the rest of the country is missing. A map of who takes part and who doesn't is already a story.

## How to process it
1. **Overflows of one municipality.** The OGC API only filters on a few fields per collection. Use a bbox around the municipality (in degrees), at most 1,000 per page, and follow the next link.
   `https://api.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/ogc/v1/collections/beheerlozing/items?f=json&limit=1000&bbox=5.05,52.05,5.17,52.13`
2. **Counting with the WFS.** The WFS of the same dataset gives totals with resultType=hits. Material is a GWSW URI with a version (…/1.6/totaal/PVC): count with PropertyIsLike on */PVC.
   `https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=beheerlozing`
3. **One municipality via the WFS.** Filter on the dataset field (the full URL with the municipality name without spaces, e.g. Utrecht, UtrechtseHeuvelrug, DenHaag) and request GeoJSON in degrees.
   `https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&typeNames=beheerlozing&outputFormat=application/json&srsName=EPSG:4326&count=100&FILTER=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Edataset%3C/PropertyName%3E%3CLiteral%3Ehttps://apps.gwsw.nl/item_config?dataset=Utrecht%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E`
4. **Everything in one file.** The GeoPackage with all collections is 2.96 GB and is refreshed daily (Last-Modified 15 October 2026). The ATOM feed lists the file.
   `https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/atom/index.xml`

## Interesting combinations
- How often is there enough rain to trigger the overflows? → [knmi-daggegevens](https://www.opendataindex.nl/en/bron/knmi-daggegevens.md) via datum en coördinaten (dichtstbijzijnd station). The GWSW shows where the overflows are; count with KNMI daily data how often more than 20 millimetres fell in a day. Actual overflow measurements are not in the GWSW.
- Metres of sewer per resident → [cbs-kwb](https://www.opendataindex.nl/en/bron/cbs-kwb.md) via buurtcode (ruimtelijk koppelen). Sum pipe length per neighbourhood (field lengte_leiding) and divide by the population from the CBS neighbourhood figures.

## Similar sources
- [waterschappen-pdok](https://www.opendataindex.nl/en/bron/waterschappen-pdok.md): The water authorities manage what comes next: sewage pumping stations, pressure mains and treatment plants (wastewater chain DAMO). The GWSW covers the municipal sewer up to that handover point.
- [Richtlijn stedelijk afvalwater (Rijkswaterstaat)](https://www.pdok.nl/introductie/-/article/kaderrichtlijn-stedelijk-afvalwater): National reporting to the EU on sewer systems and treatment plants, much coarser than the GWSW.
- [openstreetmap](https://www.opendataindex.nl/en/bron/openstreetmap.md): OSM has almost no underground pipes; the GWSW is the only open source at this level of detail.

## What to watch out for
- **Not nationwide.** Only municipalities that share their management data through the GWSW. On 16 October 2026 we counted 144 municipality names in the dataset field (some with a second _Aansluitingen set) and one set from the water authorities. Amsterdam and Rotterdam are missing.
- **Codes as URLs with a version.** Type and material are data.gwsw.nl URIs with a version number (1.4, 1.5, 1.6, 1.7). The same type therefore appears under four names: look at the last part. Some municipalities use their own abbreviations (pp for polypropylene).
- **Many fields empty.** 231,022 of the 1,799,881 pipes have no or an unusual material. Dates are sometimes an empty string instead of null.
- **No totals in the OGC API.** The OGC API returns no numberMatched and at most 1,000 objects per page. Use the WFS (resultType=hits) for counts; a filtered count over all pipes takes 3 to 8 seconds.

## API (OGC WFS 2.0.0)

- Base: https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/wfs/v1_0
- Access: No key. Fees: none; access constraints: https://creativecommons.org/publicdomain/zero/1.0/deed.nl. (from the description)
- Formats: application/gml+xml; version=3.2, text/xml; subtype=gml/3.2.1, text/xml; subtype=gml/3.1.1, application/json; subtype=geojson, application/json
- Size: 14905 features in beheerstedelijkwater:BeheerLozing (tested)
- Filtering: OGC Filter Encoding (FES 2.0); PropertyIsEqualTo, PropertyIsNotEqualTo, PropertyIsLessThan, PropertyIsGreaterThan, PropertyIsLessThanOrEqualTo, PropertyIsGreaterThanOrEqualTo, PropertyIsLike, PropertyIsBetween, PropertyIsNull, Equals, Disjoint, Touches, Within, Overlaps, Crosses, Intersects, Contains, DWithin, Beyond, BBOX, During

### Endpoints
- `GET ?request=GetCapabilities`: service description
- `GET ?request=DescribeFeatureType`: fields of a layer (XSD)
- `GET ?request=GetFeature`: the features themselves, with geometry
- `GET ?request=ListStoredQueries`: stored queries
- `GET ?request=DescribeStoredQueries`: stored query details

### Parameters
- `typeNames`: which layer: beheerstedelijkwater:AansluitingLeiding, beheerstedelijkwater:BeheerPomp, beheerstedelijkwater:BeheerBouwwerk, beheerstedelijkwater:BeheerPut, beheerstedelijkwater:AansluitingPunt, beheerstedelijkwater:BeheerLeiding, beheerstedelijkwater:BeheerLozing, beheerstedelijkwater:BeheerGebied (from the description)
- `outputFormat`: e.g. application/json for GeoJSON (from the description)
- `srsName`: projection, e.g. EPSG:4326 for web maps (default EPSG:28992, RD) (from the description)
- `count / startIndex`: paging (from the description)
- `filter`: FES XML filter on fields or geometry (from the description)
- `bbox`: box in the chosen projection (platform)

### Fields (12)
`geom` geometrie, `dataset` string, `stelsel` string, `stelseltype` string, `naam` string, `uri` string, `type` string, `begindatum` string, `einddatum` string, `drempelniveau` double, `drempelbreedte` long, `fuuid` string

### Limits and pitfalls
- At most 1,000 features per request (CountDefault). (from the description)
- Paging supported: count and startIndex (ImplementsResultPaging). (from the description)
- A filter with many conditions (e.g. 150 PropertyIsNotEqualTo) does not fit in a URL: send the WFS request as a POST with XML. That worked on 16 October 2026. (tested)
- Layer names are case-insensitive (beheerlozing = BeheerLozing). Field names in the WFS sometimes differ from the OGC API (materiaal_leiding is returned as materiaalLeiding). (tested)

### Example
```
https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/wfs/v1_0?request=GetFeature&service=WFS&version=2.0.0&typeNames=beheerstedelijkwater:BeheerLozing&outputFormat=application/json&srsName=EPSG:4326&count=1&propertyName=naam,type,stelsel,dataset
```

## How to fetch it

### curl
```bash
curl "https://api.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/ogc/v1/collections/beheerlozing/items?f=json&limit=5"
```

### python
```python
import requests

wfs = "https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/wfs/v1_0"
for laag in ["beheerleiding", "beheerput", "beheerlozing", "beheerpomp"]:
    r = requests.get(wfs, params={"service": "WFS", "version": "2.0.0", "request": "GetFeature",
                                  "resultType": "hits", "typeNames": laag})
    print(laag, r.text.split('numberMatched="')[1].split('"')[0])
```


## Examples with real figures (1)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **Sewer pipes in the GWSW by material: most PVC (683,213 pipes), then concrete and PE (polyethylene)** (oktober 2026). Table beheer-stedelijk-watersystemen-gwsw: beheerleiding. [Example](https://www.opendataindex.nl/en/voorbeeld/rioned-gwsw-leidingen-materiaal)
  - `https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=beheerleiding&FILTER=%3CFilter%3E%3CPropertyIsLike%20wildCard%3D%22*%22%20singleChar%3D%22.%22%20escape%3D%22!%22%20matchCase%3D%22false%22%3E%3CPropertyName%3Emateriaal_leiding%3C%2FPropertyName%3E%3CLiteral%3E*%2FPVC%3C%2FLiteral%3E%3C%2FPropertyIsLike%3E%3C%2FFilter%3E`
  - `https://service.pdok.nl/rioned/beheer-stedelijk-watersystemen-gwsw/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=beheerleiding`
