Field note. Programmatic SEO
Building an address-level SEO engine from open data
Most programmatic SEO is spun text at scale, and Google's scaled-content-abuse policy exists to bury exactly that. We built the opposite for woningcheck.ai: a real, differentiated page for every address, assembled from Dutch open data, with a rollout that paces itself to Google's own indexation.
- ~5,000 fact-based pages live, from public data
- ~€0.01 AI cost per page, validated against source data
- 5 cities rolled out one at a time, gated on indexation
- Live build
- woningcheck.ai, an AI tool that reads property documents for Dutch homebuyers
- Amsterdam
- roughly 5,000 live pages in the Amsterdam corpus, with four more cities queued
The problem is timing, not data
woningcheck.ai is a new domain with no authority. Google takes weeks to months to index and rank new pages. Amsterdam homes sell in roughly three to four weeks. Publish a page when a property hits the market and it gets indexed around the time the sale closes and the search volume is gone. You are always one step behind the window.
So we stopped chasing the window and stood in it. Build a page for every address in the target area ahead of demand, let it age and get indexed, and when that address goes on the market you already rank. The data to do this is public. The engineering is in making it defensible at scale.
Every page is facts, not filler
Each page is assembled from open government data, not a template with the street name swapped in.
- Property. Surface area and build year from the BAG land registry, plus the official WOZ valuation and its multi-year trend, per address.
- Risk. Foundation risk by postcode, a real concern for pre-war Dutch housing.
- Neighbourhood. Registered crime, a livability index, traffic and neighbour noise, local election results, and median asking price per square metre.
An AI model writes the short narrative that connects those facts into something a buyer actually reads. It runs about one cent per page, and every number it states is validated against the source data before the page ships. The facts carry the page. The model just makes them legible.
Hub-and-spoke, not a flat dump
Thousands of orphan pages do not get crawled. So the pages hang off neighbourhood hubs: one page per district that aggregates its own stats and links down to every address in it.
The hubs target the mid-tail queries and pass crawl equity down to the address pages. Pages too thin to stand on their own are marked no-index and kept out of the sitemap. Coverage without junk.
A rollout that paces itself
The corpus spans five cities and roughly 18,000 addresses. Publishing all of it at once on a young domain is how programmatic SEO gets buried. So the rollout is a state machine, not a launch.
It publishes one city, submits the sitemap to Google through the Search Console API, reads the indexed-versus-submitted count back, and promotes the next city only when the current one clears an indexation gate. No one decides when to expand. Google's own indexation does.
Measurement is part of the build, not a bolt-on
Search Console data is pulled into a live operations panel every few hours: impressions, position, and the indexed count per city. The rollout reads the same numbers it displays. You steer the expansion on indexation and impressions, not on a hunch.
Why this is a Leadspot build
This is the shape of system we build. Open data in, a compounding content asset out, an AI pipeline that costs cents per unit, and the measurement to prove it is working before you scale it.
It is the same muscle as the revenue systems we build for B2B scale-ups: clean inputs, automation that does the repetitive work, and a feedback loop wired so the thing improves on its own. If you have a data asset you suspect is worth more than it is doing, that is the conversation we like having.
Want a system like this?
We build go-to-market foundations for B2B scale-ups. Tell us where your stack is today and we will sketch what it could be.