Ten collections describing property, zoning, vacancy, and affordable housing in Philadelphia, mirrored from the City of Philadelphia's ArcGIS services via OpenDataPhilly.
# Philadelphia Housing and Land Use
> Ten collections describing property, zoning, vacancy, and affordable housing
> in Philadelphia, mirrored from the City of Philadelphia's ArcGIS services.
> 1,780,845 features as GeoParquet and PMTiles, in EPSG:3857.
Together these collections answer what exists on a parcel, what the zoning code
permits there, whether the city believes it is empty, and what publicly funded
housing has been built. Extracted 2026-08-26 from OpenDataPhilly.
Data is published by the City of Philadelphia under the City of Philadelphia
License, which reserves rights rather than granting them, and offers the data
"as is" without warranty. No SPDX identifier applies and no explicit
redistribution grant accompanies the datasets. Read the city's terms before
redistributing or using this data commercially.
## Start here
- [Catalog agent guide](https://source.coop/nlebovits/phl-housing-demo/AGENTS.md): join keys, access patterns, and the four quirks that cause most wrong answers
- [Catalog README](https://source.coop/nlebovits/phl-housing-demo/README.md): human-readable overview
- [STAC catalog](https://data.source.coop/nlebovits/phl-housing-demo/catalog.json): machine-readable entry point
- [City of Philadelphia terms of use](https://metadata.phila.gov/#help/help-faqs/what-are-the-terms-of-use/): the license text
## Collections
- [Property Parcels](https://source.coop/nlebovits/phl-housing-demo/dor_parcel): 607,957 polygons of legal property boundaries from recorded deeds
- [Land Use](https://source.coop/nlebovits/phl-housing-demo/land_use): 559,077 polygons recording actual activity on the ground, in nine major classes
- [Building Footprints](https://source.coop/nlebovits/phl-housing-demo/li_building_footprints): 546,083 structure outlines with approximate heights
- [Zoning Base Districts](https://source.coop/nlebovits/phl-housing-demo/zoning_basedistricts): 29,205 polygons of what the zoning code permits
- [Vacant Property Indicators — Land](https://source.coop/nlebovits/phl-housing-demo/vacant_indicators_land): 28,737 parcels the city models as likely vacant lots
- [Vacant Property Indicators — Buildings](https://source.coop/nlebovits/phl-housing-demo/vacant_indicators_bldg): 9,041 parcels modelled as holding a vacant building
- [Affordable Housing Production](https://source.coop/nlebovits/phl-housing-demo/affordable_housing): 501 DHCD-funded projects, 19,249 units, FY1995 to FY2026
- [Zoning Overlays](https://source.coop/nlebovits/phl-housing-demo/zoning_overlays): 195 polygons of rules layered on top of base districts
- [Zoning Code Descriptions](https://source.coop/nlebovits/phl-housing-demo/zoning_descriptions): 39-row lookup decoding every zoning code; no geometry
- [City Council Districts (2024)](https://source.coop/nlebovits/phl-housing-demo/council_districts_2024): 10 districts as redrawn after the 2020 census
## Querying
Read any collection over HTTP with DuckDB. The `geometry` column is native, so
do not wrap it in `ST_GeomFromWKB`.
```sql
INSTALL spatial; LOAD spatial;
INSTALL httpfs; LOAD httpfs;
SELECT z.long_code, d.code_description, count(*) AS polygons
FROM read_parquet('https://data.source.coop/nlebovits/phl-housing-demo/zoning_basedistricts/zoning_basedistricts.parquet') z
JOIN read_parquet('https://data.source.coop/nlebovits/phl-housing-demo/zoning_descriptions/zoning_descriptions.parquet') d
ON z.long_code = d.new_code
GROUP BY 1, 2 ORDER BY 3 DESC;
```
Use `data.source.coop` for byte fetches and `source.coop` for pages a person
reads.
## Optional
- [Joining collections](https://source.coop/nlebovits/phl-housing-demo/AGENTS.md): `opa_id` and `parcel_id_num` come from different city departments and do not join to parcels; use normalized address or a spatial join
- [Known data quirks](https://source.coop/nlebovits/phl-housing-demo/AGENTS.md): 92% of land use description columns hold a bare digit, vacancy ranks are repeating decimals, and affordable housing types are semicolon-joined
- [OpenDataPhilly](https://opendataphilly.org/): the upstream portal, where each dataset has its own page