PV-NRW · Geo-AI Pipeline
Slide 01 / 12
Production System · Data Engineering · Geospatial AI · Sales Operations

Automated Identification of High-Potential Solar Rooftops

Geo data, solar analysis, and AI vision — combined into a ranked list of high-potential rooftops for solar sales.

✓ Running in production in an active solar sales operation.

PostGIS Python ETL Google Solar API Gemini Vision AI Orchestration Railway / Cloud Deploy
The Problem

Solar sales is expensive — and most lead lists are guesswork

Solar installation companies burn time and budget chasing rooftops that don't pan out. Reviewing every prospect through Google Maps, gut instinct, and site visits simply doesn’t scale, and it leads to inconsistent decisions across the team.

→ What this costs companies
  • Heavy lifting just to screen initial prospects
  • Less bandwidth for the rooftops that actually matter
  • No repeatable, systematic lead process
01

💸 High cost per closed deal

Unfiltered leads burn budget before a single panel gets installed.

02

🐌 Manual review doesn't scale

Checking rooftops one by one — via maps, gut checks, and research — is a bottleneck that limits growth.

03

📦 Relevant data is scattered across silos

Geo, solar potential, and image data all exist separately and aren't easy to combine.

The Solution

A modular data pipeline that scores rooftops by
solar potential

Disparate geo and solar datasets are merged, enriched, and ranked into a clean, actionable lead list — including annual energy yield, obstruction detection, PV status, and export-ready output for CRM and sales.

PER ROOFTOP OUTPUT
Address · Roof area (m²) · kWh/yr
Orientation / Tilt · Obstructions
Material / Condition · Score · Priority (A/B/C)
🏛️
ALKIS / GRU / LoD2

Building footprints & geodata foundation

PostGIS Python
☀️
Google Solar API

Solar potential, roof segments, kWh/yr

REST API enrichment
🤖
Gemini Vision AI

Condition, material, obstructions, existing PV?

AI Vision Structured Output
🎯
Scoring & Lead Export

Priority tiers, filters, CSV / Report / Map

Scoring Model Web App
Case Study

Dortmund: A Full End-to-End Pipeline Run

A complete pipeline run covering the city of Dortmund — from raw cadastral data through solar and AI enrichment to a ready-to-use prioritized lead list.

Pipeline LIVE · Cloud-deployed (Railway) · Filterable web report
5.516
Buildings imported
ALKIS base data
4.557
Solar API coverage
~83% enriched
4.169
AI vision-analyzed
structured roof assessments
1.990
Suitable rooftops
scored A or B
752
Existing PV detected
optionally filtered out for new customer acquisition
~1.200
Priority A candidates
auto-classified
5.516
Buildings
4.557
Solar Data
1.990
Suitable Rooftops
~1.200
A-Tier Leads
Value / ROI

What this means for
solar sales teams

The system improves pre-qualification and reduces wasted sales effort. It's not a replacement for final technical planning, but it gives teams a faster, more consistent starting point for deciding where to focus.

Actual impact will vary by region, data quality, and sales process.

⏱️

Less time on dead-end leads

Early filtering by potential, obstructions, and PV status keeps the pipeline focused.

🎯

More focus on the best opportunities

A/B/C priority tiers undifferentiated building lists.

📈

Scales to new cities

Same pipeline, new geography — no rebuild required.

Decisions teams can trust

Visible scoring logic helps reps and planners understand and explain every prioritization decision.

🗺️

Smarter campaign planning

Map view and clustering support territory planning and regional outreach.

Sales Application

A filterable web report for
solar lead discovery

Filter and rank rooftops based on data that has already been fully analyzed. The report supports the full outreach workflow: identifying high-potential prospects, planning campaigns, and handing off clean lead lists to the field.

  • Minimum annual yield (kWh/yr) and panel count thresholds
  • Max-obstructions filter + toggle for "no existing PV"
  • Filter by orientation, tilt, roof condition, and material
  • Ranked output — not a raw, unsorted building list
  • CSV export ready for CRM workflow and sales team handoff
PV-roof Report Screenshot
🔗 pv-dach-leads-dortmund-production.up.railway.app
Territory Analysis

Interactive potential map
for territory planning and lead clusters

The map view adds a spatial layer to the web report, making potential clusters, available roofs without PV, and priority areas visible at a glance.

  • Color-coded by potential tier (e.g. kWh/yr)
  • "No existing PV" filter to focus on new customer opportunities
  • Spatial clusters easy to spot
  • Supports campaign planning and field team routing
  • Territory-level view (map) and individual lead view (report) — in one place
Interaktive Potenzialkarte Dortmund
Lead Details

Technical decision data
for each rooftop

Beyond lead screening, the system provides key technical metrics for each rooftop to support a reliable first-pass assessment.

  • Address / property location
  • Roof area and usable roof segments
  • Orientation and tilt
  • Solar irradiation / solar potential
  • Estimated annual yield (kWh/year)
  • PV status, obstacles, material, and condition
Result
  • Not just a simple yes/no lead decision, but a transparent technical basis for prioritization and outreach.
Technische Entscheidungsdaten pro roofobjekt
Engineering

Data Pipeline & Enrichment
(modular, testable, city-agnostic)

A clean, modular ETL stack with clearly separated stages. Each phase can be tested independently, re-run as needed, and deployed to new geographies without rework. Multiple data sources converge into a consistent output schema.

TECH STACK
Python PostGIS Google Solar API Gemini AI Railway
1
ALKIS / GRU / LoD2 Import
normalize_alkis.py
2
Google Solar API Enrichment
enrich_solar.py
3
Gemini Vision AI Analysis
analyze_roof_gemini.py
4
Scoring & PostGIS Data Modeling
score_leads.pyPostGIS
5
& Deployment
WorkflowsRailway
System Architecture

The System Architecture
at a Glance

Geodata, the Solar API, and Vision AI feed into a single modular pipeline. The output isn't just an analytics model — it's a deployed, usable system: reports, an interactive map, and data exports ready for sales operations.

Geo + Solar API + Vision AI → Prioritized Solar Roof Leads
📥 Data Sources
🗺️ ALKIS / GRU / LoD2

Cadastral geodata: building footprints, addresses, building references

☀️ Google Solar API

Solar potential, roof segments, kWh/yr, orientation, tilt

📸 Aerial imagery

Visual analysis of roof condition, obstructions, and materials

⚙️ Pipeline (modular)
1 Import & Normalization

Python + PostGIS

2 Solar Enrichment

REST API

3 Vision Analysis

Gemini Vision + structured output

4 Scoring & Data Model

A/B/C + quality flags

📤 Outputs
📊 CSV Export

CRM / marketing

📋 Web Report

filters + score explanations

🗺️ Interactive map

Potential clusters

🔧 Operations
🔄 Process orchestration batch runs, retries, logging, error alerts
☁️ Cloud deployment on Railway web app accessible to the sales team
Scoring

Transparent.
Explainable. Built for sales teams.

This isn't a black-box ML score. Every component is visible, weighted, and easy to explain — which matters when sales teams and planners need to trust the score and act on it.

91
91 / A
A
Priority A · Top Lead

Score components · example property (Rheinlanddamm 141)

Solar potential
+30
Orientation (south-facing)
+20
Roof condition (good)
+20
Usable area / panel count
+16
Obstructions (none)
+10
Roof material (brick)
+5
Existing PV
0
Why Priority A?
  • 8,240 kWh/yr · high energy potential
  • South-facing · favorable solar exposure
  • No meaningful obstructions · straightforward installation
  • No existing PV detected · open sales opportunity
Score based on rule-weighted components + data quality flags. No opaque ML model.
Skills & Capabilities

What this project demonstrates

An end-to-end data product: from problem definition and architecture through implementation, deployment, reporting, and operational use.

Live demo: pv-dach-leads-dortmund-production.up.railway.app
Status: Running as a pilot with real data in a live business context
🛠️

Data Engineering

scalable to new cities and data sources

Python SQL ETL PostGIS
🌍

Geospatial Engineering

built around standard German geodata formats

PostGIS GeoJSON ALKIS LoD2
🤖

AI / Vision Integration

adaptable to additional enrichment use cases

Gemini API Vision AI Structured Output
🚀

Productization & deployment

delivered as a working system, not a notebook

Railway REST APIs Web App
Project scope

Architecture, ETL pipeline, data model, AI enrichment, scoring logic, reporting, deployment, and iteration.