# Basisregistratie Adressen en Gebouwen (BAG)

Alle adressen en gebouwen van Nederland met bouwjaar, oppervlakte en gebruiksdoel. De ruggengraat voor alles wat op adresniveau gekoppeld moet worden.

- Uitgever: Kadaster, Publieke Dienstverlening Op de Kaart
- Gebied: Nederland · Laagste detail: adres en gebouw
- Periode: 2009 – heden · Ververst: dagelijks
- Toegang: Open · Licentie: Public Domain Mark 1.0 (volgens de PDOK-API, 16 okt 2026)
- Koppelsleutels: BAG-id, postcode + huisnummer
- Status: grijs
- URL: https://www.kadaster.nl/zakelijk/registraties/basisregistraties/bag

## Wat kun je ermee?
- **Hoe oud zijn de huizen in je straat?.** Elk pand heeft een bouwjaar. Kleur een kaart naar bouwjaar en je ziet hoe de stad gegroeid is.
- **Adressen koppelen.** Zet een adreslijst om naar coördinaten en buurtcode via de BAG. Dan kun je elke lijst naast CBS-cijfers leggen.

## Zo verwerk je het
1. **Zoek een adres in de OGC API.** Naast WFS en download heeft PDOK de BAG als OGC API Features (versie 2) met zes collecties: adres, pand, verblijfsobject, ligplaats, standplaats en woonplaats. Antwoord in GeoJSON, licentie Public Domain Mark 1.0, bijgewerkt op 15 oktober 2026. Zoek op postcode en huisnummer.
   `https://api.pdok.nl/kadaster/bag/ogc/v2/collections/adres/items?f=json&postcode=3511AB&huisnummer=1`
2. **Panden filteren op bouwjaar.** Elk pand heeft bouwjaar, status, gebruiksdoel en links naar zijn verblijfsobjecten. Welke velden filterbaar zijn, staat per collectie onder /queryables (pand: bouwjaar, gebruiksdoel, status, aantal_verblijfsobjecten …), bijvoorbeeld https://api.pdok.nl/kadaster/bag/ogc/v2/collections/pand/queryables?f=json
   `https://api.pdok.nl/kadaster/bag/ogc/v2/collections/pand/items?f=json&bouwjaar=1650&limit=10`
3. **Doorbladeren met next.** Standaard krijg je 10 objecten, maximaal 1.000 per verzoek (limit). Volg de link met rel 'next' voor de volgende pagina.

## Interessante koppelingen
- Welke buurten bouwen het meest bij? → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via BAG-id → buurtcode. Tel nieuwe panden per buurt en deel door het bestaande aantal woningen.

## Vergelijkbare bronnen
- [openstreetmap](https://www.opendataindex.nl/bron/openstreetmap.md): Ook winkels, voorzieningen en paden, maar niet officieel.

## Waar je op moet letten
- **Geen totaal in de OGC API.** De OGC API geeft geen numberMatched: hoeveel panden of adressen aan je filter voldoen, weet je pas als je alle pagina's hebt opgehaald. Voor tellingen over heel Nederland is de download handiger.
- **Adres zoeken is traag.** Zoeken op postcode en huisnummer in de collectie adres duurde op 16 oktober 2026 steeds zo'n 7 seconden per vraag. Voor een lange adreslijst is de download sneller.

## API (OGC WFS 2.0.0)

- Basis: https://service.pdok.nl/lv/bag/wfs/v2_0
- Toegang: Geen sleutel. Kosten: none; gebruiksvoorwaarden: https://creativecommons.org/publicdomain/zero/1.0/deed.nl. (uit de beschrijving)
- Formaten: 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
- Filteren: 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`: beschrijving van de dienst
- `GET ?request=DescribeFeatureType`: velden van een laag (XSD)
- `GET ?request=GetFeature`: de objecten zelf, met geometrie
- `GET ?request=ListStoredQueries`: opgeslagen zoekvragen
- `GET ?request=DescribeStoredQueries`: uitleg bij opgeslagen zoekvragen

### Parameters
- `typeNames`: welke laag: bag:pand, bag:ligplaats, bag:standplaats, bag:verblijfsobject, bag:woonplaats (uit de beschrijving)
- `outputFormat`: bv. application/json voor GeoJSON (uit de beschrijving)
- `srsName`: projectie, bv. EPSG:4326 voor webkaarten (standaard EPSG:28992, RD) (uit de beschrijving)
- `count / startIndex`: pagineren (uit de beschrijving)
- `filter`: FES-XML-filter op velden of geometrie (uit de beschrijving)
- `bbox`: rechthoek in de gekozen projectie (platform)

### Velden (16)
`geom` geometrie, `identificatie` string, `rdf_seealso` string, `oppervlakte` long, `status` string, `gebruiksdoel` string, `openbare_ruimte` string, `huisnummer` long, `huisletter` string, `toevoeging` string, `postcode` string, `woonplaats` string, `bouwjaar` long, `pandidentificatie` string, `pandstatus` string, `fuuid` string

### Limieten en valkuilen
- Maximaal 1.000 objecten per verzoek (CountDefault). (uit de beschrijving)
- Pagineren kan: count en startIndex (ImplementsResultPaging). (uit de beschrijving)
- Omvang (WFS, resultType=hits, 16 okt 2026): 11.442.545 panden, 9.994.710 verblijfsobjecten, 54.006 standplaatsen, 12.787 ligplaatsen, 2.503 woonplaatsen. Onze automatische telling stopt na 30 s en blijft daarom soms leeg. (getest)
- OGC API: maximaal 1.000 objecten per pagina (een hogere limit wordt stil teruggezet naar 1.000); de volgende pagina via de link rel=next met een cursor. Geen numberMatched: tellen kan alleen met de WFS (resultType=hits). (getest)
- Tellen zonder filter is traag: resultType=hits op bag:pand of bag:verblijfsobject duurde ~30 s (16 okt 2026). Met een filter op postcode 1–5 s. (getest)
- Een adres zoeken in de OGC API (collectie adres, postcode + huisnummer) duurde steeds ~7 s; dezelfde vraag aan de WFS (verblijfsobject) ~1,4 s. (getest)
- De WFS bevat per object alleen het hoofdadres; nevenadressen ontbreken (staat in de dienstbeschrijving). Voor álle adressen: de collectie adres in de OGC API of het BAG-extract. (uit de beschrijving)
- Veldnamen verschillen per ingang: de WFS heeft openbare_ruimte en woonplaats, de OGC API openbare_ruimte_naam en woonplaats_naam. De OGC API geeft ook ingetrokken objecten terug (status 'Verblijfsobject ingetrokken'): filter op status. (getest)
- Postcode is hoofdlettergevoelig: postcode=3511ab geeft 0 resultaten zonder foutmelding. Een onbekende queryparameter geeft wel een 400 met de naam erbij. (getest)
- gebruiksdoel is een kommalijst (een verblijfsobject kan woon- én winkelfunctie hebben): tel met PropertyIsLike, niet met PropertyIsEqualTo. (ervaring)
- Panden met status 'Bouwvergunning verleend' of 'Bouw gestart' hebben al een bouwjaar. Laat ze weg als je bouwjaren telt. De WFS heeft alleen de huidige stand: gesloopte panden staan er niet in. (ervaring)
- De Locatieserver (geocoder) is sneller voor losse adressen, maar robots.txt van api.pdok.nl sluit /bzk/locatieserver/* uit. Voor scripts: postcode + huisnummer in de WFS of OGC API. (getest)

### Voorbeeld
```
https://service.pdok.nl/lv/bag/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&typeNames=bag:verblijfsobject&outputFormat=application/json&srsName=EPSG:4326&count=2&filter=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CValueReference%3Epostcode%3C/ValueReference%3E%3CLiteral%3E3511AB%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E
```

## Wat je ermee kunt bouwen
- [Aardbevingentracker: elke beving op de kaart, met gemeente en woningen](https://www.opendataindex.nl/bouwen/aardbevingentracker.md): Een kaart en tijdlijn van alle bevingen in Nederland sinds 1986, met kracht, soort, gemeente en buurt, en het aantal adressen binnen twee kilometer van het epicentrum.
- [Klimaatrisico-check voor een adres](https://www.opendataindex.nl/bouwen/klimaatrisico-adres.md): Typ een postcode en huisnummer en zie in één rapport hoe het pand ervoor staat bij hitte, wateroverlast, overstroming, droogte en funderingsproblemen, met de kaarten van de Klimaateffectatlas, het AHN, de BAG en echte grondwatermetingen uit de BRO.
- [Schoolkeuzehulp: basisscholen rond je adres, met leerlingen en schooladviezen](https://www.opendataindex.nl/bouwen/schoolkeuzehulp.md): Typ een postcode en huisnummer en zie alle basisscholen binnen een straal, op afstand gesorteerd, met hun leerlingenaantal door de jaren en welk deel van de kinderen een havo- of vwo-advies kreeg. Alleen open data van DUO en de BAG.
- [Woningmarktdashboard voor je gemeente](https://www.opendataindex.nl/bouwen/woningmarkt-dashboard.md): Eén pagina per gemeente met verkoopprijzen, WOZ-waarde, woningvoorraad, bouwjaren, woninggrootte en leefbaarheid, naast het landelijk gemiddelde. Alles uit open API's zonder sleutel.
- [Zonnepanelen-check voor je eigen dak](https://www.opendataindex.nl/bouwen/zonnepanelen-check.md): Typ een postcode en huisnummer en zie hoe groot je dakvlakken zijn, welke kant ze op kijken, hoeveel zon er valt en wat panelen ruwweg zouden opleveren, met open data van BAG, AHN, KNMI en RVO.


## Voorbeelden met echte cijfers (2)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Panden naar bouwjaar (alleen wat er nu staat): 104.301 panden in 2025, 3% meer dan in 2005** (2025). Tabel bag:pand. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/pdok-bag-bouwjaar)
  - `https://service.pdok.nl/lv/bag/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&typeNames=bag:pand&resultType=hits&FILTER=%3CFilter%3E%3CAnd%3E%3CPropertyIsEqualTo%3E%3CValueReference%3Ebouwjaar%3C%2FValueReference%3E%3CLiteral%3E2025%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3CPropertyIsNotEqualTo%3E%3CValueReference%3Estatus%3C%2FValueReference%3E%3CLiteral%3EBouwvergunning%20verleend%3C%2FLiteral%3E%3C%2FPropertyIsNotEqualTo%3E%3CPropertyIsNotEqualTo%3E%3CValueReference%3Estatus%3C%2FValueReference%3E%3CLiteral%3EBouw%20gestart%3C%2FLiteral%3E%3C%2FPropertyIsNotEqualTo%3E%3C%2FAnd%3E%3C%2FFilter%3E`
- **Verblijfsobjecten in de BAG naar gebruiksdoel: het meest wonen (8.699.374 verblijfsobjecten), dan overig en industrie** (oktober 2026). Tabel bag:verblijfsobject. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/pdok-bag-gebruiksdoel)
  - `https://service.pdok.nl/lv/bag/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&typeNames=bag:verblijfsobject&resultType=hits&FILTER=%3CFilter%3E%3CPropertyIsLike%20wildCard%3D%22*%22%20singleChar%3D%22.%22%20escapeChar%3D%22!%22%3E%3CValueReference%3Egebruiksdoel%3C%2FValueReference%3E%3CLiteral%3E*overige%20gebruiksfunctie*%3C%2FLiteral%3E%3C%2FPropertyIsLike%3E%3C%2FFilter%3E`
  - `https://service.pdok.nl/lv/bag/wfs/v2_0?service=WFS&version=2.0.0&request=GetFeature&typeNames=bag:verblijfsobject&resultType=hits`
