Digital services · BuurtApps
Tens of thousands of business pages, auto-generated
BuurtApps connects local entrepreneurs and organisations in a single municipality app. Filling such an app (finding thousands of businesses, classifying them correctly and writing a page for each) used to be weeks of manual work. A custom pipeline now does most of it automatically: from raw business data to tens of thousands of ready-made business pages.
~2 months
saved with the business scraper
tens of thousands
auto-generated business pages
2-3 hrs/day
saved with the other tools
The challenge
Every new municipality app means gathering thousands of local businesses, classifying them correctly and building a page for each one with contact details, opening hours and a description. By hand that takes weeks per municipality, and the moment it's done, it's already out of date. It's exactly the kind of repetitive job that's never really finished.
Our approach
We built a pipeline that reads in the raw business data, automatically places each business in the right category, enriches the details from the business's own website (logo, contact details, social media and a short summary) and then generates a clean page per business, ready for the app or CMS.
- 1Load and clean the data
- 2Automatically categorise every business
- 3Enrich from each business's own website
- 4Generate a page per business
- 5Stage in Drive/CMS, without duplicates
The result
A new municipality app is now filled in days instead of weeks, with tens of thousands of consistent business pages. The business scraper alone saved around two months of work; the other tools together save an average of 2-3 hours a day. The pipeline is repeatable and re-runs safely: built-in dedup and idempotency mean a second run never creates duplicate pages, so you can update with confidence.
What else we built
Alongside the page maker we built a set of small, self-contained tools that keep the municipality apps filled and up to date automatically.
News scraper
Keeps the in-app newspaper archive automatically up to date for two local papers (Weekblad De Noordwijker and the Noordwijkerhouter).
- Challenge
- Each week the newest paper has to be added and the oldest removed: manual archive upkeep that kept slipping.
- Approach
- A tool that weekly puts the new edition on top, drops the oldest and pushes it straight into the CMS.
- Result
- Two newspaper archives stay current all year, with no one having to watch over them.
Local media · Noordwijk
ViewEvents scraper
Pulls events from the local agenda and adds them automatically as tidy events in the app.
- Challenge
- Retyping events by hand, preventing duplicates and sorting everything neatly costs a lot of time and quickly falls behind.
- Approach
- Daily sync from the local agenda, with an automatic duplicate filter, sorting into fixed categories and a weekly 'This week in Noordwijk' overview.
- Result
- Around 200 events a month, processed automatically and always current in the app.
Local events · Noordwijk
ViewPer-venue agendas
The same approach as the events scraper, but per venue as a standalone, embeddable agenda. Each venue gets its own live agenda that updates itself.
- Result
- An always-current agenda per venue, with no manual upkeep.
- Theater De Muze
- Landgoed Calorama
- SpaceExpo (in 4 languages)
- Sportbedrijf Noordwijk
Culture, recreation & sport · Noordwijk
ViewP2000 emergency feed
Bundles emergency-services (112) alerts from three villages (Noordwijk, Noordwijkerhout, De Zilk) into one clear, live feed in the app.
- Challenge
- Individual alerts are messy and full of noise (for example 'ambulance returning to base').
- Approach
- Merge alerts, filter out noise, colour-code per service (ambulance, fire, police, KNRM) and show it all in 4 languages.
- Result
- One calm, readable live feed of what's happening nearby.
Safety & local news · Noordwijk area
ViewWeather app
A weather dashboard per municipality with forecast, air quality, tides and beach flags.
- Approach
- Combines several official sources (incl. KNMI/Open-Meteo and Rijkswaterstaat) into one dashboard that works even without JavaScript.
- Result
- One weather page serving 15 municipalities, including coast and river info where relevant.
Local information · 15 municipalities
ViewLeaflet & offers scrapers
Turns local shops' weekly offers automatically into a tidy, mobile leaflet in the app.
- Approach
- Weekly scrape of the shop sources, merged into a standalone leaflet page; also flags price differences between website and shop.
- Result
- Local offers stay current every week, automatically.
- Slagerij Krijn van der Bent
- Slagerij Roest
- Noordwijk Folders Hub (multiple shops bundled)
Local retail · Noordwijk
ViewFuel-price map
An interactive map with live fuel prices in the region.
- Result
- Residents see at a glance where filling up is cheapest.
Local info · Noordwijk area
ViewCMS uploader
A helper tool that safely creates missing categories in bulk in the CMS.
- Approach
- With built-in safety (dry-run, per-app settings) so nothing ever goes live by accident.
- Result
- Setting up a new app structure takes minutes instead of manual clicking.
Internal tooling · all apps
ViewCRM for the municipality app
A self-hosted CRM for the whole sales and relationship administration behind the municipality app: one place for the pipeline, contacts, invoices and the entrepreneur portal.
- Challenge
- Managing hundreds of local entrepreneurs, their subscriptions, invoices and listings called for a CRM. A commercial package quickly cost tens of thousands of euros a year, with your data and your process in a vendor's hands.
- Approach
- We built an in-house CRM, fully self-hosted. An admin side for sales and relationship management (pipeline, deals, contacts, companies, invoices, municipalities) and a retail side: a portal where entrepreneurs manage their own page, news, agenda and offers.
- Result
- One person runs the whole administration alone, with no vendor lock-in and full control over data and privacy. That replaces a package costing over 50,000 euros a year.
In-house CRM system · Noordwijk
View