Inspiration
For every new real estate client, the same bottleneck occurs: an analyst receives a brief ("we need to find XYZ") and must manually pull data from a multitude of disconnected sources before any actual analysis can begin. It’s unscalable because every new client requires a custom data pipeline.
We realized that to solve this, we didn't just need another SaaS dashboard; we needed to build the infrastructure behind a consulting methodology. We built a reusable data engine that turns a week of manual pipeline work into a two-minute workflow.
What it does
Our platform, Scout, is a dynamic geospatial dashboard and three-layer data engine that makes an analyst instantly smarter about any submarket:
- The Pipeline (Ingestion & Normalization): It dynamically pulls, normalizes, and caches data from 8 public sources (FRED, Census ACS, HUD, Zillow, building permit APIs, Transitland, Overture Maps, and Google Trends).
- The Workflow (Agentic Normalizer): Users simply drag and drop a proprietary client CSV (e.g., a site list). Our AI automatically categorizes it, geocodes the points, and renders them in 3D. Instantly, the client's private sites are contextualized against public data (rents, jobs, vacancy, migration) tied directly to the map.
- The Intelligence (Cycle Classifier & Reports): It goes beyond a visual dashboard by acting as a consulting capability. It features a deterministic, data-backed Market Cycle Classifier (Expansion, Recovery, Contraction) and uses Gemini 2.5 Flash to automatically generate a multi-page, exportable PDF market brief based on the live 3D map state.
How we built it
- Spatial Engine (Google Tech): We layered
deck.glover Google Maps (Vector mode). This specific Google technology choice allowed us to interleave 3D client-side graphics directly into the WebGL context, effortlessly rendering thousands of NYC PLUTO parcels, heatmaps, and submarket boundaries at 60fps on the fly. - Data Pipeline: We architected a Next.js (App Router) frontend on top of a Supabase (PostgreSQL + PostGIS) database. Node.js ingestion scripts pull the public feeds, while PostGIS handles the heavy spatial math (like nearest-neighbor ZIPs and transit proximity) and caching.
- AI Analysis (Google Tech): We integrated Gemini 2.5 Flash as the reasoning engine. Through an agentic architecture, we stream live geographic context and user constraints into the model, giving Gemini spatial awareness to toggle physical map layers, change camera tilts, and evaluate custom metrics.
Challenges we ran into
- GPU & Memory Bounds: Rendering massive amounts of GeoJSON data (like every building footprint or PLUTO parcel in a borough) occasionally crashed the browser tab. We overcame this by implementing zoom-adaptive visualization limits and strict viewport-boundary rendering.
- API Rate Limits: Relying on 8 different third-party APIs meant we constantly hit rate limits. We solved this by designing a robust fallback system that stores ZIP centroids and historical responses locally in our PostGIS cache.
- Synchronizing UI with PDF Exports: Ensuring the server-side
@react-pdf/rendererperfectly matched the complex live-state of the map UI (active layers, AI narrative, dynamic charts) was incredibly difficult and required strict state management.
Accomplishments that we're proud of
- Bridging the Gap: We successfully bridged the gap between a simple data dashboard and a true consulting capability. When a client's proprietary site list enters the tool, it is instantly contextualized.
- The Cycle Classifier: We built an analytical layer that no public tool provides: a transparent, four-signal market cycle classifier purely based on auditable data (ZORI slopes, ACS vacancy, BPS permits, FRED unemployment). It provides inputs that an analyst can confidently defend in a client meeting.
- AI Map Control: Successfully standardizing the communication between Gemini and the frontend, allowing the AI to organically fly the map camera, filter data, and analyze sites based on conversational prompts.
What we learned
- Performance Optimization: We learned the absolute necessity of efficient state management and WebGL optimizations when layering dense, dynamic data over Google Maps.
- Strict AI Output Formatting: We learned how critical prompt engineering is for deterministic outputs. Using Gemini to feed our PDF generation meant that a single rogue Unicode character (like an em dash) could break the entire PDF compiler, leading us to enforce strict JSON schemas and sanitization rules.
What's next for Scout
- National Expansion: Currently, our granular 3D building permits are limited to the NYC Open Data feed. We plan to integrate nationwide aggregators (like Regrid) or standardized ArcGIS FeatureServers to scale this capability to every major US metro.
- Workspace Persistence: Transitioning from
sessionStorageanonymous environments to full database persistence, allowing teams to save entire collaborative workspaces, including client CSV attachments and AI chat transcripts. - Collaborative Mode: Real estate is a team sport. We want to enable analyst teams to co-edit market cycle assumptions, share shortlisted sites, and generate unified client reports natively within the platform.
Built With
- deck.gl
- fema-nfhl
- fred
- geocoding
- geojson
- google-maps
- google-trends
- next.js
- supabase
- tailwind
- zillow
- zippopotam
- zustand
Log in or sign up for Devpost to join the conversation.