Cadastre, land parcel and BFE number for an address
Find the cadastral number and district for an address, look up the parcel area, and fetch BFE number, valuation and local plans with the property lookup.
An address is what people write on a letter. The cadastre (matrikel) is what surveyors, the land registry and municipalities work with. To link an address to a plot, a property valuation or a local plan, you need three keys: ejerlav, cadastral number and BFE number.
| Key | What it is |
|---|---|
| Ejerlav | A cadastral district with a code, e.g. 2000179 Vestervold Kvarter, København |
| Matrikelnummer | The plot's number within the ejerlav, e.g. 162 or 7a |
| Jordstykke | One land parcel, identified by ejerlav + cadastral number |
| BFE number | Bestemt Fast Ejendom: the property that is sold, valued and registered |
One property (BFE) can consist of several parcels, and one parcel can hold several properties, e.g. owner-occupied flats.
Ejerlav and cadastral number are on the address
The access address already has ejerlav and matrikelnr:
curl -s "https://api.danadresse.dk/adgangsadresser/0a3f507a-ec01-32b8-e044-0003ba298018" \ -H "X-Api-Key: $DANADRESSE_API_KEY"
{
"id": "0a3f507a-ec01-32b8-e044-0003ba298018",
"adressebetegnelse": "Rådhuspladsen 1, 1550 København V",
"ejerlav": { "kode": 2000179, "navn": "Vestervold Kvarter, København" },
"matrikelnr": "162",
"esrejendomsnr": null
}ejerlav.kode is a number, matrikelnr is text (it can contain letters). esrejendomsnr is always null, because the old ESR property number has been replaced by the BFE number. If you have an address id, the fields are under adgangsadresse in GET /adresser/{id}.
The parcel area
With ejerlav and cadastral number you look up the parcel at GET /jordstykker/{ejerlavkode}/{matrikelnr}:
import os import requests API = "https://api.danadresse.dk" s = requests.Session() s.headers["X-Api-Key"] = os.environ["DANADRESSE_API_KEY"] a = s.get(f"{API}/adgangsadresser/0a3f507a-ec01-32b8-e044-0003ba298018", timeout=10).json() if not a.get("ejerlav") or not a.get("matrikelnr"): raise SystemExit("The address is not linked to a parcel") kode, nr = a["ejerlav"]["kode"], a["matrikelnr"] j = s.get(f"{API}/jordstykker/{kode}/{requests.utils.quote(nr)}", timeout=10).json() print(a["adressebetegnelse"]) print(f' {j["ejerlav"]["navn"]}, matr.nr. {j["matrikelnr"]}') print(f' registreretareal: {j["registreretareal"]} m² ({j["arealberegningsmetode"]})')
The fields on a parcel include ejerlav (code and name), matrikelnr, registreretareal (m²), arealberegningsmetode, bfenummer (the BFE number of the property the parcel belongs to) and kommune, region, sogn and retskreds.
You can also search:
GET /jordstykker?ejerlavkode=2000179lists the parcels in an ejerlav (page withsideandper_side). The list is sorted by ejerlav and cadastral number, so pages do not overlap.GET /ejerlav?navn=VestervoldandGET /ejerlav/autocomplete?q=Vesterfind ejerlav by name.GET /ejerlav/{kode}looks one up.
Parcels have no geometry and no lookup by coordinate. To go from a point on a map to a parcel, find the address with reverse geocoding and use its ejerlav and matrikelnr.
BFE number and the property
GET /api/v1/enrich/adresser/{id}/ejendom gathers the property at the address from several registers in one call. It accepts both an access-address id and an address id:
curl -s "https://api.danadresse.dk/api/v1/enrich/adresser/0a3f507c-0624-32b8-e044-0003ba298018/ejendom" \ -H "X-Api-Key: $DANADRESSE_API_KEY"
{
"adresseid": "0a3f507c-0624-32b8-e044-0003ba298018",
"adgangsadresseid": "0a3f507c-0624-32b8-e044-0003ba298018",
"antal_ejendomme": 1,
"ejendomme": [
{
"bfeNummer": "2004739",
"kommunekode": "0157",
"matrikel": {
"bfeNummer": 2004739,
"erFaelleslod": false,
"landbrugsnotering": null,
"udskiltVej": false,
"opdeltIEjerlejligheder": false
},
"vurdering": {
"vurderingsaar": 2020,
"ejendomsvaerdi": 49000000,
"grundvaerdi": 5850000,
"antal_vurderinger": 24
}
}
],
"zoning": {
"zone": "Byzone",
"lokalplaner": [
{ "planid": 1037007, "plannr": "209", "navn": "Lokalplan 209 for Hellerup Bydelscenter",
"anvendelse": "Centerområde", "ikraft": 20030925,
"dokument": "https://dokument.plandata.dk/20_1037007_1541679182349.pdf" }
]
},
"terraen": { "terraen_kote_m": 3.35, "datum": "DVR90", "model": "DHM/Terræn" },
"energimaerke": { "_status": "needs_credential" },
"antal_bygninger": 7,
"bygninger": [
{ "id": "70f6f506-2c5b-408f-8e9c-32353f2e0be9", "bygningsnr": "1", "opfoerelsesaar": 1885,
"samletBygningsareal": 2262, "antalEtager": 4, "anvendelseKode": "321",
"anvendelseNavn": "Bygning til kontor" }
]
}| Field | Content |
|---|---|
ejendomme[].bfeNummer | The BFE number (text). Use it for land-registry and valuation lookups |
ejendomme[].matrikel | The property's details from the cadastre, including whether it is split into owner-occupied flats |
ejendomme[].vurdering | The latest public valuation in DKK and the valuation year, or null |
zoning.zone | Zoning status, e.g. Byzone (urban), Landzone (rural) or Sommerhusområde (holiday homes) |
zoning.lokalplaner | Adopted local plans at the point with a link to the PDF. ikraft is a date as the number YYYYMMDD |
terraen.terraen_kote_m | Ground elevation in metres above sea level (DVR90) |
bygninger | Every BBR building at the address |
Note:
- An address can belong to several properties. That typically happens in buildings with owner-occupied flats. Always loop through the whole list.
- A field that cannot be fetched can hold an object with
_statusinstead of data.energimaerkeanswers like that today in every case. Treat it as missing data. - The response is cached for 24 hours, so a new valuation can take up to a day to show up.
Keys and errors
/api/v1/enrich/*needs a normal live key. Test keys get403withsandbox_scope, browser keys403withbrowser_key_scope.- The property lookup fetches data from Datafordeleren. During their service windows it answers
503with the codeupstream_unavailableand aRetry-Afterheader. Retry later and let the rest of your page work without property data. /adgangsadresser,/jordstykkerand/ejerlavread from our own copy and work with every key type.
Next steps
Related guides
Markdown source Spotted an error? Tell us API-reference (Swagger)