Production-grade engineering playbooks for automating municipal zoning tracking, GIS feed ingestion, spatial impact analysis, and compliance workflows — in Python.
municipalgis.org is an open reference library for the engineers who keep municipal spatial data honest. Zoning and parcel data lives across fragmented county portals, legacy shapefiles, scanned PDF bulletins, and rate-limited APIs — each with its own projection, schema, and idea of what a well-formed response looks like. This site documents the patterns that turn that chaos into deterministic, audit-ready spatial intelligence you can underwrite against.
Every guide is written for production, not for a demo that worked once against a single city's API: idempotent ingestion, strict coordinate-reference alignment, semantic normalization, compliance-aware orchestration, and continuous zoning-change detection — built on Python, PostGIS, and the modern geospatial toolchain that real teams ship.
- PropTech & real-estate-tech teams building underwriting and entitlement pipelines on municipal data
- GIS developers wrangling mixed projections, topology errors, and format drift at scale
- Urban planners & civic-data teams standardizing zoning across jurisdictions
- Python automation engineers who need resilient, defensible spatial ETL
The library is organized into three connected areas:
How municipal zoning data is structured, validated, and governed — coordinate-reference alignment, zoning-taxonomy mapping, schema validation and data-quality checks, spatial-database indexing, data lineage and provenance, and fallback routing when a feed goes dark. → Explore the section
Resilient pipelines that keep those layers fresh: polite rate-limit management, async batch processing, PDF and HTML scraping for jurisdictions with no API, attribute normalization, geospatial format conversion, export synchronization, and error handling with circuit breakers and retries. → Explore the section
Turning a fresh dataset into parcel-level answers about what just changed — geometry diffing between snapshots, spatial overlay analysis, bitemporal versioning, and audited zoning-change alerting routed to the teams that need it. → Explore the section
- Aligning coordinate reference systems for cross-jurisdiction tracking
- Mapping local zoning codes to standardized taxonomies
- Scraping zoning PDFs with Python
- Computing parcel-level zoning impact with GeoPandas overlay
- aiohttp vs httpx for municipal API polling
- PostGIS vs DuckDB + GeoParquet for zoning overlay storage
- Runnable, not hand-wavy. Every guide carries valid, correctly-indented Python and real failure traces — the way experienced engineers actually debug spatial pipelines.
- Failure-mode first. Datum drift, 429 storms, topology exceptions, silent schema drift, and partial-write corruption are treated as the main event, each with a concrete resilience pattern.
- Audit-ready by design. Immutable logs, lineage hashes, and provenance you can trace back to the exact municipal publication — the defensibility PropTech underwriting demands.
- Hand-authored diagrams. Each page includes an original, accessible SVG that explains its hardest concept.
The site is a static build produced with Eleventy and deployed to Cloudflare Pages.
npm install
npm run build # build the static site into _site/
npm start # local dev server with live reloadContent © Municipal GIS & Zoning Automation Hub. Spotted an error or have a pattern to contribute? Open an issue or a pull request.