Key Register of the Subsurface (BRO)
The national register of what lies underground and what is measured there: cone penetration tests, geological, soil and geotechnical boreholes, groundwater monitoring wells with their time series (some from the 1950s), groundwater composition, abstractions and mining permits. Government bodies must have their surveys registered here; TNO runs the national facility on behalf of the Ministry of the Interior (BZK). Fourteen REST services on publiek.broservices.nl, each with an OpenAPI description, plus a copy on PDOK. On 16 October 2026 it held 97,768 groundwater monitoring wells.

Groundwater monitoring wells in the BRO by year built: 2,786 wells in 2025, 2.2 times as much as in 1990
Groundwater monitoring wells in the BRO by year built, 1990 – 2025, in wells. The highest point was 2022 (3,698).
What you can build with it1
What can you do with it?4 ideas
How high is the groundwater under your house?
Find the nearest groundwater well, fetch the groundwater level series as CSV and chart it. Well GMW000000004076 has measurements from 1956.
What lies beneath the building site?
Within 3 kilometres of central Utrecht, 52 cone penetration tests and 59 groundwater wells have been registered since 1 January 2025. Each test shows the layers down to tens of metres.
Drought in the series
Compare the groundwater level in the summers of 2018, 2022 and 2025 with the long-term average of the same well. Put KNMI rainfall next to it.
Who pumps up groundwater?
Groundwater usage systems (GUF) and production files (GPD) describe abstractions and how much was pumped per period.
How to process it4 steps
Search an area
Per object type, a POST to characteristics/searches with a JSON body: area (circle in km or box) and registration period. The response is XML with numberOfDocuments and the key data per object. More than 2,000 objects is refused: make the area or period smaller.
curl -X POST -H 'Content-Type: application/json' \ -d '{"registrationPeriod":{"beginDate":"2025-01-01","endDate":"2026-10-15"},"area":{"enclosingCircle":{"center":{"lat":52.0907,"lon":5.1214},"radius":3}}}' \ https://publiek.broservices.nl/sr/cpt/v1/characteristics/searchesFrom well to time series
gmw-relations gives the tubes of a well and the related groundwater level surveys (GLD). seriesAsCsv returns the series; time is in epoch milliseconds with one column per quality regime (preliminary, assessed, control, unknown).
https://publiek.broservices.nl/gm/gld/v1/seriesAsCsv/GLD000000002796
The OpenAPI per service
Each service has its description at <base>/openapi (OpenAPI 3.1, as YAML) and a Swagger page at <base>/swagger-ui. Paths: /gm/{frd,gar,gld,gmn,gmw}/v1, /sr/bhrp/v2, /sr/bhrg/v3, /sr/bhrgt/v2, /sr/cpt/v1, /sr/sfr/v2, /gu/{gpd,guf}/v1, /ep/{epc,epl}/v1.
https://publiek.broservices.nl/gm/gld/v1/openapi
All wells at once (PDOK)
For overviews the PDOK copy is easier: an OGC API with wells, tubes, networks and surveys, in GeoJSON, 1,000 per page (98 pages for all wells). Each object links to the XML and CSV series on publiek.broservices.nl.
https://api.pdok.nl/tno/bro-grondwatermonitoring-in-samenhang-karakteristieken/ogc/v1/collections/gm_gld/items?f=json&limit=10
Interesting combinations


How quickly does groundwater respond to rain?
Put a well's groundwater level next to the daily rainfall at the nearest KNMI station and see how many days it takes for the level to rise.


How deep is the groundwater below ground level?
The BRO gives the level relative to NAP. Subtract it from the AHN ground level at the well's location.
Similar sources
Bodemloket (soil information desk)Soil contamination and remediation per site; the BRO covers the structure of the subsurface and groundwater.
Actueel Hoogtebestand Nederland (AHN, national elevation model)The height of the ground surface; the BRO describes what lies beneath.
- DDINOloket (TNO) not in the index yet
TNO's older archive of boreholes and groundwater data from before the BRO; much of it has been moved to the BRO.
What to watch out for
- At most 2,000 objects per search
According to the interface description, the BRO limits the list to 2,000 documents; above that the service refuses ("Het aantal objecten is groter dan 2000"). For the whole country in one year you have to search in pieces, or use the PDOK copy.
- XML and POST
Searching only works via POST with a JSON body, and responses are XML in the BRO model. Only the series are available as CSV.
- No totals
The REST services give no national counts, and the list of bro-ids requires a data owner's KvK number. For counts, fetch the full PDOK copy.
- Old and new mixed
Wells from before the BRO were migrated from older archives (quality regime IMBRO/A, 72,798 of 97,768 wells); they are less complete than new registrations (IMBRO). 11,985 wells have since been removed but are still listed.
APIREST (OpenAPI 3.1 als YAML; zoeken met POST + JSON, antwoord XML of CSV) · read 16 Oct 2026
No key or account needed tested
groundwater monitoring wells (PDOK copy, 16 Oct 2026; 11,985 of them removed) tested
xmlcsvjson
Base URL
https://publiek.broservices.nl
Endpoints 13
- POST
/{domein}/{type}/{versie}/characteristics/searchesSearch an area (circle in km or box in WGS84) and period; XML response with numberOfDocuments and key data per object. For gmw, cpt, bhrp, bhrg, bhrgt, sfr, guf, epc, epl (not for gld, gar, gmn, frd, gpd). - GET
/{domein}/{type}/{versie}/objects/{broId}One full registration object, as XML in the BRO model (fullHistory=ja for wells and licences). - GET
/{domein}/{type}/{versie}/bro-ids?bronhouder={kvk}All bro-ids of one source holder (Chamber of Commerce number required); registered=ja|nee. - GET
/gm/v1/gmw-relations/{broId}For a well: the tubes and references to groundwater level (GLD), composition (GAR) and network (GMN) dossiers, as JSON. - GET
/gm/v1/gmn-relations/{broId}For a network: its wells and tubes, as JSON. - GET
/gm/gld/v1/seriesAsCsv/{broId}Groundwater level series as CSV: timestamp plus a value and remark column per kind (provisional, assessed, control, unknown). - GET
/gm/gld/v1/objects/{broId}/observationsSummaryOverview of the observations in a dossier (id, start, end, type, status), as JSON. - GET
/gm/gld/v1/objects/{broId}/observations/{observationId}One observation as XML, with startTVPTime/endTVPTime or mostRecentTVP. - GET
/gm/gld/v1/objectsAsCsv/{broId}The whole groundwater level dossier as CSV (rapportagetype, observatietype). - GET
/gm/gmw/v1/groundlevelposition-as-csv/{broId}Ground level of a well over time, as CSV. - GET
/gm/gmn/v1/networksList of monitoring networks, filterable by source holder, monitoring purpose and measuring points (without a filter: 204 empty). - GET
/gu/gpd/v1/seriesAsCsv/{broId}Extracted and injected volumes of a groundwater production dossier as CSV. - POST
/gm/gar/v1/table/dispatchGroundwater composition as a table for a dispatch result.
The APIs of this source 1 · from the provider's documentation from the description
PDOK-kopie (OGC API Features)
Key data of all wells, tubes, networks and dossiers in GeoJSON, 1,000 per page, without the 2,000 limit. Each object links to the XML on publiek.broservices.nl (imbro_xml_url). Handy for national counts.
https://api.pdok.nl/tno/bro-grondwatermonitoring-in-samenhang-karakteristieken/ogc/v1- GET
/collections/gm_gmw/items?f=json&limit=1000Putten (ook gm_gmw_monitoringtube, gm_gmn, gm_gmn_measuringpoint, gm_gmn_reference, gm_gld, gm_gar) - GET
/collections/{collectie}/queryablesFilterbare velden (alleen bro_id, pk en geometrie)
Filtering from the description
No query language: a JSON body (criteria set) with area, periods and a few attributes. Then continue per bro-id.
Parameters 11
area.enclosingCircle | Circle: center {lat, lon} (WGS84) and radius in kilometres. | tested |
area.boundingBox | Box: lowerCorner and upperCorner, each {lat, lon}. | tested |
registrationPeriod | {beginDate, endDate} as YYYY-MM-DD: when the object was registered. | tested |
correctionPeriod, constructionPeriod, removalPeriod | Other periods in the search (for wells: construction and removal). | from the description |
qualityRegime, underReview, owner, deliveryAccountableParty | Filters in the search: IMBRO or IMBRO/A, JA/NEE, Chamber of Commerce number of owner or source holder. | from the description |
bronhouder | Chamber of Commerce number, required for bro-ids. | from the description |
fullHistory | On objects: include earlier versions of the object. | from the description |
observationPeriodBeginDate, observationPeriodEndDate, filtered | On GLD objects: only observations in a period. | from the description |
asISO8601 | On seriesAsCsv: timestamps as ISO 8601 (1956-09-28T12:00:00+01:00) instead of epoch milliseconds. | tested |
filterOnStatusQualityControl | On seriesAsCsv: only values with this quality status. | from the description |
requestReference | Own reference echoed in the response. | from the description |
Fields in the responses (selection: well search result and series CSV) 9
| Name | Type | Meaning |
|---|---|---|
brocom:broId | tekst | BRO-id (GMW…, CPT…, GLD…) |
brocom:qualityRegime | tekst | IMBRO (nieuw) of IMBRO/A (overgezet uit oudere archieven) |
brocom:objectRegistrationTime | datetime | Moment van registratie |
brocom:standardizedLocation | punt | Locatie in ETRS89 (EPSG:4258), lat lon |
brocom:deliveredLocation | punt | Aangeleverde locatie, meestal RD (EPSG:28992) |
groundLevelPosition | getal · m t.o.v. NAP | Maaiveldhoogte bij de put |
wellConstructionDate | datum | Aanlegdatum van de put |
Beoordeelde Waarde [m] | getal · m t.o.v. NAP | Grondwaterstand in seriesAsCsv (ook Voorlopige, Controle, Onbekend) |
Tijdstip | getal · ms sinds 1970 | Tijd in seriesAsCsv; negatief vóór 1970 |
Limits and pitfalls
- A search that would return more than 2,000 objects is rejected: HTTP 400 with responseType 'rejection' and the reason 'Het aantal objecten is groter dan 2000' (more than 2000 objects). Make the area or period smaller. tested
- No key and no documented rate limit. A search returning 15 wells (31 kB XML) came back in 0.3 s. tested
- Errors are XML with responseType 'rejection' and a rejectionReason, also for an unknown bro-id ('Registratieobject GMW999999999999 bestaat niet.', HTTP 400). tested
- Dates differ per endpoint: observationsSummary gives 29-07-1971 (DD-MM-YYYY), seriesAsCsv epoch milliseconds (or ISO 8601 with asISO8601=true), XML ISO 8601. tested
- The OpenAPI descriptions are YAML (application/yaml), not JSON; tools that read only JSON must convert first. There are 15 services: /gm/{frd,gar,gld,gmn,gmw}/v1, /gm/v1, /sr/bhrp/v2, /sr/bhrg/v3, /sr/bhrgt/v2, /sr/cpt/v1, /sr/sfr/v2, /gu/{gpd,guf}/v1, /ep/{epc,epl}/v1. tested
- Wells with quality regime IMBRO/A (72,798 of 97,768) were migrated from older archives and are less complete. Removed wells are still included (deregistered/removal). experience
- robots.txt of publiek.broservices.nl returned HTTP 503 (16 Oct 2026): no rules to read. We only use the documented API with small calls. tested
Try it HTTP 200 · 362 ms · 16 Oct
https://publiek.broservices.nl/gm/v1/gmw-relations/GMW000000004076
{
"gmwBroId": "GMW000000004076",
"monitoringTubeReferences": [
{
"tubeNumber": 1,
"screenTopPosition": -10.05,
"gmnReferences": [],
"gldReferences": [
{
"broId": "GLD000000002796",
"url": "https://publiek.broservices.nl/gm/gld/v1/objects/GLD000000002796",
"accountableParty": "30277172"
}
],
"garReferences": []
}
],
"characteristics": null
}Shortened response, saved at harvest time. Click the URL for the real, current response.
Read from OpenAPI 3.1 (YAML) of the groundwater levels (GLD); every service has one at <base>/openapi · Swagger page to try calls (per service) · BRO product environment: dispatch handbooks and message catalogues per registration object. Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.
How to fetch it
curl https://publiek.broservices.nl/gm/v1/gmw-relations/GMW000000004076
More from TNO in our index
106 datasets in data.overheid.nl, Nationaal Georegister. These changed most recently.
- Zandbanen ondergrond 20052026-10-04
- Hoofdwaterlopen 20052026-10-04
- Zoutvelden en zoutproductieputten onder INSPIRE2026-09-16
- Olie- en gasvelden onder INSPIRE2026-08-25
- BRO - Bodemkundig booronderzoek (BHR-P) INSPIRE geharmoniseerd - Geologie2026-08-19
- Oppervlaktegeologie, Geologische kaart onder INSPIRE2026-08-19
More in this topic
See how this page is built
bron: bro
blokken: []
secties:
- ideeen
- verwerken
- koppelingen
- vergelijkbaar
- beperkingen
- code
cache:
tag: bron:bro
ververs: na statuscheck, als de bron nieuwer is
statuscheck:
methode: veld updated van de collectie gm_gmw in de PDOK-kopie (BRO
Grondwatermonitoring in samenhang)
verwacht: wekelijks
Source: content/bronnen/bro.yaml · Markdown



