# National Georegister

The register where Dutch government bodies describe their geodata: datasets, the WMS, WFS and OGC API services that serve them, and feature catalogues with the meaning of every field. Over 9,800 records from provinces, water boards, municipalities and national agencies. Run by PDOK.

- Publisher: Publieke Dienstverlening Op de Kaart
- Area: Netherlands · Finest detail: varies
- Period: doorlopend · Refreshed: daily
- Access: Open · Licence: verschilt per record
- Join keys: uuid
- Status: ok (2026-10-16) · 9.823 records met een datum tot vandaag
- URL: https://www.nationaalgeoregister.nl

## What can you do with it?
- **Which map service belongs to a dataset?.** A service record points to the datasets it serves. On our dataset pages those WMS, WFS and OGC API addresses are listed right away.
- **What does this field mean?.** Feature catalogues list, per layer, the fields with type and meaning. Useful when a WFS only has abbreviated field names.

## How to process it
1. **Search through the API.** GeoNetwork 4 with an Elasticsearch query as POST. Always send Accept-Language: Node fetch sends '*' by default and GeoNetwork then returns a 400. Paginate on uuid with search_after.
   `curl -X POST "https://www.nationaalgeoregister.nl/geonetwork/srv/api/search/records/_search" \
  -A "mijn-script/1.0 (mail@voorbeeld.nl)" -H "Accept-Language: nl" -H "Content-Type: application/json" \
  -d '{"size": 5, "query": {"match": {"resourceTitleObject.default": "natura 2000"}}, "_source": ["uuid", "resourceTitleObject.default"]}'
`
2. **One record.** GET /geonetwork/srv/api/records/<uuid> with Accept: application/json returns the full ISO record.

## Similar sources
- [data-overheid](https://www.opendataindex.nl/en/bron/data-overheid.md): All kinds of government data, including much of the NGR; less detail on map layers and services.
- [data-europa](https://www.opendataindex.nl/en/bron/data-europa.md): The European catalogue, which also harvests the NGR.

## What to watch out for
- **Metadata dates are not always real.** Some records have a revision date in the future (2028, even 2098) or only a year and month. On our site only full dates up to today count.
- **Duplicated in data.overheid.nl.** data.overheid.nl harvests the NGR: over 7,700 records appear in both. The NGR uuid is in the CKAN identifier field.
- **Old services no longer exist.** Addresses on geodata.nationaalgeoregister.nl no longer exist (DNS). A service in an old record may be dead.

## API (GeoNetwork 4 (Elasticsearch-zoek-API, JSON) en OGC CSW 2.0.2)

- Base: https://www.nationaalgeoregister.nl/geonetwork/srv
- Access: No key or account needed (tested)
- Formats: json, xml
- Size: 9831 records excluding templates (8,115 datasets, 1,074 services, 553 feature catalogues, 80 'GIS dataset', 19 series; 16 Oct 2026) (tested)
- Filtering: Elasticsearch Query DSL (match, term, bool, range, aggs) in the search API; CQL_TEXT or OGC Filter in CSW.; match, term, terms, bool, range, exists, LIKE

### Endpoints
- `POST /api/search/records/_search`: Search with an Elasticsearch query (JSON): query, size, sort, search_after, _source, aggs. Fast (~1 ms 'took').
- `GET /api/records/{uuid}`: One full ISO record; with Accept application/json as JSON (~30 kB), otherwise XML.
- `GET /api/records/{uuid}/formatters/xml`: The record as ISO 19139 XML.
- `GET /api/records/{uuid}/related`: Linked parts: online resources (links with protocol), services, datasets, feature catalogues, thumbnails; filter with type=…
- `GET /dut/csw?service=CSW&request=GetRecords`: OGC CSW 2.0.2 search, with CQL_TEXT or FILTER; resultType hits or results; elementSetName brief/summary/full.
- `GET /dut/csw?service=CSW&request=GetRecordById&id={uuid}`: One record via CSW, in the chosen outputSchema (gmd, mdb, dcat, DCAT-AP-NL 3.0 …).
- `GET /dut/catalog.search#/metadata/{uuid}`: The record page for people (not an API).

### Parameters
- `query`: Elasticsearch query, e.g. {match: {resourceTitleObject.default: 'natura 2000'}} or {term: {resourceType: 'service'}}; isTemplate 'n' excludes templates. (tested)
- `_source`: Return only these fields (uuid, resourceTitleObject.default, OrgForResourceObject.default, link, recordLink, featureTypes …). (tested)
- `size / sort / search_after`: Paging: size 1000, sort [{uuid: 'asc'}] and the sort value of the last hit as search_after. (experience)
- `track_total_hits`: true for the exact total in hits.total.value. (tested)
- `aggs`: Count per field (terms on resourceType, format …) in the same call; size 0 for counts only. (tested)
- `constraint (CSW)`: E.g. AnyText LIKE '%natura%', with constraintLanguage=CQL_TEXT&constraint_language_version=1.1.0. (tested)
- `outputSchema (CSW)`: http://www.isotc211.org/2005/gmd (ISO), http://www.w3.org/ns/dcat#, https://docs.geostandaarden.nl/dcat/dcat-ap-nl30 and more. (from the description)
- `maxRecords / startPosition (CSW)`: Paging in CSW; nextRecord in the response. (platform)

### Fields in the search index (_source) (11)
`uuid` tekst, `resourceType` lijst, `resourceTitleObject.default` tekst, `resourceAbstractObject.default` tekst, `OrgForResourceObject.default` tekst, `link` lijst, `recordLink` lijst, `featureTypes` lijst, `licenseObject` lijst, `dateStamp` datetime, `format` lijst

### Limits and pitfalls
- No key and no documented limit. Page with search_after (size 1000); the whole catalogue is ~10 pages and ~15 s. (experience)
- The search API requires the headers Accept: application/json and a real language in Accept-Language (nl). Without Accept or with 'Accept-Language: *' (the Node fetch default) you get HTTP 400; GET /api/records/{uuid} even returns 500. curl does not have this problem. (tested)
- Our sample call below is therefore the CSW (GET, XML), which doesn't need these headers. For the JSON search API see the curl example under 'Searching via the API'. (tested)
- Format values are not clean: 'NetCDF' also appears wrapped in line breaks and spaces. Trim and collapse whitespace before counting. (tested)
- Dates in records are not always real: revision dates in the future (2028, 2098) or only year and month. Services on geodata.nationaalgeoregister.nl no longer exist (DNS). (experience)
- data.overheid.nl harvests the NGR (~7,750 records): the NGR uuid is in identifier there (…geonetwork?uuid=…). Use it to link duplicates. (experience)
- No robots.txt (404). /api/site, /api/sources and /api/doc returned 500; /v2/api-docs redirects to the sign-in page. (tested)

### Example
```
https://www.nationaalgeoregister.nl/geonetwork/srv/dut/csw?service=CSW&version=2.0.2&request=GetRecords&typeNames=csw:Record&resultType=results&elementSetName=brief&maxRecords=3&constraintLanguage=CQL_TEXT&constraint_language_version=1.1.0&constraint=AnyText%20LIKE%20%27%25natura%25%27
```


## What is in it: 9,768 records

All metadata records in the National Georegister, by organisation, fetched every night: datasets, services and feature catalogues. Every page lists the WMS, WFS or OGC API.

- Kinds: dataset 8,078, service 1,040, featureCatalog 553, GIS dataset 80, series 16, onbekend 1
- Last changed: 2026-11-01 (474 in the past 30 days)
- With an API call on the dataset page: 8,273
- Search: https://www.opendataindex.nl/api/catalogus/ngr?q=… or the MCP function zoek_datasets with herkomst=ngr
- Every row has its own page: https://www.opendataindex.nl/en/dataset/ngr/<key>

### Folders
- Rijkswaterstaat (2,307): datasets (2253), featurecatalogi (44), diensten (8), series (2)
- Provincie Drenthe (1,245): datasets (1244), overig (1)
- Provincie Zuid-Holland (1,091): datasets (615), featurecatalogi (476)
- Onbekende uitgever (936): datasets (928), series (6), diensten (2)
- Beheer PDOK (791): diensten (790), datasets (1)
- Provincie Utrecht (495): datasets (425), diensten (70)
- Provincie Zeeland (471): datasets (471)
- Rijksinstituut voor Volksgezondheid en Milieu (320): datasets (258), diensten (62)
- Koninklijk Nederlands Meteorologisch Instituut (KNMI) (310): datasets (310)
- Provincie Groningen (266): datasets (266)
- Provincie Overijssel (246): datasets (242), series (4)
- Rijksdienst voor het Cultureel Erfgoed (107)
- provincie Fryslân (88)
- Kadaster (83)
- Het Waterschapshuis (72)
- Provincie Noord-Holland (61)
- Provincie Noord-Brabant (56)
- Ministerie van Defensie, Koninklijke Marine, Dienst der Hydrografie (55)
- TNO Geologische Dienst Nederland (52)
- Wageningen Environmental Research (39)
- Centraal Bureau voor de Statistiek (35)
- Waterschap Aa en Maas (35)
- Waterschap Hunze en Aa's (30)
- Atlas Leefomgeving (27)
- BIJ12 (27)
- Rijksdienst voor Ondernemend Nederland (RvO) (26)
- Gemeente Koggenland (24)
- Kadaster Geo-Informatie (22)
- Gemeente Bloemendaal en Gemeente Heemstede (16)
- Interprovinciaal Overleg (16)
- Zeeuws Archief (16)
- INFRAM (15)
- Ministerie van Landbouw, Natuur en Voedselkwaliteit (15)
- RIVM (15)
- Atlas Natuurlijk Kapitaal (14)
- Wageningen Environmental Research (WENR) (14)
- Informatiehuis Water (13)
- BAR-Organisatie (12)
- Gemeente Heemstede (11)
- Hoogheemraadschap De Stichtse Rijnlanden (11)
- … and 100 more folders

## Examples with real figures (2)

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

- **Datasets in the National Georegister by organisation: most Rijkswaterstaat (2,254 datasets), then Provincie Drenthe and Provincie Zuid-Holland** (november 2026). Table records/_search. [Example](https://www.opendataindex.nl/en/voorbeeld/ngr-datasets-per-organisatie)
  - `https://www.nationaalgeoregister.nl/geonetwork/srv/api/search/records/_search`
- **Records in the National Georegister by type: most datasets (8,079 records), then services (WMS, WFS …) and feature catalogues** (november 2026). Table records/_search. [Example](https://www.opendataindex.nl/en/voorbeeld/ngr-records-per-soort)
  - `https://www.nationaalgeoregister.nl/geonetwork/srv/api/search/records/_search`
