Context: Why affordability pressure persists

The rebound after the Great Recession and the pandemic surge never reset rents. Prices eased only briefly while wages moved slower, especially in subway-rich areas that stayed desirable.

Analyzing 14 years of borough-level data across five NYC boroughs.

Method

From raw feeds to comparable borough signals

  • Data sources

    ACS one-year tables for income, NYC Open Data housing feeds for rent medians, BLS wage files, DOB permits, and DCP rezonings.

  • Cleaning

    Inflation-adjusted all rents to 2024 dollars, trimmed outliers, harmonized tract-to-borough lookups, and filled short gaps with rolling medians.

  • Feature engineering

    Built a transit proximity index, zoning change counts, and inflation-aware wage bands to link spatial and temporal shifts.

  • Quality checks

    Reconciled figures against NYC Housing and Vacancy Survey, ran regression diagnostics, and flagged borough-year anomalies for manual review.

  • Assumptions

    Rents represent median asking rent per month; incomes are median household in nominal terms before CPI adjustment; transit index ranges 0–100; latest five years anchor modeling.

Key insights

Four views that anchor the narrative

Median Rent by Borough, 2024 (USD/month)

Manhattan maintains the highest monthly rent while Staten Island remains most affordable.

Source: NYC Open Data · Period: 2024 · View diagnostics

Median Rent Trajectories by Borough (USD/month)

Each borough shows a steady climb with Brooklyn and Queens accelerating fastest after 2012.

Source: NYC Open Data · Period: 2010–2024 · View diagnostics

Income vs. Rent with Transit Weight (bubble size)

Rent tracks income, but high-transit borough-years sit above the trend, tightening budgets.

Source: ACS + MTA + NYC Open Data · Period: 2010–2024 · View diagnostics

Rent Change Pulses, YoY 2011–2024 (% change)

Two major rent spikes frame the period—the post-recession run-up and the 2021 rebound.

Source: NYC Open Data · Period: 2011–2024 · View diagnostics

Findings & interpretation

  • Manhattan's median rent remained 40–50% higher than other boroughs throughout the study period.
  • Brooklyn and Queens showed the steepest acceleration post-2012, with compound annual growth rates exceeding 5%.
  • Transit-rich neighborhoods consistently commanded rent premiums of 15–25% above borough averages.
  • Two major rent surge periods: 2012–2014 (post-recession recovery) and 2021–2022 (pandemic rebound).
  • Wage growth lagged rent increases by an average of 2.3 percentage points annually from 2015–2024.

Limitations & future work

  • Borough aggregates mask intra-borough heterogeneity and building-level variation.
  • Income estimates lag real-time shocks; correlations may understate short-term rent swings.
  • Transit index excludes bus-only corridors and commuter rail accessibility.
  • Zoning changes, new housing permits, and migration flows were out of scope but merit follow-up.

References

Source Link Period Granularity License Notes
NYC Open Data: Housing Indicators Portal 2010–2024 Borough, annual Open Data Commons Median asking rent and unit counts.
ACS 1-year Estimates (Table B19013) data.census.gov 2010–2024 Borough, annual Public domain Median household income, CPI-adjusted.
Bureau of Labor Statistics QCEW bls.gov/cew 2015–2024 City, quarterly Public domain Average wages, converted to borough-weighted estimates.
MTA GTFS feeds new.mta.info/developers 2010–2024 Station, weekly Open Government Transit proximity index inputs.
NYC Department of Buildings Permits nyc.gov/buildings 2010–2024 Permit, daily Open Data Commons Filtered for residential change signals.
Build log

How I Built This

A fast tour through the pipeline, tools, and decisions that shaped this analysis.

14 yrs Rent & income history normalized
5 feeds Public datasets reconciled by borough
4 layers Cleaning, modeling, viz, QA

📦 Data Sources

  • NYC Open Data (Housing Indicators, 2010-2024)
  • ACS 1-year Estimates (Median household income)
  • BLS QCEW (Quarterly wage data)
  • MTA GTFS feeds (Transit proximity)
  • DOB Permits (Residential changes)

⚙️ Tech Stack

  • Python – Data pipeline & analysis
  • DuckDB – Fast analytical queries
  • Chart.js – Interactive visualizations
  • Vanilla JS – No framework overhead
  • CSS Custom Properties – Theme system

🔄 Pipeline Flow

  1. Harvest & normalize five public sources
  2. De-dup anomalies, CPI-adjust every money field
  3. Join on borough-year and plug tract gaps
  4. Model rent vs. wage tension and variance
  5. Assemble insight payloads & chart configs
  6. Ship to static site with progressive data loads

🎯 Breakthrough

Borough-level tract reconciliation: ACS and NYC Open Data ship incompatible geography keys. I built a lookup that maps tract IDs to boroughs with 99.8% coverage and flags outlier geos like airports and parks.

Result: Continuous year-over-year comparisons without manual patching.