Een jaarverslag, de TomTom API en wat Python. Meer heb je niet nodig om 653 zorgpanden van Aedifica op de kaart te zetten. En in een uur snap je het profiel van het fonds beter dan uit het hele jaarverslag.
Ik houd een database bij met zo'n tachtig Europese vastgoedfondsen. Koers, NAV, korting op de NAV, dividendrendement, LTV. Allemaal nuttig. Maar een spreadsheet vertelt je waar een fonds waard is, niet waar het staat.
En bij vastgoed is “waar” het halve verhaal. Een zorgpand in een welvarende forensenplaats is iets heel anders dan hetzelfde pand in een krimpregio. Dat zie je niet in een cel met een getal. Dat zie je op een kaart.
Het goede nieuws: die locatiedata staat gewoon in het jaarverslag. Het slechte nieuws: begraven in een bijlage van achttien pagina's, als platte tekst in een PDF.
De bron: de bijlage die niemand leest
Aedifica is een Belgische zorgvastgoed-REIT. Achterin het jaarverslag 2024, onder “Summary of investment properties”, staat de complete portefeuille. Per pand: naam, oppervlakte, aantal bewoners, huur, bouwjaar en, cruciaal, de locatie. 653 panden, verspreid over acht landen.
Geen straat en huisnummer overigens. Alleen stad en land.
De pijplijn: PDF naar coördinaten naar kaart
1. De PDF uitlezen. pdfplumber trekt de tekst uit de bijlage. De tabel is rommelig, want de zijbalk van het jaarverslag lekt dwars door de regels heen, maar met een paar reguliere expressies houd je per pand een schone regel over.
2. Geocoderen met TomTom. Hier komt de API binnen. Voor elk pand stuur je “naam, stad, land” naar de TomTom Search API en krijg je een breedte- en lengtegraad terug. Vindt de API de naam van het zorgpand niet, dan val je terug op het centrum van de stad. TomTom levert ook de kaarttegels, dus je hele kaart draait op één API.
Had Google Maps gekund? Zeker, en met rijkere context: reviews, foto's, openingstijden, bezoekersdrukte. Voor dit soort profielwerk kan dat goud waard zijn. Maar TomTom, een Nederlands bedrijf uit Amsterdam, heeft een verrassend royale gratis tier. Duizenden requests per dag, ruim genoeg om deze hele portefeuille twee keer over te geocoderen zonder dat het een cent kost. Voor pure geocoding en kaarttegels is dat een prima alternatief, en nog van eigen bodem ook. Chapeau daarvoor.
3. Opslaan en tonen. De coördinaten gaan in een klein SQLite-bestand. De kaart is Leaflet met TomTom-tegels en marker-clustering, zodat 653 punten niet in één bruine vlek veranderen.
Eén vertrouwenscheck voordat je iets gelooft: tel de oppervlakte van alle panden die je hebt geparseerd op en leg dat naast het totaal dat het fonds zelf rapporteert. Bij mij: 2.231.810 m² geparseerd tegen 2.229.804 m² gerapporteerd. 0,09% verschil. Dan weet je dat je parser niet stiekem panden laat vallen.
Resultaat van het geocoderen: 584 panden exact, 69 op stadsniveau, 0 mislukt.
Wat je in een uur ziet
En dan staat het er.
Drie dingen vallen meteen op die je uit de cijfers nooit had gehaald.
Finland heeft de meeste panden. 235 van de 653 panden. Maar het zijn kleine units, kinderdagverblijven en kleinschalige zorg. In het jaarverslag is dat één regel; op de kaart is het een wolk.
Nederland zit in de dure catchments. De panden clusteren in Amstelveen, het Gooi, Heemstede, Oegstgeest. Welvarende forensenplaatsen, precies waar private-pay zorg het sterkst is. Dat is geen toeval, dat is strategie, en je ziet het in één oogopslag.
Het is modern vastgoed. Zet er een scatterplot van huur tegen oppervlakte naast en de bouwjaren komen mee: mediaan 2017. Eén uitschieter, Parc Imstenrade in Heerlen, ligt ver onder de mediane huur per m². Een groot, ouder complex. Op de kaart een stip, in de grafiek meteen een vraag voor het volgende gesprek.
De prijs per m² verraadt waar het geld zit
Nog een lens. Reken voor elk pand de huur per m² per maand uit en zet ze als losse punten neer, gegroepeerd per land.
Twee dingen springen eruit. Ten eerste de rangorde: de hoogste huren per m² staan in het noorden. Zweedse panden zitten rond de 22 euro per m² per maand, Finse rond de 19. Daaronder het VK en Ierland rond de 15, dan Nederland en België, en onderaan Duitsland rond de 10.
Ten tweede, en dat is wat een staafdiagram zou verbergen: de spreiding binnen een land is enorm. In het VK staat een pand op 5 euro per m² per maand en een ander op 36. Eén gemiddelde per land zou dat platslaan. De losse punten laten zien dat “het VK” geen prijs heeft, maar een wolk.
Leg dit naast de kaart en je ziet de tegenstelling. Op de kaart oogt Nederland het meest premium, met al die dure forensenplaatsen. In de huur per m² is Nederland gewoon middenmoot. De catchment is duur, de huur per m² niet uitzonderlijk. Dat is precies het soort vraag dat je wilt stellen: betaalt Aedifica in Nederland voor de locatie, terwijl de echte huuropbrengst per m² in Scandinavië zit?
Twee grafieken, twee verhalen. Pas als je ze naast elkaar legt, zie je waar je dieper moet graven.
Waar het misgaat (en waarom dat oké is)
Eerlijk zijn: het jaarverslag geeft alleen stad, geen straat. “Exact” betekent dus vaak dat TomTom het zorgpand op naam vond, niet dat ik een huisnummer had. Een handvol punten landt in de verkeerde plaats, zoals een Iers pand dat ineens in Denemarken opduikt. Voor een eerste profielschets maakt dat niet uit. Voor due diligence wel; dan is de volgende stap straatadressen toevoegen en treffers buiten de landsgrens weggooien.
En als je zo'n kaart publiceert: je TomTom-sleutel staat dan in de browser. Zet 'm in het TomTom-dashboard vast op je eigen domein, anders draait iemand anders 'm leeg.
Vroeger dagen, nu een uur werk
Het eerlijke deel dat vaak ontbreekt: dit soort analyse kostte vroeger dagen. Data uit een PDF peuteren, opschonen, een geocoder aan de praat krijgen, een kaart en grafieken bouwen, alles controleren. Een week werk was zo verdampt.
Met Claude is de pijplijn een kwestie van minuten. En dan ben je er nog niet, want de eerste versie zit vol kleine fouten: een Zweeds pand in kronen in plaats van euro's, een ontwikkelproject zonder bouwjaar, een stad die in het verkeerde land landt. Reken op een paar uur voordat je de inzichten echt te pakken hebt en vertrouwt. Maar uren, geen dagen. Dat verschil verandert wat je überhaupt de moeite waard vindt om uit te zoeken.
De echte les
Dit gaat niet over Aedifica. Het gaat erover dat publieke data plus één API plus een uurtje genoeg is om een asset-zwaar bedrijf echt te begrijpen. Niet de samenvatting, maar de werkelijke spreiding.
En het werkt alleen omdat de data, hoe begraven ook, gestructureerd genoeg was om eruit te trekken. Dat is dezelfde wet die ik eerder over vergelijkers schreef: wat machine-leesbaar is, wint. Een fonds dat zijn portefeuille netjes in een tabel zet, kun je in een middag doorgronden. Een fonds dat het in plaatjes verstopt, dwingt je tot giswerk.
Blijft de vraag: wanneer gaan bedrijven hun data standaard machine-leesbaar delen, in plaats van weggestopt in een PDF? Wie dat als eerste doet, wordt ook als eerste begrepen.