Back to Who builds New YorkWritten Oct. 22, 2026; revised Nov. 6, 2026

How I built this

Every number on the page comes from five public sources, combined by two scripts that stop if their checks fail.

The sources

The build, step by step

  1. scripts/fetch.py downloads everything. It refuses to save a file that comes back short: fewer than 100,000 Housing Database jobs, 9,000 HPD buildings, 51 or 59 districts, or a block population under 8 million.
  2. scripts/build.py places each 2020 census block in a Council district and a community district by the block’s internal point. Block populations add up to 8,804,190, the 2020 census count for the city, exactly; the build stops otherwise.
  3. It sums the Housing Database jobs into districts by year, using the district each job already carries in City Planning’s file.
  4. It sums HPD buildings into districts using the district HPD assigns each building.
  5. It splits each census tract’s survey numbers among districts in proportion to where the tract’s 2020 residents live, then estimates district medians from the summed brackets.
  6. The page does the rest in the browser: year ranges, per-person rates, rankings and the counts written into sentences change with the controls.

Net homes and districts

A “net home” is the change in permanent homes from one Buildings Department job: a new 100-unit building on an empty lot adds 100; a demolished two-family house subtracts two; turning an office into 40 apartments adds 40. Completed homes are jobs City Planning classifies as complete (status 5), counted in the year of the job’s first certificate of occupancy, temporary or final. That is City Planning’s completion date. It does not mean every home in the building was ready that year; in large buildings, homes can receive certificates over a longer stretch. Demolitions are dated by their permit, City Planning’s convention. Permitted homes are counted in the year the job got its construction permit, for jobs that are permitted, partly finished or finished; jobs withdrawn after a permit are left out, so a permitted year can shrink a little as the file is updated.

Seven jobs have no Council district and 43 have no community district (36 of those sit in parks or airports, which are not community districts). They count toward citywide totals but no district.

Calculated figures

Partly complete jobs

City Planning marks a job partly complete (status 4) when a building of 20 or more homes has a temporary certificate of occupancy covering less than 80 percent of its homes. Version 26Q2.1 has three, with 824 net homes proposed. This page keeps them out of the completed count, since most of their homes are not certified, and out of the pipeline, since they have a certificate. The district panels list them.

I did not add the 824 homes to the pipeline or estimate how many are still unfinished. The certificate counts can include homes that are not permanent homes, and the two conversions list none despite their partial status, so the file does not say how many remain.

The targets chart

Target pace is the district’s five-year goal divided by five. Past pace is net homes completed from 2016 through 2025, divided by 10. I picked 2016 to 2025 because that is the window the city used to sort districts into growth cohorts (page 29 of the draft). For the income-restricted view, past pace is HPD’s new construction in projects started 2016 to 2025, divided by 10; HPD counts a project when financing closes, so these homes are counted earlier than the completions in the all-homes view.

Share of homes in new buildings that were income-restricted

The Housing Database lists, for each job, the affordable homes HPD associates with the project. That count is not limited to new permanent homes. The first version of this page divided it by all homes added in completed jobs, which let the share pass 100 percent: 556 percent in Manhattan Community District 11 in the first half of 2026. I replaced it on Nov. 6, 2026 with a measure where the income-restricted homes are always part of the homes counted.

The build checks every job and every district for each of the year ranges a reader can pick, 16,983 combinations, and stops if the affordable count ever exceeds the homes counted. The district panels show HPD’s affordable count next to a large job only when the job is in this measure.

The pipeline view in the first section counts homes in every job City Planning lists as permitted (status 3), with no certificate of occupancy yet; it is not tied to a year, and some of those jobs have stalled. Partly complete jobs are in neither count. The growth view divides net homes by the 2020 census count of housing units in the district, which matches how the city measured past growth when it set the targets.

Median income

The Census Bureau does not publish survey figures for Council districts, or for community districts as drawn. It does publish them for Public Use Microdata Areas, which City Planning uses to approximate community districts, but those follow different lines in places and combine some districts. I added up each tract’s household counts in 16 income brackets, split by where the tract’s residents live, and found the median by straight-line interpolation inside the bracket where the middle household falls. When the middle household falls in the top bracket, which has no upper edge ($200,000 and up for income, $3,500 and up for rent), the page reports that floor with “or more”; this happens for income in Manhattan Community District 1 and for rent in Manhattan Districts 1 and 5. Run on the whole city, this gives $80,890; the bureau’s published 2020-2024 median for New York City is $80,483, half a percent lower. The target pace line in the scatter chart is 70,000 homes a year divided by the 2020 population: 8.0 per 1,000 residents.

Rents

Affordable means a rent of 30 percent of income or less. I used a two-person household: 60 percent of HPD’s 2026 median income for two people is $81,420 a year, or $2,036 a month; 100 percent is $135,700, or $3,393 a month. Shares are interpolated inside the census rent brackets. Gross rent includes utilities; the asking rent for vacant units is contract rent, without them, so the vacant view is a slightly easier test.

The maps compare two periods. The rents are five-year survey estimates for 2020 to 2024, in 2024 dollars; the thresholds are HPD’s 2026 figures, in 2026 dollars. I did not adjust either to match the other. The vacant view describes apartments that were on the market when the survey reached them, at some point in those five years, not apartments available now.

A district would be left blank in the vacant view if its estimated vacant units for rent, summed from tracts, came to fewer than 150. That is a cutoff on the weighted estimate, not on the number of homes the survey sampled, and it is not a test of reliability: a district can clear it on few survey responses. None fell under it in this release; the lowest were 515 in Council District 21 and 509 in Bronx Community District 5. The survey publishes a margin of error for each tract figure, and this page does not carry those through the split into districts or the interpolation inside rent and income brackets, so district figures are less certain than they look. That the method lands near the published citywide median income does not show the district figures are precise.

Judgment calls

Each is marked with who made it. Josh has not yet reviewed the ones marked Claude.

Use net homes, with demolitions subtracted

Decision
Every count is net of homes lost.
Why
The Chicago dashboard this follows could not subtract demolitions; New York’s Housing Database can. A district that tears down two-family houses for a slightly larger building should not get credit for the gross count.
Effect
Jobs completed 2016 to 2025 added 315,320 homes and removed 21,586; the page shows the difference, 293,734.
Who
Claude.

Show both Council districts and community districts

Decision
A switch at the top changes every chart except the targets, which exist only for community districts.
Why
The Council votes on rezonings, and by custom it follows the local member on projects in that member’s district; the city’s targets are set for community districts.
Who
Claude.

Name the current Council member

Decision
Each Council district shows who represents it now, with a note in the district panel that most homes finished in a given year were approved years earlier, often under someone else.
Alternative
Leave names off, or match each year to the member then serving. Matching by year would still misassign credit, since approvals happen years before completion.
Who
Claude.

Replace hand-collected listings with census rents

Decision
The Chicago dashboard checked two snapshots of listings, taken in late July. I used the census survey: rents tenants pay, and asking rents for vacant units, for 2020 to 2024.
Why
It covers every district with a published method.
Cost
Five-year survey numbers trail the market and understate current rents, and the vacant-unit sample is small.
Who
Claude.

Limit the income-restricted share to new buildings

Decision
The share counts only completed new buildings whose affordable and certificate counts fit within their permanent homes, and lists what it leaves out.
Alternative
Remove the share. Clipping it at 100 percent, or dividing by all proposed homes, would hide the mismatch rather than fix it.
Who
Claude, after an outside review on Nov. 6, 2026. Josh has not yet reviewed it.

Keep partly complete jobs out of both counts

Decision
The three partly complete jobs are listed on their own, outside the completed count and the pipeline.
Alternative
Follow City Planning’s summary tables, which count them as completions in the year of their first certificate. That would add 580 homes to 2017 and 36 to 2025, though most of those homes had no certificate.
Who
Claude, after an outside review on Nov. 6, 2026. Josh has not yet reviewed it.

Count HPD homes by project start

Decision
Income-restricted homes are dated by when the project started, the date HPD reports against its own goals.
Effect
These are homes financed, not finished. Many started since 2023 are still under construction.
Who
Claude, following HPD’s convention.

Split census tracts by where people live

Decision
A tract that straddles a district line is split by its 2020 block populations.
Alternative
Assign each tract wholly to one district, or split by land area. Both move more people into the wrong district.
Who
Claude.

What this does not do

Checks run

Change log