If you need a building-age map or a land-use map of a New York block, the data already exists and it is free. MapPLUTO — the Department of City Planning's tax-lot database — carries the year built and the land use of every lot in the five boroughs. As of this writing it holds 856,687 lots, of which 817,713 have a year built.
Most guides to PLUTO assume you will download a 2 GB shapefile and open it in ArcGIS or QGIS. You do not have to. The city publishes the same data as a query API, and you can get exactly the block you need from a browser address bar, a spreadsheet, or ten lines of Python.
This page is written from the inside: we use MapPLUTO in production to draw the Building age and Building use panels on sitedia, and the traps below are ones we actually hit — each cost us real coverage before we found it.
PLUTO has more than eighty columns. For site analysis you almost always want just two.
| Field | What it is |
|---|---|
YearBuilt |
Year the original structure was completed. 0 means unknown —
38,512 lots are like this, mostly vacant land and unimproved parcels.
There is also YearAlter1 / YearAlter2 for major
alterations, which is what you want if you are mapping renovation rather
than construction. |
LandUse |
A two-character code, 01–11. This is the field
behind every land-use map of New York you have ever seen. |
The land-use codes, with how many lots carry each one citywide:
| Code | Meaning | Lots |
|---|---|---|
| 01 | One & Two Family Buildings | 566,772 |
| 02 | Multi-Family Walk-Up | 131,261 |
| 03 | Multi-Family Elevator | 13,105 |
| 04 | Mixed Residential & Commercial | 56,193 |
| 05 | Commercial & Office | 21,104 |
| 06 | Industrial & Manufacturing | 9,293 |
| 07 | Transportation & Utility | 6,042 |
| 08 | Public Facilities & Institutions | 12,023 |
| 09 | Open Space & Outdoor Recreation | 4,730 |
| 10 | Parking Facilities | 9,112 |
| 11 | Vacant Land | 24,240 |
Notice how lopsided that is. Two codes cover 81% of the city's lots. If you colour a map by all eleven categories you will get a drawing that is 80% one hue — which is why most readable New York land-use maps group them into four or five buckets first.
MapPLUTO is published as an ArcGIS feature service. A feature service answers plain HTTP requests, so the address bar is a perfectly good client.
The endpoint is:
https://services5.arcgis.com/GfwWNkhOj9bNBqoJ/arcgis/rest/services/MAPPLUTO/FeatureServer/0/query
Ask it for the lots inside a bounding box, and only for the two fields you care about:
?where=1=1
&geometry=-73.99,40.750,-73.975,40.760
&geometryType=esriGeometryEnvelope
&inSR=4326
&spatialRel=esriSpatialRelIntersects
&outFields=YearBuilt,LandUse
&returnGeometry=true
&outSR=4326
&f=geojson
That returns GeoJSON — lot polygons with a year and a use code attached, in plain latitude/longitude. Every drawing tool that reads GeoJSON will take it directly, and so will Python, R or a spreadsheet with a JSON importer.
Two immediately useful variants:
f=geojson for f=html to browse the result as a
table before you commit to a query.returnCountOnly=true to ask "how many lots are in here?"
without downloading any of them. This is the cheapest way to sanity-check a
bounding box.where for attribute filters — YearBuilt > 0 AND
YearBuilt < 1900 gives you the pre-1900 fabric of a
neighbourhood in one request.None of these throw an error. They just quietly give you less than you asked for, which is worse.
The service caps a response at 2,000 records. It tells you when it has more — but for this service the flag is not at the top level of the response. It is nested:
{ "type": "FeatureCollection",
"properties": { "exceededTransferLimit": true },
"features": [ … 2000 items … ] }
Code that checks response.exceededTransferLimit sees
undefined, concludes there is nothing more, and stops. We lost whole
neighbourhoods this way before noticing — dense areas in the Bronx and Staten
Island were being truncated at exactly 2,000 lots. Page with
resultOffset until the nested flag goes away, and add
orderByFields=OBJECTID so the pages are stable.
maxAllowableOffset shrinks the response by generalising polygon
outlines, and it is tempting because parcel geometry is heavy. But New York row
lots are about 6 m wide. Generalise at 9 m and the outline distorts enough that
points which should sit inside the lot fall outside it.
We measured this on a comparable downtown grid: matching went from 61% to 77%, and "not inside any lot" fell from 23% to 4%, purely by tightening the tolerance from about 9 m to about 2 m. At 2 m the result was identical to the unsimplified geometry while carrying roughly half the vertices. If you simplify at all, stay well under the width of the narrowest lot you care about.
PLUTO is a record of tax lots, not buildings. 219,458 lots carry more
than one building (NumBldgs > 1) — a house plus a garage, a
campus, a housing development. If you attach the lot's year to one building and
stop, everything else on that lot stays blank. Attach it to every building whose
footprint centre falls inside the lot polygon instead.
The reverse also bites: a single building can straddle several lots, and condominium buildings often carry one lot per unit.
It covers the five boroughs and nothing else. Draw a bounding box around Lower Manhattan and you will pull in Jersey City and Hoboken footprints with no PLUTO record at all — they are not missing data, they are a different jurisdiction. New Jersey and Nassau County publish their own parcel data, in their own schemas. Label those buildings "unknown" rather than letting them read as a gap in New York's records.
Once the four traps are handled, PLUTO is one of the best parcel datasets in the United States. Measured on our own database inside a half-mile circle on Midtown Manhattan, 98.3% of buildings carry a year built and 99.1% carry a land use. Across the five boroughs the figure stays high — DUMBO 93.6%, Long Island City 96.8%, the Bronx 95.8%, Staten Island 96.4%.
For comparison, the same pipeline against other cities' assessor data lands at 89% in Boston, 88% in Philadelphia, 77% in Washington DC and 33% in Chicago — the last because Cook County publishes parcels as points rather than polygons. New York is unusually generous with this data. Use it.
If what you want is the drawing rather than the dataset, sitedia does exactly this pipeline for you: pick a New York address, and it returns building age and land-use diagrams — plus footprints, heights, green space, transit, terrain and an aerial — as SVG, PNG, DXF or 3D. The PLUTO join described above is what runs underneath, traps and all.
The full list of datasets and their measured coverage is on the data sources page.