# Duplex, triplex and fourplex housing stock by metro (83 Foothold metros) **File:** `duplex-stock-by-metro-2026-09-25.csv` (83 rows, one per Foothold metro, sorted by share rank) **Built:** 2026-09-25 by Van to Vault (https://vantovault.com). License: CC BY 4.0. **Revised:** 2026-09-27. Every percentage column is now computed from the raw counts and rounded once to one decimal (the "raw ratio" rule); before, the CSV carried two decimals and the tables below were rounded again from them, which moved some values by 0.1. Counts are unchanged. `rank_by_share` now orders metros by the unrounded ratio, which swaps San Antonio (now 59) and Greensboro (now 60), tied at 5.33 under the old two-decimal column. **Source:** U.S. Census Bureau, American Community Survey 5-year estimates, 2020-2024 (dataset id `ACSDT5Y2024`), tables **B25024** (Units in Structure) and **B25032** (Tenure by Units in Structure). Geography: each metro's CBSA (metropolitan statistical area, summary level 310) plus, as a bonus, the principal city (place, summary level 160). ## What was pulled | Item | Value | |---|---| | Vintage | ACS 5-year 2020-2024, the latest 5-year vintage available from data.census.gov as of 2026-09-25 (the 2019-2023 5-year was also queried for one metro as a fallback check; not used). | | Tables | B25024 (all housing units by units in structure, 11 cells) and B25032 (occupied housing units by tenure by units in structure, 23 cells) | | Geography | 83 CBSAs (the CBSA code of each Foothold metro; the open CSV `vantovault-foothold-metros.csv` has no CBSA column) and 82 principal-city places | | Requests | 166 metro responses (83 x 2 tables) + 82 place responses, all verbatim JSON | | Coverage | 83/83 metros complete for both tables; 82/83 principal cities (Bridgeport city, CT missing, see caveats) | ### API URL pattern (works without a key as of 2026-09-25) ``` https://data.census.gov/api/access/data/table?id=ACSDT5Y2024.B25024&g=310XX00US{cbsa} https://data.census.gov/api/access/data/table?id=ACSDT5Y2024.B25032&g=310XX00US{cbsa} https://data.census.gov/api/access/data/table?id=ACSDT5Y2024.B25024&g=160XX00US{state_fips}{place_fips} ``` Each response was checked before use: header and value counts equal, GEO_ID equals the requested geography, NAME matches the expected metro or city, and the component cells sum exactly to the table total (B25024: cells 002-011 = 001; B25032: owner cells 003-012 = 002, renter cells 014-023 = 013, 002 + 013 = 001). The endpoint returns estimates, margins of error and annotations as JSON with a shuffled column order, so it is parsed by header name, never by position. Every row in the CSV comes from a response that passed all checks. ## Columns | Column | Meaning (all counts are housing units, not buildings) | |---|---| | metro, state, cbsa, cbsa_name | Foothold metro label, state, 5-digit CBSA code, and the CBSA name as returned by Census | | acs_vintage | `ACS 5-year 2020-2024 (ACSDT5Y2024)` for every row | | total_units | B25024_001: all housing units (occupied and vacant) | | units_2 | B25024_004: units in 2-unit structures (duplexes / two-families) | | units_3_4 | B25024_005: units in 3- or 4-unit structures (triplexes, fourplexes, triple-deckers) | | units_2_4 | units_2 + units_3_4 | | share_2_4_pct | units_2_4 / total_units x 100, from the raw counts, rounded once to one decimal | | owner_occ_total | B25032_002: owner-occupied housing units (all structure types) | | owner_occ_2, owner_occ_3_4, owner_occ_2_4 | B25032_005, B25032_006, and their sum: owner-occupied units in 2-unit and 3-4-unit structures | | owner_occ_share_pct | owner_occ_2_4 / owner_occ_total x 100, one decimal (share of all owner-occupied homes that sit in a 2-4 unit building) | | occupied_2_4 | owner_occ_2_4 + renter-occupied 2-4 (B25032_016 + B25032_017) | | owner_occupancy_rate_2_4_pct | owner_occ_2_4 / occupied_2_4 x 100, one decimal (what share of occupied 2-4 unit stock is owner-occupied, i.e. the house-hack ceiling already reached) | | rank_by_share | 1 = highest units_2_4 / total_units of the 83, ordered by the unrounded ratio (metros that print the same one-decimal share keep their raw order) | | rank_by_count | 1 = largest units_2_4 of the 83 | | source_url | the exact data.census.gov URL the B25024 row came from (swap B25024 for B25032 for the tenure cells) | | city_name, city_place_fips | principal city (Census place) and its 7-digit state+place FIPS; blank name = not pulled | | city_total_units, city_units_2, city_units_3_4, city_units_2_4, city_share_2_4_pct | B25024 for the principal city, same definitions as the metro columns (city_share_2_4_pct one decimal, raw ratio) | ## Caveats 1. **Units, not buildings.** A duplex counts as 2 units; a fourplex as 4. To talk about buildings, divide units_2 by 2 and units_3_4 by roughly 3.5. "115,532 units in 2-4 unit buildings" is not "115,532 duplexes". 2. **Margins of error are not carried.** The source JSON includes MOEs (`_M` cells); they were parsed and are in the raw files but not in the CSV. Metro-level totals have small relative MOEs (Buffalo units_2 MOE 1,894 on 83,879); the 3-4 unit cells for small metros and the city-level cells are noisier. Differences of a point or two of share between neighbouring metros should not be presented as meaningful. 3. **CBSA definitions vintage.** The names Census returned (for example "Houston-Pasadena-The Woodlands", "Cleveland, OH", "Indianapolis-Carmel-Greenwood", "Denver-Aurora-Centennial", "Grand Rapids-Wyoming-Kentwood", "Salt Lake City-Murray", "Virginia Beach-Chesapeake-Norfolk") are the July 2023 OMB delineations (OMB Bulletin 23-01) that the 2020-2024 ACS 5-year uses. Some metros therefore cover a different county set than the HUD FMR areas named in `metro-data-layer.json` (`hud_area`, e.g. HUD's "Boston-Cambridge-Quincy" vs CBSA "Boston-Cambridge-Newton"). The CBSA code was used throughout; the HUD name was not. 4. **B25024 includes vacant units; B25032 covers occupied units only.** That is why owner_occ_2_4 + renter 2-4 (`occupied_2_4`) is below units_2_4 everywhere. 5. **5-year estimates are a 2020-2024 average**, not a 2024 snapshot. Fast-growing Sun Belt metros will read slightly high on share (new large-multifamily and single-family supply is underweighted). 6. **Principal city = one Census place**, chosen as the first-named city of the CBSA. For consolidated cities Census reports the "balance" (Indianapolis city (balance); Louisville/Jefferson County metro government (balance); Nashville-Davidson metropolitan government (balance)). Kansas City is the Missouri city only. Bakersfield is Bakersfield city, not Delano. **Bridgeport city, CT (place 0908000) is blank**: the Census endpoint returned HTTP 429 (too many requests) for that URL during the pull. Everything else about Bridgeport (the metro row) is complete. 7. **Transcription route.** Numbers passed through a summarising fetch tool rather than a direct HTTP client; the checks in "What was pulled" are the guard. If a reader wants to re-verify a single figure, paste the row's `source_url` into a browser: the JSON shows the cell (`B25024_004E` = 2 units, `B25024_005E` = 3 or 4 units, `B25024_001E` = total). 8. Rounding: every percentage in the CSV, in this README and on the published page is the raw ratio of the two counts, rounded once to one decimal (half up; no value in the file sits exactly on a .x5 boundary). The same value prints in all three places. ## Top 15 metros by share of housing units in 2-4 unit buildings | Rank | Metro | Share 2-4 | Units 2-4 | All housing units | Owner-occupancy of 2-4 stock | |---|---|---|---|---|---| | 1 | Providence, RI | 23.1% | 169,001 | 730,957 | 28.7% | | 2 | Buffalo, NY | 21.3% | 115,532 | 541,660 | 26.9% | | 3 | Boston, MA | 20.1% | 413,851 | 2,059,059 | 34.0% | | 4 | Worcester, MA | 19.6% | 69,528 | 355,185 | 24.7% | | 5 | Albany, NY | 19.4% | 81,758 | 422,120 | 19.7% | | 6 | New York, NY | 17.4% | 1,400,004 | 8,038,666 | 32.8% | | 7 | Milwaukee, WI | 16.0% | 111,919 | 701,558 | 22.4% | | 8 | Bridgeport, CT | 14.9% | 56,431 | 377,569 | 27.7% | | 9 | New Orleans, LA | 14.7% | 68,295 | 465,148 | 16.9% | | 10 | Hartford, CT | 14.7% | 73,204 | 499,522 | 24.3% | | 11 | Scranton, PA | 13.6% | 35,856 | 264,360 | 15.2% | | 12 | Chicago, IL | 13.5% | 528,417 | 3,900,420 | 33.2% | | 13 | Rochester, NY | 12.0% | 57,956 | 481,033 | 13.5% | | 14 | Portland, ME | 11.9% | 34,253 | 287,616 | 25.2% | | 15 | Syracuse, NY | 11.7% | 34,839 | 297,576 | 17.8% | Median across the 83 metros: 6.7%. Bottom five: Omaha 3.2%, Charlotte 3.4%, Raleigh 3.4%, Washington DC 3.5%, Atlanta 3.9%. ## Top 15 metros by number of housing units in 2-4 unit buildings | Rank | Metro | Units 2-4 | Share 2-4 | Owner-occupied units in 2-4 | |---|---|---|---|---| | 1 | New York, NY | 1,400,004 | 17.4% | 416,835 | | 2 | Chicago, IL | 528,417 | 13.5% | 154,846 | | 3 | Boston, MA | 413,851 | 20.1% | 130,016 | | 4 | Los Angeles, CA | 410,630 | 8.6% | 47,721 | | 5 | Philadelphia, PA | 222,217 | 8.5% | 26,009 | | 6 | San Francisco, CA | 198,698 | 10.6% | 44,480 | | 7 | Miami, FL | 181,786 | 6.8% | 45,872 | | 8 | Providence, RI | 169,001 | 23.1% | 43,875 | | 9 | Dallas, TX | 146,257 | 4.7% | 10,763 | | 10 | Houston, TX | 121,236 | 4.2% | 7,872 | | 11 | Buffalo, NY | 115,532 | 21.3% | 26,660 | | 12 | Milwaukee, WI | 111,919 | 16.0% | 21,981 | | 13 | St. Louis, MO | 111,164 | 8.7% | 13,030 | | 14 | Detroit, MI | 99,732 | 5.2% | 18,385 | | 15 | Seattle, WA | 97,135 | 5.7% | 16,920 | ## Five findings a reporter could quote (all from the CSV, ACS 2020-2024 5-year) 1. **Providence has the highest concentration of small multifamily housing of the 83 metros:** 23.1% of all housing units in the Providence-Warwick, RI-MA metro (169,001 of 730,957) are in two-, three- or four-unit buildings. Buffalo is second at 21.3% (115,532 of 541,660), Boston third at 20.1%. 2. **Buffalo is the two-family capital:** 83,879 of its 541,660 housing units, 15.5%, are in two-unit buildings, the highest duplex share of any of the 83 metros (Albany 11.4%, Milwaukee 11.0%, Providence 10.2%, New York 10.1% follow). 3. **Inside the city limits the share roughly doubles:** 44.8% of housing units in Providence city (35,555 of 79,423), 43.3% in Buffalo city (59,277 of 136,850) and 40.1% in Albany city (20,237 of 50,408) are in 2-4 unit buildings, against 23.1%, 21.3% and 19.4% for their metros. 4. **The stock is concentrated in a handful of metros:** the New York metro alone holds 1.40 million units in 2-4 unit buildings, 19% of the 7.38 million such units across all 83 metros; New York, Chicago, Boston, Los Angeles and Philadelphia together hold 40%. 5. **Most of this stock is landlord-held, and the gap between metros is huge:** across the 83 metros only 21.5% of occupied units in 2-4 unit buildings are owner-occupied (1.41 million of 6.57 million). Cape Coral-Fort Myers (41.9%), North Port-Sarasota (36.0%) and Boston (34.0%) are the most owner-occupied; Oklahoma City (3.9%), McAllen (4.1%), Bakersfield (4.2%) and Fresno (4.4%) the least. Bonus, for the Foothold pages: of the current Foothold top eight (Rochester, Syracuse, Albany, Cleveland, Youngstown, Pittsburgh, Buffalo, Toledo), Buffalo (#2 by share) and Albany (#5) sit in the national top five for small-multifamily stock, Rochester is #13 (12.0%) and Syracuse #15 (11.7%); Cleveland (7.8%, #27), Toledo (7.6%, #29), Pittsburgh (7.4%, #31) and Youngstown (6.7%, #42) are near the 83-metro median. ## Reproduction Re-running the pull needs only the URL pattern above and the CBSA / place codes in the CSV.