niclas wunder

Location analysis for a self-storage provider.

Address and radius in, location report out: competitors, prices, drive times, demographics and an AI market assessment with sources. What used to take days now takes minutes.

Context
Self-storage provider, nationwide
Service
AI Agents & AI Automation
Role
AI Engineer & Fullstack
Period
2026
Setup
Solo, via an AI agency

01 — Starting point

Every new location cost days.

The question behind it

“Is this location worth it – and who is already there?”

The company is growing and regularly opens new locations. Before every decision, the team had to do research: Which providers are in the area, at what prices? How many people live in the catchment area, with what purchasing power? That was done by hand, with expensive specialist tools and days of work per location.

02 — Solution

Address in, report out.

A custom application that brings together everything that matters for a location decision – in one report that can be exported.

  1. 01

    Competitors captured automatically

    A language model reads the competitors’ websites and turns them into structured location and price data – no matter how differently the pages are built.

  2. 02

    Prices you can compare

    Weekly, four-weekly and gross prices are converted: euros per square meter and month, net.

  3. 03

    Drive times and demographics

    Real car drive times to every competitor, plus population, households, purchasing power and age structure for six catchment areas.

  4. 04

    An agent that keeps researching

    In the background, a deep-research agent looks for more competitors, price trends and market insights – each with sources.

03 — Architecture

From the address to the report.

Simplified. Own competitor data, external geo services and an AI agent flow into one report.

Architecture · anonymized

A · Competition

Scraping

Reads competitor websites, an LLM extracts locations and prices.

LiteLLM · per provider

Updates

Keeps the competitor data up to date automatically.

APScheduler

B · Base

Database

Competitors, prices in €/m² net, radius search.

PostgreSQL

Backend

Geocoding, report logic, export.

Python · FastAPI

C · Enrichment

Research agent

Looks for more competitors, price trends and market insights, with sources.

Gemini Deep Research

Drive times

HERE

Demographics

ArcGIS

D · Report

Report view

Address and radius in, maps and tables out.

React · Leaflet

Excel export

Several sheets, for further work in-house.

XLSX

E · Background

The report is ready right away. The agent’s in-depth research runs asynchronously and adds to it afterwards.

04 — My role

From the workshop to operation.

Brought in by an AI agency that held the contract. Concept, development and operation were my responsibility.

  1. 01

    Workshop

    Requirements and product vision worked out together with the client.

  2. 02

    Core first

    Competitor analysis as the first stage: scraping, extraction, price comparison.

  3. 03

    Step by step

    Then drive times, demographics and the research agent. Every stage usable right away.

  4. 04

    Operation

    Automatic data updates, rolled out in containers.

05 — Result

What has changed.

The client is anonymized, the impact is not.

From days to minutes
A location analysis that used to take days of manual work is ready in seconds to a few minutes.
Tool subscriptions replaced
External data tools worth several thousand euros per year are no longer needed.
More than before
Competition, prices, accessibility, demographics and market analysis in one report. Locations can be compared – and checked in series.

06 — Tech

The stack.

For technical readers, teams and agencies.

AI & agents
LiteLLM (model-agnostic), Google Gemini Deep Research
Backend
Python, FastAPI, SQLAlchemy 2.0, APScheduler
Data & geo
PostgreSQL, HERE Matrix Routing, ArcGIS GeoEnrichment
Interface
React 19, Vite, Tailwind CSS 4, Leaflet
Operation
Docker, Alembic migrations, Excel export

Technical details

How scraping, geo analysis and the research agent are built in detail.

Scraping with the strategy pattern

One scraping strategy, one link filter and one scraper per provider. An LLM via LiteLLM serves as the universal extractor, so it is model-agnostic. Cleaned HTML text becomes structured JSON, typical LLM errors are corrected automatically and failed extractions are retried.

Radius in the database, drive time via HERE

A haversine calculation right in the database finds nearby competitors. The real car drive times come from the HERE Matrix Routing API and appear in the report, for example “25 min”.

Six catchment areas in parallel

ArcGIS GeoEnrichment enriches every location in parallel for 10, 20 and 30 minutes of drive time and a 5, 25 and 50 kilometer radius. Purchasing power comes as a total, per capita and as an index against the German average, and the population by age group.

In-depth research with status tracking

The research agent, based on Google Gemini Deep Research, runs asynchronously with status tracking. Besides previously unknown competitors, estimated prices and price trends, it delivers a management summary, each with sources.

Scheduler separate from the API

A dedicated APScheduler service keeps the competitor data up to date without affecting the API’s performance. The Excel export has its own sheets for competitors, market analysis, demographics and maps.

07 — Next

More like this.

The service

AI Agents & Multi-Agent Systems

For tasks that need several data sources, calculation steps and tools. With clear boundaries and human approval.

How I build AI agents

Similar project

AI assistant for the knowledge of a school

An internal wiki and a legal reference work of around 1,400 pages as a chat with sources. Built alone, through to operation.

Read the case study

Start a project

Which research eats up days for you?

Tell me in two or three sentences what it’s about. You’ll get an honest assessment within one business day – even if it says you don’t need AI at all.