Interactive 3D choropleth of Jersey City property tax payments, from 2018 to 2025: jct.rbw.sh
![]() |
![]() |
![]() |
![]() |
All view state is URL-encoded via use-prms (view, aggregation, selection, mh max height, pct percentile, sp settings position, ...):
- Lots —
?agg=lot&sel=14507-1 - Wards —
?agg=ward&sel=ward-E&wg=blocks - Units —
?agg=unit&mh=1100&pct=99&sp=br - From the west —
?v=…+106&agg=lot
Every property tax payment in Jersey City, visualized as extruded polygons on a map. Color and height encode
Data is scraped from the HLS property tax inquiry system (70K+ accounts), joined with parcel geometries from NJGIN and JC Open Data, and census population data from Census TIGER/Line.
src/jc_taxes/ Python package: scrape, process, export
cli.py `jct` CLI (enumerate-accounts, fetch, export)
api.py HLS API client
payments.py Extract yearly payment totals from cached JSONs
geojson_yearly.py Join payments + geometries → GeoJSON per year/aggregation
building_desc.py Parse encoded Building Desc field (stories, units, etc.)
census.py Census block + ward geometry/population processing
data/ Parcel data, payment caches, parquet exports
census/ Census block geometries, ward boundaries, population
www/ Vite + React web app (see www/README.md)
jct enumerate-accounts # discover ~70K accounts from parcel block numbers
jct fetch # fetch account details from HLS (one JSON per account)
jct export # extract structured data → data/taxes.parquet
python -m jc_taxes.payments # → data/payments.parquet
python -m jc_taxes.geojson_yearly # → www/public/taxes-{year}-{agg}.geojson
See DATA-SOURCES.md for details on each data source.
# Python (data pipeline)
uv sync
# Web app
cd www && pnpm install- ROADMAP.md — shipped features and future plans
- DATA-SOURCES.md — data sources and pipeline details
- www/README.md — web app docs




