One city, more than 8.4 million people — and as many ways to divide them as the U.S. Census can measure. What follows is the same population run through 24 tabulations: by age and borough, birthplace and language, work, income, housing and more. Each figure is sourced.
Except for the timeline, every figure is a U.S. Census Bureau American Community Survey 2020–2024 five-year estimate, pulled directly from the Census API. Five-year estimates are the most reliable for small subgroups — specific countries of birth, languages and the like.
Citywide totals use the Census "place" geography (New York city, place 51000); boroughs use the five county equivalents. Medians come from the citywide place — medians can't be summed across boroughs.
Fig. 01 uses decennial census counts, 1790–2020, for the modern five-borough area (U.S. Census Bureau; NYC Dept. of City Planning). The 1890→1900 jump is the 1898 consolidation of Greater New York, not real growth.
Denominators vary by table and are stated on each figure: total population, population 25+ (education), 16+ (work), 15+ (marital status), households or housing units.
ACS figures are survey estimates with margins of error, not exact counts; small gaps are noise. Race and Hispanic origin are asked separately and overlap by design. Country-of-birth and ancestry show the top 20.
Build scripts (fetch_acs.py, build_data.py) and raw data are in the repository.