← Back to mapData Sources
Data is refreshed automatically on the 1st of every month via a scheduled GitHub Actions pipeline run.
- City of St. Paul Open Data: crime, permits
- City of Minneapolis Open Data: crime, permits
- OpenStreetMap: trails, transit stops, schools, grocery stores, restaurants/bars, healthcare facilities, entertainment venues, apartment buildings, street network (Walk/Bike Score), and the named-place search index
- Geofabrik: a monthly-refreshed Minnesota OSM data extract, queried locally instead of the public Overpass API: faster and immune to that API's rate limits/outages
- Nominatim: address search-bar geocoding and reverse-geocoding a clicked map point to a street address
- U.S. Census Bureau ACS 5-Year Estimates: median home value, gross rent, household income, poverty rate, housing cost burden, homeownership rate, unemployment rate, broadband/internet access
- Zillow Research: for-sale home listing inventory by ZIP, used as a housing-market tightness signal
- MnDOT Traffic Forecasting & Analysis: Annual Average Daily Traffic (AADT) volumes and pedestrian/cyclist crash locations
- CDC PLACES: obesity and diabetes prevalence by census tract
- Supabase: PostGIS database holding ~100K OpenStreetMap houses (the Houses map layer and Find Your Match) and a month-by-month history of every district and ZIP score
- FEMA National Risk Index: natural hazard risk score by census tract
St. Paul's crime data has no geocoded address in the source, only a district, so individual crime incidents aren't plotted as markers on the map (Minneapolis crime does include real coordinates and is plotted). St. Paul crime still fully feeds the Safety index and district-level Crime Rate metric.
Built With
- Next.js: the frontend app and page routing
- React: the UI components
- TypeScript: type-checked frontend code
- Leaflet: the interactive map, district boundaries, and data-point markers
- react-leaflet: React bindings for Leaflet
- Recharts: the trend and affordability line charts
- Python: the data pipeline language
- pandas: tabular data cleaning and aggregation
- Shapely: geospatial joins (points/lines to district polygons)
- pyosmium: reads the local Geofabrik OSM extract directly, replacing live Overpass API calls
- NumPy: the score normalization math
- SHAP: explaining which inputs drive the score (Score Drivers page)
- Supabase / PostGIS: score history and the viewport-loaded Houses layer
- pytest: unit tests for the scoring math
- Playwright: end-to-end tests of the map UI
- GitHub Actions: scheduled data refreshes and CI on every pull request
- Cloudflare Workers: hosting and deployment
- Claude Code: AI-assisted development of the pipeline and frontend