← Back to the map
How this map was made
What it shows
Population density — people per square mile of land — for each of New York City's 59 community districts, at each decennial census from 1970 through 2020. A second view shows each district's density in a given year as a percentage change from its own 1970 level.
Why the series starts in 1970
1970 is as far back as the city's own neighborhood-level census tabulations go. Community districts in their current form date to the city's 1975 charter revision; the Department of City Planning tabulated the 1970 census (and every one since) to those district boundaries. Earlier censuses exist at the census-tract level back to 1910, but there is no official machine-readable tabulation of them to consistent neighborhood geographies, so this project does not use them. Nothing on the map is estimated, interpolated or modeled — every number is a census count as tabulated by the Department of City Planning.
Sources
- New York City Population By Community Districts, Department of City Planning via NYC Open Data (dataset
xi7c-iiu2). Populations for 1970, 1980, 1990, 2000 and 2010 for all 59 districts. The dataset's own description:
"The data was collected from Census Bureaus' Decennial data dissemination (SF1) for the years 1970, 1980, 1990, 2000 and 2010. Compiled by the Population Division – New York City Department of City Planning"
- Department of City Planning 2020 census data package (the "2020 Census Data" zip, workbook
nyc_decennialcensusdata_2010_2020_change-core-geographies_v2.xlsx). The rows with geography type "CD" are the department's tabulation of the 2020 census (and a re-statement of 2010) to actual community district boundaries — not the approximated community district tabulation areas. 2020 populations come from here.
- Community Districts boundaries, NYC Open Data (dataset
5crt-au7u), the shoreline-clipped version (water areas excluded). Supplies both the map shapes and each district's land area, taken from the file's shape_area field (square feet, New York State Plane) and converted to square miles.
- New York City Population by Borough, 1950 - 2040, NYC Open Data (dataset
xywu-7bv9). Supplies only the citywide totals shown next to the year (1970: 7,894,862; 1980: 7,071,639; 1990: 7,322,564; 2000: 8,008,278). That dataset's 2010-2040 columns are projections, so the 2010 (8,175,133) and 2020 (8,804,190) citywide totals come from the actual-count workbook in source 2 instead. The citywide totals run slightly above the sum of the 59 districts in every year — the small remainder described under consistency checks below.
All three were downloaded Aug. 28, 2026. Raw copies sit in this repository's data/ folder; bake.py turns them into the two files the page loads.
Calculations
- Density = census population ÷ land area in square miles, rounded to the nearest whole person. Land area is the district's present-day shoreline-clipped area, held constant across all six censuses.
- Change since 1970 = (density in year Y ÷ density in 1970) − 1. Because area is held constant, this equals the population change.
- The headline figure: 15 of 59 districts (25%) had a lower population in 2020 than in 1970. The citywide gain of "about 910,000" is the difference between the district sums (7,893,261 in 1970; 8,803,220 in 2020), which is 909,959.
Are the district lines the same across decades?
Yes, to the limit of what the Department of City Planning publishes. Three pieces of evidence:
- The department maintains the series on one set of boundaries and restates history when the lines change. Its 2000 community district geography notes (Table G-3) say so directly:
"Due to official changes to boundaries of selected Community Districts and geographic corrections between 1990 and 2000, the following Community Districts have revised population and housing unit counts for 1990 that differ from previous publications."
Eleven districts got revised 1990 counts in that pass (Bronx 3, 4, 9, 10 and 11; Brooklyn 6 and 8; Queens 7, 8, 9 and 12). The series used here postdates those revisions.
- The two sources agree exactly where they overlap. The 1970-2010 table's 2010 column matches, district for district, the department's 2020-era workbook — which tabulates 2010 and 2020 census blocks to today's district boundaries. All 59 match to the person. If the older table sat on different lines, they would not.
- The allocation itself is published. Table G-4 lists every census tract assigned to every district, split tracts flagged, so the tract-to-district crosswalk behind the counts can be inspected.
Two residual limits remain. Where a census tract straddles a district line, the split is the department's allocation, and the census did not draw its small-area geography with 1975 district lines in mind — so the earliest decades rest on more such judgment calls than the block-built recent ones. And the 1970-2000 columns reflect boundaries as of the table's 2011 publication; the exact 2010 match against the current tabulation is the evidence that the lines have not materially moved since.
Consistency checks run before publishing
- The two population sources overlap in 2010. All 59 district values match exactly between them.
- District sums were checked against published citywide totals. The 2020 district sum (8,803,220) plus the 970 people the census counted in parks and airports outside any district equals the official citywide count of 8,804,190 exactly. Earlier years' district sums fall short of the citywide count by between 473 people (1990) and 3,453 (2010). For 2000 that shortfall is fully accounted for: the joint interest area populations in the department's Table G-3 sum to 3,070, exactly the gap that year. Those people appear in no district on this map.
- The boundary file matches the tabulation on the two cross-borough quirks. From Table G-3:
"Manhattan's northernmost census tract 309 is physically on the Bronx mainland and is part of Bronx Community District 8. Riker's Island, Bronx census tract 1, is linked to Queens via a bridge and is tabulated as part of Queens Community District 1."
A point-in-polygon test confirms the map draws Marble Hill inside Bronx Community District 8 and Rikers Island inside Queens Community District 1 — the same places their people are counted.
- An independent rebuild of 2020 district populations from census-tract counts (Census Bureau API, table P1) aggregated through the city's tract-to-district equivalency file matched the published district figures with a median difference of 0.6% across the 59 districts. The worst case was Midtown, at 7.6% — the known gap between tract-built tabulation areas and true district boundaries, and the reason the department's own district tabulation is used instead.
The experienced-density view
The third map view applies a measure defined by the NYU Furman Center in "Focus on Density in New York City," part of its State of New York City's Housing and Neighborhoods in 2014 report (published May 2015). Their definition, verbatim:
"we present the median tract density experienced by city residents, or 'experienced density.' Specifically, for every person in the city, we find the population density of her Census tract. The median represents the population density in the middle, which the 'typical' resident experiences."
And more formally, from the report's footnote 2:
"to find the median neighborhood density experienced by city residents, we compute the raw population density, population per square mile of land for each Census tract, and then find the median tract density, weighting each tract by its population."
How this map computes it (experienced.py in the repository):
- Tract populations. 2000 from the Census Bureau API (SF1 table P001001; the 2,217 tracts sum to the official 8,008,278). 2010 and 2020 from the Department of City Planning (DCP) core-geographies workbook's tract rows — both decades on 2020 tract boundaries, summing to 8,175,133 and 8,804,190.
- Tract land areas. Census Bureau gazetteer files (2000 and 2020 vintages), land area only, water excluded. The 2000 gazetteer's own tract populations match the API values on all 2,217 tracts.
- The statistic. Density = tract population ÷ tract land area; the citywide figure is the population-weighted median across all tracts, per the definition above.
- District values. Each tract is assigned to the community district containing its gazetteer internal point, then the same population-weighted median is taken among each district's tracts. Tracts whose internal point falls in a park or airport joint interest area (5,150 people in 2000, 9,800 in 2010, 8,286 in 2020 — at most 0.12% of the city) count toward the citywide figure but no district.
Validation against the Furman Center's published figures
| 2000 | 2010 | 2020 |
| Furman Center (Figure 1.2) | 53,000 | 53,400 | — |
| This map | 53,856 | 53,731 | 58,506 |
The overlap years agree within 1.6% and 0.6%. The residual difference has a known source: the Furman Center computed from the Neighborhood Change Database, a licensed dataset that normalizes every decade onto 2010 tract boundaries with its own land areas; this map uses each census's own tract boundaries and Census gazetteer land areas. Their 1970 figure was 57,900 — so this map's 2020 value of 58,506 suggests the typical New Yorker's tract density has climbed back to roughly the 1970 level, though the two methods differ by about the same margin as that comparison, which is why the page says "roughly."
Where this goes beyond the Furman report, and why it stops at 2000
- The district-level coloring is an extension. The Furman Center applies experienced density only citywide (and to other cities). For neighborhoods, its footnote is explicit: "When presenting neighborhood-level population densities, we always use the standard population density measure, persons per square mile of land, not the median density experienced by city residents." The map's district values apply their exact formula, restricted to each district's residents — a scope the report itself does not use.
- No 1970-1990 experienced density here. Tract-level populations for 1970 and 1980 exist only in gated databases (the licensed Neighborhood Change Database the Furman Center used, registration-required archives like the Longitudinal Tract Database and the National Historical Geographic Information System, or NHGIS). The 1990 census is not on the Census Bureau API and the city publishes no 1990 tract boundary file. The view covers only the three censuses that can be computed from open sources end to end.
The search box
- Neighborhood names are matched locally against 266 entries built by
build_search.py from two official lists: the residential 2020 Neighborhood Tabulation Area names in the DCP equivalency file, each mapped to its district through its Community District Tabulation Area, plus the neighborhood names inside the Department of City Planning's own district labels. A name that belongs to more than one district (Fordham appears in two) shows once per district so the reader picks.
- Addresses are geocoded as you type by GeoSearch, the Department of City Planning's free geocoder — the only outside service this page ever calls, and only when the search box is used. The returned point is then located client-side in the same shoreline-clipped district polygons the map draws, so an address and its map outline can never disagree.
- A point that lands in a park, airport or open water says so rather than being forced into the nearest district.
What this series cannot say
- Land areas are today's. The city's shoreline has changed since 1970 — Battery Park City alone added about 92 acres of landfill to Manhattan Community District 1. Using present-day area slightly understates 1970 density anywhere land was added. It changes no district's direction of change.
- District boundaries did not exist in 1970. The Department of City Planning tabulated the 1970 census onto boundaries drawn under the 1975 charter revision. This is the department's own retro-tabulation, used as published.
- Census counts are imperfect. Every decennial census undercounts some populations, and the degree varies by decade and by neighborhood. The 1990 census in particular is widely held to have undercounted New York City — the city sued over it, in the case decided as Wisconsin v. City of New York (1996). No adjustment is applied here.
- Density is people per square mile of all land in the district, parks included. A district with a big park inside its lines reads as less dense than its residential blocks feel. Parks and airports that belong to no community district — Central Park, Van Cortlandt Park, the two airports and nine others — are drawn in gray and carry no data.
- Two districts cross borough lines. From the department's 2020 workbook:
"Note that two Community Districts (CDs) (Queens CD 1 and Bronx CD 8) cross borough boundaries, and therefore CD counts will not add up to borough totals for the Bronx, Queens, and Manhattan."
- Falling density is not the same as decline. Park Slope's density fell 18% from 1970 to 2020 because households got smaller, not because homes emptied. The map does not show why density changed.
A note on how this was built. This page, the analysis behind it and this methodology document were produced with the help of an AI assistant (Claude), directed and reviewed by a person. The population and boundary data are official published sources linked above, and the pipeline that transforms them (bake.py) is in the repository for anyone to re-run. AI assistance is a reason to check the work, and the checks above are designed so that anyone can.